esp8266

ESP8266, la alternativa a Arduino con Wifi

Ya iba siendo hora de que en el blog habláramos del ESP8266 y el ESP32, dos máquinas que están causando furor en el momento y labrándose un lugar destacado en este mundo de moda el IoT.

Cuando aparecieron los primeros módulos con el ESP866 muchos pensamos “bien, por fin un módulo Wifi asequible para Arduino” porque, en aquellos momentos, los shield y alternativas Wifi para Arduino eran prohibitivamente caros.

Sin embargo muchos miembros de la comunidad rápidamente supieron ver el potencial de este pequeño procesador, cuyas características y bajo precio han hecho que tenga un gran éxito en poco tiempo.

Ahora mismo tanto el ESP8266 como el ESP32 están marcando tendencia y demostrando día a día porqué son, a día de hoy, unos de los máximos representantes del IoT.

De hecho, muchos productos comerciales están basando su desarrollo en estos chips. Un ejemplo claro son los productos Sonoff de Itead, que permiten domotizar la casa por muy poco dinero. Según Espressif, su fabricante, han vendido más de 100 millones de unidades.

De hecho, es un producto tan interesante y con tanta relevancia dentro del sector #maker que vamos a crearle su propia sección en el blog, para que conviva dentro de los tutoriales de Arduino.

Pero antes, empecemos por el principio viendo qué es el ESP8266. En la próxima entrada veremos a su “hermano mayor” el ESP32.

¿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.

esp8266-soc

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.

esp8266-mcu

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.

Características del ESP8266

Estas son algunas de las características más relevantes:

  • Procesador de 32 bit de bajo consumo
  • Velocidad de 80MHz (máximo de 160MHz)
  • 32 KiB RAM instrucciones, 32 KiB RAM cache
  • 80 KiB RAM para datos de usuario
  • Memoria flash externa hasta 16MiB
  • Pila de TCP/IP integrada
  • Wifi 802.11 b/g/n 2.4GHz (soporta WPA/WPA2)
  • Certificado por FCC, CE, TELEC, WiFi Alliance y SRRC
  • 16 pins GPIO
  • PWM en todos los pines (10 bits)
  • Conversor analógico digital de 10 bits
  • UART (2x TX y 1x RX)
  • SPI, I2C, I2S
  • Voltaje de operación 3.0 a 3.6V
  • Consumo medio 80mA
  • Modo consumo stand-by (1mW) y 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. Iremos viendo estas placas próximamente.

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-ROT (basado en FreeRTOS) o Mongoose OS, entre otras opciones. También lo veremos próximamente.

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. El soporte y documentación sobre el ESP32 es aún inferior, pero crece rápidamente. Veremos el ESP32 y sus características en futuras entradas.

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.

esp8266-modulos

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).

esp01

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.

esp12e

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.