¿Es el ESP8266 un Arduino Killer?
Desde que apareciera la versión ESP-07 del módulo ESP8266 y sobre todo con la salida del firmware (y módulo) NodeMCU, empieza a difundirse la duda entre los que se inician en la programación de microcontroladores si no habrá pasado de moda Arduino y lo que ahora se impone es el nuevo estilo de programación que trae el firmware con el lenguaje Lua para el módulo ESP8266.
¿Se pueden comparar las placas Arduino y los módulos ESP8266?
La crítica que se hace, estar comparando peras con manzanas, al hablar de Arduino (un µC genérico) frente al ESP8266 (un SoC, µC+WiFi) es lícita pero no es menos cierto que uno y otro empiezan a convivir en contextos muy similares en los que pueden llegar a competir, por ejemplo en el prototipado y en el diseño de dispositivos para Internet de las cosas y, con matices, en su fabricación.
El sector en el que se encuentra un ESP8266 involucra comunicaciones WiFi, que desde luego no son las únicas para la IoT pero sí que son muy relevantes. Por otro lado, Arduino es el rey en la primera línea del aprendizaje de la programación para electrónica mientras que los ESP8266, usados de manera autónoma, sin otro µC que los controle, pueden requerir algo más de experiencia.
¿Qué es Arduino?
Arduino es una placa de desarrollo basada en un microcontrolador Atmel y, lo más importante, un conjunto de software para programarla. Las prestaciones del microcontrolador y en menor medida las características de las placas han variado conforme han ido apareciendo diferentes versiones y nuevos modelos (Leonardo, Mega, Due, Zero…) hasta llegar a algunas muy avanzadas que, sin embargo, y esto es un factor muy relevante, pueden programarse desde el mismo entorno y utilizando el mismo esquema que la original.
¿Por qué ha tenido Arduino tanto éxito?
Al ser un producto de hardware libre y software libre, además de los usuarios a pequeña escala, otros fabricantes, a gran escala, han podido crear sus propias versiones de dispositivos que soportan el software de Arduino y/o extenderlo ya sea con librerías ya sea implantándolo en MCU alternativas.
Una placa de desarrollo con un microcontrolador y algunas entradas y salidas accesibles (en tiras de pines) no es una gran novedad; el principal acierto de Arduino es el software que se utiliza para programarlo. Frente al potente, pero intimidante para un novato, IDE de Atmel con los que programar sus microcontroladores, Atmel Studio, uno de los más completos en su segmento, Arduino ofrece al usuario un entorno de desarrollo simple sobre una capa muy eficaz (GCC, los mismos compiladores base que Atmel Studio) y lo dota de un conjunto de librerías muy variado con las que poder empezar a crear proyectos que usen dispositivos (sensores y actuadores) diferentes rápidamente incluso sin tener mucha experiencia en electrónica ni en programación por lo que personas de sectores dispares pueden acercarse a la programación de microcontroladores y a la electrónica en general.
Arduino se ha hecho grande gracias a su comunidad
El software fácil de usar pero no por eso menos útil y su filosofía abierta le han proporcionado una gran aceptación entre desarrolladores de electrónica de diferente nivel y entorno a Arduino se ha creado una gran comunidad. Arduino goza de muchísimas aportaciones en forma, sobre todo, de librerías y documentación con las que poder integrar una cantidad inmensa de dispositivos electrónicos con los que iniciar el aprendizaje de la programación de microcontroladores y/o proyectar usándolos.
Su cercanía a lo pedagógico y a lo lúdico hace a Arduino muy popular
El IDE de Arduino está basado en el de Processing, una herramienta de desarrollo multiplataforma para creadores gráficos sin experiencia en programación. No es raro que, herencia de sus orígenes, uno de los usos que se le ha dado es el de captador y controlador de equipos para fines artísticos. Arduino se ha usado principalmente con fines pedagógicos y cómo no, lúdicos o amateur. Aunque es muy fácil de usar por sí mismo, hay desarrollos para explotarlo con otros entornos aún más básicos, como Scratch, destinados a servir al público infantil como introducción a la programación y a la electrónica. La micro-robótica educativa es uno de los usos en los que más cómodamente se ha desarrollado Arduino ya que ofrece una ocasión excelente para trabajar con diferentes tipos de actuadores y sobre todo de sensores, creando productos muy atractivos (pequeños robots) y motivadores fáciles de usar en la gamificación de la programación y la electrónica.
El factor diferenciador está relacionado con la Internet de las cosas
Otro de los campos en los que Arduino está siendo cada vez más usado para prototipar y para investigar es el de la Internet de las cosas. Diferentes fabricantes han desarrollado módulos para Arduino con los que establecer comunicaciones de diferente tipo orientados a usos específicos como comunicaciones cableadas Serie RS-232 o RS-485, Ethernet… o inalámbricas RFID, Bluetooth, ZigBee… una de las más populares por su ubicuidad pero también por su eficacia en un entorno doméstico o urbano es la comunicación inalámbrica por WiFi.
Las placas Arduino no incluyen comunicaciones WiFi
Como originalmente Arduino no incluía WiFi algunos fabricantes aportaron módulos con componentes a tal efecto. Uno de los más populares fue el ESP8266, que además de ser muy barato es muy eficaz y sencillo de explotar desde Arduino utilizando conexiones serie (hardware) y comandos AT (software) con un rendimiento muy interesante.
¿Qué es un módulo ESP8266?
Los módulos ESP8266 están formados por
-
el propio SoC ESP8266 de Espressif, que es un integrado que incluye, entre otras prestaciones
- hardware para comunicaciones WiFi 802.11 b/g/n
- en el nuevo modelo, hardware para comunicaciones Bluetooth de baja energía (Bluetooth LE)
- un µC (dos en el nuevo modelo) RISC de 32 bits que funciona a 80 MHz o a 160 MHz en el nuevo modelo
- una ROM de arranque de 64 KB, una RAM de instrucciones de 64 KB y una de datos de 96 KB que pasa a ser de 400 KB en los nuevos modelos
- comunicaciones SDIO, SPI, UART e I²C además de algunos GPIO
- un sensor interno de temperatura
- un ADC de 10 bit
- en casi todos los modelos una antena integrada de diferentes tipos y/o la posibilidad de una externa
- una memoria flash SPI 25Q40B de 4 Mbit
- un oscilador externo, alguna resistencia, varios condensadores y hasta dos LED dependiendo de la versión
Aunque su diseño tuviera como objetivo inicial servir para las comunicaciones WiFi controladas por una MCU externa, con tales prestaciones hay muchas tareas que es capaz de realizar sobradamente por sí mismo.
Paradójicamente, el precio de una placa de desarrollo basada en un ESP8266 tiene un precio equiparable a una pequeña placa Arduino y, por supuesto, un módulo ESP8266 básico cuesta la mitad de una placa Arduino.
El software libre es clave
Al igual que en su momento le ocurriera a Arduino, un diseño abierto y la comunidad generada en su entorno propició aportaciones para la mejora de las prestaciones software del módulo. Aunque hay algunas modificaciones sobre el firmware original que no deben considerarse menores, sin duda la circunstancia diferencial que ha hecho que se popularice en el mundo de la IoT como dispositivo autónomo e incluso como una alternativa a Arduino, ha sido la creación de un firmware que permite programarlo en el lenguaje Lua. Lógicamente, esto no hubiera sido posible sin el SDK del ESP8266 (basado también en los compiladores GCC) con el que se desarrolló.
Además de usar los lenguajes C y C++ el módulo ESP8266 puede programarse en otros como Lua o JavaScript
Su popularidad ha hecho que siga un camino con algunos paralelismos que permiten compararlo con Arduino, por ejemplo, la adaptación de otros entornos con los que poder programarlo usando diferentes lenguajes. En ese sentido Espruino, que sirve para programar en JavaScript (ECMAScript) el ESP8266 es una interesante alternativa, quizá no en lo productivo, pero seguro sí en la investigación y en la enseñanza.
El módulo ESP8266 es una solución más completa para IoT
Como se ha visto, es posible utilizar el ESP8266 como un microcontrolador genérico pero es en el contexto de la Internet de las cosas, por sus posibilidades de comunicaciones WiFi donde su papel es más relevante. Al contrario, Arduino suele estar presente en aplicaciones más genéricas que, por supuesto, tampoco excluyen al diseño de dispositivos IoT.
Mientras que el estilo de integración de los recursos de Arduino en un proyecto para Internet de las cosas implica normalmente «deconstruirlo», usar su software en un hardware diseñado ah hoc con uno de los numerosos microcontroladores compatibles, los módulos basados en el ESP8266, por su formato y tamaño, permiten directamente su integración en el diseño definitivo de un proyecto.
El diseño de un dispositivo que usa la tecnología de Arduino implica el diseño de una PCB que incluye un microcontrolador programado como un Arduino mientras que el mismo dispositivo usando un ESP8266 puede estar basado en una placa que incorpore el módulo completo.
El SoC ESP8266 puede competir en lo genérico con Arduino por precio
Si bien los módulos ESP8266 no pueden competir en número de GPIO con algunas placas Arduino, el carácter de nodo de la mayoría de los equipos IoT y la posibilidad de añadir integrados específicos hacen que no sea un inconveniente especialmente significativo frente a, por ejemplo, las prestaciones como microcontrolador de a las gamas más básicas de Arduino, que tampoco podrían competir con los bajísimos precios de los ESP8266 y menos aún si necesitan al propio ESP8266 para gestionar las comunicaciones WiFi.
¿Cuándo usar Arduino y cuándo usar un módulo ESP8266?
Para terminar y, a modo de resumen, las siguientes son algunas de las circunstancias en las que suele ser recomendable utilizar uno u otro.
-
Para los que empiezan en electrónica o en la programación de microcontroladores es más adecuado Arduino. Hoy por hoy es más sencillo usarlo en tareas básicas, hay mucha más documentación (sobre todo para la fase inicial) y multitud de librerías que permiten empezar a utilizar inmediatamente componentes (sensores y actuadores) muy diferentes sin necesidad de conocimientos avanzados de los mismos.
-
El ESP8266 es excelente para aprender lenguajes alternativos en electrónica a los clásicos (y eficacísimos) C o C++, especialmente el lenguaje Lua independiente de que se trabaje o no con comunicaciones WiFi.
-
Una vez que se ha aprendido una base electrónica y de programación, para desarrollar dispositivos que actúen como nodos de la Internet de las cosas el ESP8266 no tiene rival en precio y aunque no sea el mejor, es excelente en prestaciones. Las placas convencionales de Arduino no son capaces de conectar a una WiFi sin un módulo extra como el propio ESP8266.
-
Las gamas más altas de microcontroladores soportados por Arduino, normalmente los de arquitectura ARM, tienen mayores prestaciones que los ESP8266 que quedan, especialmente en el caso de los nuevos ESP8266, con dos procesadores a 160 MHz y 400 KB de RAM, en una interesante gama intermedia.
jose
Buenas noches Victor,
Me encaanta la exposicion que haces de cada tema. En este caso quiero hacerte una pregunta asociada a este articulo. He programado un ESP8266 desde el IDE de arduino, para trabajar independientemente de este controlador. Memorizo en la eeprom los parametos de conexion al la wifi de casa, y una vez flasheado enciende y/o apaga los dos leds conectados en GPIO0 y GPIO2. Y todo funciona aunque se desconecte la conexion serie con el ordenador.
Pero, si apago el SP8266, al encenderle ya no conecta al wifi, pero no porque se haya borrado la Eeprom, o el programa, sino porque no autoarranca. Mi pregunta es ¿Hay que hacer algo especial paa que autoarranque al encenderse?
Víctor Ventura
Hola, Jose.
Si has programado el propio módulo ESP8266 (es decir, no lo controlas desde una placa Arduino) debe iniciarse el programa al encender o resetear el módulo sin hacer nada (especial) más que alimentarlo.
¿La conexión en modo producción (no programación) es correcta? ¿Espera tu programa comunicaciones serie u otro factor externo, que pueda no estar disponible, para funcionar?
Gracias por los piropos y por visitar el blog 🙂