El ESP8266 es un SoC con WiFi integrado de bajo coste que cambió por completo la forma de añadir conectividad a proyectos de electrónica y automatización.
Antes de su aparición, conectar un microcontrolador a una red WiFi solía ser caro, aparatoso y bastante poco amigable. Los shields y módulos disponibles para Arduino podían costar más que el resto del proyecto, que ya es una forma bastante eficaz de quitarle a uno las ganas.
Con los primeros módulos ESP8266 muchos pensamos “bien, por fin un módulo WiFi asequible para Arduino”. Pero la comunidad enseguida vio que era mucho más que eso: no era solo un módem WiFi, era un microcontrolador completo capaz de ejecutar nuestros propios programas.
Desde entonces, el ESP8266 se ha convertido en una de las referencias del IoT doméstico y maker. Muchos productos comerciales lo han utilizado como núcleo, especialmente dispositivos de bajo coste para domótica y control remoto.
Un ejemplo claro son muchos productos Sonoff de Itead, que permiten domotizar la casa por muy poco dinero. Según Espressif, su fabricante, la familia ESP8266 llegó a vender más de 100 millones de unidades.
Así que vamos a empezar por el principio: qué es el ESP8266, qué lleva dentro y por qué tuvo tanto impacto.
¿Qué es el ESP8266?
El ESP8266 es un SoC (sytem on chip) fabricado por la compañía china Espressif. Este SoC agrupa distintos componentes en un mismo integrado, siendo los principales un procesador de 32 bits y un chip WiFi con gestión de pila TCP/IP.
En resumen el ESP8266 es un chip que integra en un encapsulado un procesador de propósito general con conectividad WiFI completa.

El procesador integrado en el ESP8266 es un Tensilica L106 de 32-bits con arquitectura RISC que funciona a una velocidad de 80Mhz, con una velocidad máxima de 160Mhz.

El ESP8266 no incorpora memoria Flash dentro del SoC, por lo que tiene que ser proporcionada por el módulo en el que se monta. La conexión entre la memoria se realiza por QSPI pero, de normal, su uso es transparente para nosotros.
Lo que sí es importante es recalcar que la memoria disponible varía entre módulos, no es está determinada por el ESP8266. Lo normal es encontrar modelos que montan de 1MiB a 8MiB, con un máximo de 16MiB.
{ “CPU y memoria”: [ { “label”: “Procesador”, “value”: “Procesador de 32 bit de bajo consumo” }, { “label”: “Velocidad”, “value”: “80MHz (máximo de 160MHz)” }, { “label”: “Memoria”, “value”: [“32 KiB RAM instrucciones”, “32 KiB RAM cache”, “80 KiB RAM para datos de usuario”, “Memoria flash externa hasta 16MiB”] } ], “Conectividad y certificaciones”: [ { “label”: “Conectividad”, “value”: [“WiFi 802.11 b/g/n 2.4GHz (soporta WPA/WPA2)”, “Pila TCP/IP integrada”, “Certificado por FCC, CE, TELEC, WiFi Alliance y SRRC”] } ], “GPIO y periféricos”: [ { “label”: “Pins GPIO”, “value”: “16” }, { “label”: “PWM”, “value”: “En todos los pines (10 bits)” }, { “label”: “Conversor analógico digital”, “value”: “10 bits” }, { “label”: “UART”, “value”: “2x TX y 1x RX” }, { “label”: “Interfaces”, “value”: “SPI, I2C, I2S” } ], “Alimentación y consumo”: [ { “label”: “Voltaje de operación”, “value”: “3.0 a 3.6V” }, { “label”: “Consumo”, “value”: [“Promedio 80mA”, “Stand-by 1mW”, “Deep sleep 1uA”] } ] }
Historia del ESP8266
Sin entrar mucho en profundidad, la historia del ESP8266 y su hermano superior ESP32 comienza en agosto de 2014 con la aparición de los módulos ESP01 de la mano del fabricante AI-Thinker.
En estos momentos, la forma de comunicarse con el ESP8266 era a través de módulos AT, la documentación era escasa y en chino, y el SDK complejo y poco accesible, por lo que la utilidad era aún limitada. Pero eso no impidió que se viera su potencial y la comunidad y distintos fabricantes comenzaron a trabajar activamente en él.
Otro hito importante fue la aparición del firmware NodeMCU, que también da nombre a una placa de desarrollo. Este firmware permitía programar el ESP8266 con LUA, un lenguaje semicompilado basado en C y Perl.
El trabajo de la comunidad continúo generando de documentación, tutoriales y herramientas. Así llegamos al siguiente gran hito, la liberación por parte de la comunidad de SDK alternativos Open Source para el ESP8266 basados en la toolchain GCC.
Esto permitió la programación con el entorno de Arduino con el ESP8266 Arduino Core. Esto supuso la catapulta definitiva para el ESP8266 en el sector maker, y le permitió beneficiarse del apoyo de la enorme comunidad de amantes de Arduino.
Espressif reaccionó (o vio el potencial, o le dio por apoyar a la comunidad) y generó nuevos SDK con una licencia similar a la MIT, lo que en cierta forma dio un soporte a la comunidad de usuarios.
Desde entonces, una gran cantidad de fabricantes han generado placas de desarrollo que integran el ESP8266. Algunas de las más famosas, entre otras, son la NodeMCU y la WeMos, ambas con distintas variantes.
También tenemos distintos SDK y firmwares disponibles, que permiten programar los módulos con ESP8266 en diferentes lenguajes. Así, tenemos MicroPython (lenguaje Python), Espruino (JavaScript), ESP-OPEN-RTOS (basado en FreeRTOS) o Mongoose OS, entre otras opciones.
En septiembre de 2016 se lanzó el ESP32, un modelo muy superior que solucionaba algunas carencias del ESP8266. Tiene un precio algo superior pero, si el ESP8266 es potente e interesante, el ESP32 es directamente una bestia parda. Aun así, el ESP8266 sigue siendo una pieza muy útil cuando queremos WiFi, bajo coste y un consumo razonable.
Tipos de módulos con ESP8266
Existen distintos módulos que integran el SoC ESP8266. Las características principales de estos módulos son similares y, básicamente, se distinguen en la memoria Flash disponible y en su forma física, que a su vez condiciona el número de pins GPIO que tienen accesibles.
En algunas placas (las menos) los GPIO tienen forma de pin, por lo que es posible soldar un cable, o conectar un terminal. Pero en la mayoría, los módulos tienen forma de “medio pin”, ya que están pensado para integrarse (soldados) en PCBs o placas de desarrollo.

Por ponerlo fácil, en resumen, por amplia diferencia los módulos más habituales son el ESP01 y el ESP12/ESP12E. El resto son bastante poco frecuentes.
El ESP01 es muy popular por ser el primero en aparecer, por su pequeño tamaño y precio reducido. En muchas ocasiones se usa para dotar de conectividad a una solución basada en Arduino (hacer de “shield Wifi”) como vimos en esta entrada. Aunque también se puede usar para desarrollos que requieran pocos GPIO (solo tiene 2 disponibles).

Por su parte, el ESP12 y su variante ESP12E se están convirtiendo en el modelo preferido del ESP8266, y es montado en una gran cantidad de placas de desarrollo y productor comerciales.

En próximas entradas veremos nos adentraremos en el muy interesante mundo del ESP8266 y el ESP32, distintos placas de desarrollo disponibles, cómo programarlos y tutoriales para ilustra algunos de los posibles usos de estos dos SoC que están impulsando el desarrollo del IoT.

