ESP8266, wifi low-cost


El ESP8266 es un potente SoC (System-on-chip) que los fabricantes están usando para crear módulos wifi para microcontroladores. Además en sí mismo, alguno de éstos módulos traen hasta 16 pines GPIO programables y alguna que otra funcionalidad extra. La idea es poder desarrollar el concepto de el Internet de las Cosas (IoT), es decir, conectar objetos cotidianos a Internet.

Modos

  • Station mode (estación): El dispositivo se configura tal que es capaz de conectarse a una red wifi ya existente pudiendo enviar y recibir paquetes de la misma.
  • SoftAP mode (punto de acceso): En este caso configuramos el chip como un mini router capaz de ofrecer un servicio DHCP, DNS o abrir ciertos puertos de escucha.
  • SoftAP station mode (mixo): El modo mixto implementa las dos modalidades anteriores, ofrecindo la capacidad, por ejemplo, de hacer un repetidor wifi (Declarando el gateway del chip con la IP del router a puentear).

Programación

Se debe conectar el chip con un cable FTDI-UART al ordenador y acceder a la línea de comandos con un programa de comunicación serial estilo Putty o incluso el IDE de Arduino.

Por defecto, el dongle acepta una serie de comandos AT (AT instructions set) para poder controlar tanto lo pines del módulo como la configuración del wifi pero resultan un tanto engorrosas y recomiendo flashear el chip con el firmware que nombro a continuación para poder usar un lenguaje un poco más similar al lenguaje natural.

NodeMcu (Firmware)

NodeMcu es uno de los fabricantes que integran el chip en sus productos, y ha desarrollado un firmware que es capaz de interpretar el lenguaje LUA, que se asemeja a otros lenguajes de programación más conocidos.

Para instalarlo tienes que descargar la herramienta NodeMcu-flasher (en el enlace se explica como usarla) y conectar el ESP8266 en modo flash a tu ordenador con un cable FTDI. Una vez realizado, el firmware buscará en la memoria del dispositivo un fichero init.lua y lo ejecutará

ESPlorer

ESPlorer es un IDE que sirve para implementar el código y poder subirlo y ejecutarlo en el ESP8266 así como enviar comandos simples. Permite usar comandos AT o, en caso de estar instalado el firmware, interpretar scripts LUA. Guía de uso.

A tener en cuenta

  • Sobreescribir uart.on
    Si estamos sobreescribiendo la función uart.on sucederá que el ESPlorer dejará de funcionar, ya que al enviar datos para intentar abrir la conexión serial el chip no podrá atenderlos de la forma esperada sino que realizará la función que hayas especificado. Si estamos depurando el código cada vez que lo carguemos en el chip, este se colgará y habrá que flashearlo nuevamente. Por ello puedes hacer lo siguiente:
    • Si debugeas, no guardes el código en la memoria flash del dispositivo directamente, ejecútalo línea a línea (así si el UART queda bloqueado, con reiniciar el dispositivo todo volvería a la normalidad).
    • Usa temporizadores. Antes de la ejecución de tu código asegúrate de poner un temporizador con unos 5 a 10 segundos. De esta forma, al encender el dongle, siempre tendremos un tiempo de holgura para poder eliminar el script de la memoria y no tener que flashear de nuevo.
    • Usa una cadena de escape. Es decir, un string que al ser recibido via wifi o bien UART, redefina el método uart.on y lo deje como por defecto.
  • Usar un init.lua "genérico"
    Podemos crear un init.lua que haga de "lanzador" de otros programas con dofile("otro.lua") para así controlar la ejecución de los mismos y no caer en errores como el que menciono con anterioridad. Además aporta más legibilidad al código y en cierta forma también lo modulariza.