ESP8266 y el "internet de las cosas"

En 2014 se publicó un pequeño circuito integrado que, poco a poco, ha ido ganando fama: el ESP8266. Se trata de un microcontrolador bastante capaz de (relativamente) bajo consumo eléctrico y lo más interesante de todo es que incluye soporte WIFI integrado. El chip es lo bastante capaz como para que podamos programarlo en lenguajes de alto nivel como Lua o Python y el traer WIFI de serie permite una integración doméstica trivial: el famoso Internet de las cosas. ¡Y todo por menos de dos euros!

esp8266.jpg

Los circuitos de arriba son ESP8266 con la infraestructura necesaria para que se puedan conectar a una placa con agujeros estándar de 2.54mm, soporte para poder enchufarlos a un ordenador mediante USB, poder programar la memoria flash de los chips, botón de reset y poder alimentarlos con 5 voltios.

Abajo, una placa ESP8266 pelada con el cableado mínimo para hacerla funcionar. Observa su tamaño respecto a la moneda.

Algunas características hardware del ESP8266:

  • CPU RISC de 32 bits a 160MHz.
  • 64KBytes de RAM para instrucciones ("paginable" sobre una memoria flash externa soldada en la propia placa de circuito impreso).
  • 96KBytes de RAM para datos.
  • 64KBytes de ROM de arranque.
  • WIFI de 2.4GHz, con soporte WPA2.
  • Modos de sueño con un consumo inferior a 10 microamperios.
  • Modos de espera de bajo consumo, manteniendo la conexión WIFI viva, de menos de 1mW.

A la hora de comprar un ESP8266, lo más importante es saber que no compras un ESP8266, sino una pequeña placa de circuito impreso que incluye componentes adicionales como una memoria flash de tamaño diverso y una antena WIFI. Hay muchos diseños diferentes, de diversos fabricantes y con tamaños de memoria flash distintos. La selección es un poco complicada. Por ejemplo, observemos la tabla en la Wikipedia.

En la fotografía, las placas USB usan ESP-12E con 4MB de memoria Flash y las placas pequeñas son ESP-12F, también con 4MB de memoria Flash.

Conecto una de las placas con capacidad USB a mi portátil y ejecuto el siguiente comando:

$ python3 -m serial.tools.miniterm /dev/ttyUSB0 115200
--- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
(pulso el botón de reset)
(basura)n't use rtc mem data
Ai-Thinker Technology Co.,Ltd.

ready

Habitualmente, las placas ESP8266 incluyen una interfaz AT simple. Esto permite conectar el ESP8266 a otros dispositivos sencillos como microcontroladores de baja potencia que pueden utilizarlo como pasarela puerto serie a WIFI de forma trivial y barata.

Los comandos AT incluidos son bastante potentes, permitiendo conectar a una red WIFI, establecer conexiones TCP/IP y tunelizar un puerto serie a través de ellas. Incluso se puede configurar un ESP8266 como punto de acceso WIFI para terceros. Con su servidor DHCP y todo.

Mi problema fundamental con ESP8266 es que hay muy poca documentación, mucha de ella está en chino (literalmente) y existen áreas completamente no documentadas. Es de esperar que la situación vaya mejorando poco a poco, pero resulta bastante frustrante.

Algunos enlaces interesantes:

El lenguaje de programación nativo de ESP8266 es C, usando un SDK proporcionado por el fabricante o una implementación "casi abierta", ambas disponibles de forma gratuita. Pero existen otras opciones: