ESP8266 (Parte 1) : Programación en Lua y Arduino

 

Desde que llegara al mercado el módulo ESP8266, muchos desarrolladores han visto su potencial para crear nuevas aplicaciones sobre él gracias a su bajo coste pero gran funcionalidad, y seguramente todos ellos se hayan hecho la misma pregunta al principio, ¿cómo lo programo? Con estos dos artículos quiero contar las diferentes formas que he encontrado para programarlo, y así cada uno pueda usar la que más se ajuste a sus necesidades.

Antes de comenzar con la programación me gustaría comenzar por una breve explicación de la plataforma. Yo he trabajado con la placa de desarrollo NodeMCU, cuya única diferencia con respecto al módulo ESP8266 es que tenemos acceso a todos los pines del módulo y además cuenta con un microUSB para cargarle los programas. El ESP8266 lo fabrica la empresa Espressif y es un System-on-Chip (SoC) que integra el microcontrolador Tensilica L106 de 32bit. En la tabla siguiente podemos ver las especificaciones completas:

Procesador Tensilica L106 32bit RISC
Frecuencia 80 MHz OverClock 160 MHz
Memoria Flash 4 MB Memoria RAM 128 KB
Periféricos
GPIO 13 SPI 2
I2C 1 ADC 10 bit
PWM 4  UART  1
WiFi
Norma 802.11b/g/n Frecuencia 2,4 GHz

 

Todos estos datos se pueden consultar en la página oficial de Espressif:

https://espressif.com/en/products/hardware/esp8266ex/overview

 

En esta primera parte voy a explicar cómo programar el NodeMCU de las dos maneras más sencillas y más extendidas, usando el lenguaje de programación Lua y usando el framework de Arduino.

NodeMCU Firmware

nodemcu-style5-150px.png_150x150

Se trata de un firmware basado en el lenguaje de programación Lua. Ha sido implementado por los mismos desarrolladores que han creado la plataforma de desarrollo. Este firmware se encuentra escrito en C pero con instrucciones para que se usen con Lua, que es un lenguaje interpretado, como Python, por lo que es menos eficiente. La forma de programación es muy sencilla, por lo que es perfecto para proyectos poco complejos y ŕapidos, que no necesiten optimización.

Para usar este método, lo primero que tenemos que hacer es ir a la página de la documentación, al apartado de “Building the firmware” y crear nuestro firmware que cargaremos en la placa. El método más cómodo es usar su servicio basado en la nube, ya que indicamos qué módulos necesitamos, y nos envían por email el binario ya compilado que tenemos que flashear en la placa.

Después hay que flashear el firmware. Para ello el método que a mi siempre me ha funcionado es usar “esptool.py”. Leyendo el apartado “Flashing the firmware” encontramos cómo usar este programa sumamente útil. A la hora de cargar el firmware, es necesario ejecutar el script en modo superusuario para permitir acceder al puerto al que tengamos conectado el NodeMCU.

Por último, solo nos queda subir los scripts de Lua que hemos creado. Para ello la mejor herramienta es ESPlorer. La documentación para esta herramienta la encontramos en su página web: https://esp8266.ru/esplorer/ . Este programa cuenta con una zona donde escribir el código y otra que se conecta por puerto serie a la placa donde ver lo que imprimimos por pantalla desde el NodeMCU. Otras herramientas las podemos encontrar en el apartado “Uploading code”.

escritorio-esplorer

Yo personalmente descarté este método después de estar usándolo porque no tenía un control total de la memoria, sino que solo había un recolector de basura al que tú le indicabas cuando tenía que buscar memoria que liberar. Mi problema principal fue que el flujo de datos de entrada era más rápido que el tiempo que tardaba el NodeMCU en mandarlos por SPI, y se me llenaba la memoría.

La documentación de este firmware se encuentra en las siguientes páginas:

 

Arduino IDE

1200px-Arduino_Logo.svg

Una de las grandes razones por las que esta plataforma se ha hecho tan famosa, a parte del precio, es por ser conocida como “el Arduino barato con Wifi”, gracias a que los desarrolladores implementaron la compatibilidad para desarrollar programas en ella de la misma manera que con las placas de Arduino.

La ventaja de usar este método es que es muy sencillo y rápido de realizar, además cuentas con las numerosas librerías que se han desarrollado para Arduino y de una gran comunidad que puede ayudarte.

La desventaja es que tienes menos control de las capas más bajas del hardware y además cuentas con las limitaciones del IDE de Arduino.

Para desarrollar usando este método, hay que agregar la placa en el IDE como se hace habitualmente: Herramientas>Placa>Gestor de Tarjetas e instalamos el paquete “esp8266 by ESP8266 Community”. Una vez instalados los drivers, simplemente se programa, compila y suben los programas tal y como se hacen con el resto de placas de Arduino.

En el siguiente enlace dejo un tutorial en castellano que explica cómo utilizar este método, incluyendo algunos ejemplos:

https://programarfacil.com/esp8266/como-programar-nodemcu-ide-arduino/

 

En la siguiente entrada hablaré de métodos de programación usando C, donde se consigue un control mayor de todo lo que realiza el módulo.

ESP8266 (Parte 2): Programación en C, Simba y FreeRTOS