Diferentes plataformas para escribir firmware en el ESP8266

Ya hablamos en la anterior entrada de las diferentes posibilidades que nos ofrecía el ESP8266. Un módulo con unas características bastante potentes para tratarse de un módulo de bajo coste.

ESP8266En esta entrada vamos a dar una primera pincelada a las diferentes plataformas existentes para cargar firmware en el ESP8266. Una decisión que dependerá en buena medida del uso que se le quiera dar y del ámbito del proyecto en el que vayamos a usar el módulo. Para tomar esta decisión, deberíamos de tener en cuenta ciertos aspectos como:

  • Si el proyecto va a requerir actualizaciones contínuas (y de qué manera las va a recibir).
  • Si el proyecto se trata de un prototipo o de un proyecto profesional.
  • Si el sistema que vamos a desarrollar requiere de varias rutinas ejecutándose en tiempo real.
  • Dependerá en cierta medida de los conocimientos y de la soltura del desarrollador.

Diferentes alternativas

Existen varias alternativas para cargar firmware en el módulo, pero nos vamos a centrar en las más documentadas y en las que la comunidad sea más activa:

Espressif SDK

La propia fabricante del módulo nos proporciona dos alternativas para comenzar nuestros proyectos.

La primera alternativa se trata de NONOS, un SDK escrito en C cuyas siglas se refieren a la ausencia de sistema operativo (Non Operative System). El SDK nos documenta una serie de funciones que nos facilita el manejo del módulo. Dichas funciones en su mayoría funcionan a modo de callbacks cuando sucede un evento.

  • Pros: Empiezan a estar bastante bien documentadas las funciones y hay bastantes ejemplos en la propia web de Espressif.
  • Contras: Se trabaja en C, por lo que hay que tener conocimientos en el lenguaje. La estabilidad del sistema recae en el programador. El soporte en el foro oficial de Espressif deja mucho que desear.

La segunda alternativa que nos ofrecen desde Espressif es RTOS, un SDK escrito en C y basado en FreeRTOS ( sistema operativo con bastante aceptación en el mundo de los microcontroladores ). Esta alternativa es la más completa que podemos encontrar. Nos permite la creación de hilos de ejecución (Tasks), utilizar la mayoría de los callbacks de NONOS, utilizar Timers o Queues (colas).

  • Pros: Los sistemas que se pueden construir con este SDK son de gran embergadura. La gestión de hilos y colas es muy eficiente y funciona a gran velocidad.
  • Contras: Escaso sporte en el foro oficial y la documentación de Espressif no es todo lo completa que debería. Sin embargo, al basarse en FreeRTOS, puedes utilizar su documentación cuando tengas dudas. El nivel de C requerido es alto. Conseguir estabilidad en el sistema basándose en hilos requiere mucha destreza.
Arduino IDE

Reconozco que era escéptico en cuanto a este proyecto que ha unificado las funciones de Arduino para el ESP8266. Es decir, han creado una capa superior que ausenta al programador del SDK y permite con funciones básicas de Arduino realizar tareas que escribirlas en NONOS (por poner un ejemplo) nos podrían llevar varios días.

El trabajo que está realizando la comunidad (reunida en ESP8266.com) es excelente y la integración con Arduino es impresionante. Los ejemplos son múltiples y el soporte desde Github o desde sus propios foros es constante. Crearte un proyecto de servidor web asíncrono con sistema de ficheros y de mientras leer datos de algún sensor nunca había sido más sencillo que gracias a esta gente.

  • Pros: Facilidad, documentación y ejemplos son sus puntos fuertes. Un buen foro y mucha comunidad tienen la culpa de todo esto. Realizar un prototipo con todo este sistema te llevará muy pocas líneas de código. La gestión de las variables (limpieza y optimización) no recae directamente en el desarrollador y está bastante optimizado y estable.
  • Contras: El IDE de Arduino es bastante pobre, pero estoy bastante impresionado con la migración a Visual Studio para Arduino. La comunidad desarrolla muchas librerías, pero muchas de ellas se quedan en fase beta y nunca llegan las actualizaciones. Por todo esto, deberías de tener muy claro el tipo de proyecto en el que quieres usar esta plataforma (prototipo, personal o profesional…).
NodeMCU

Ya contamos en la entrada anterior algo sobre NodeMCU. Una base de firmware basada en el lenguaje de scripting LUA.

Con esta manera de trabajar volvemos al sistema orientado a eventos (callbacks) que tan cómodo me parece. Además, hay que resaltar que LUA es un lenguaje bastante parecido a Javascript y su forma de escibir funciones tipo callback se podría  parecer a trabajar con Nodejs. El SDK en LUA es muy ligero y potente.

  • Pros: Facilidad de desarrollo de funcionalidades. Buena comunidad detrás del proyecto. Buen ritmo de respuestas en los foros.
  • Contras: Los IDE que se suelen utilizar son bastante pobres. Falta documentación para funcionalidades básicas (por ejemplo crear un sistema de ficheros).
Resto de alternativas

Además de las mencionadas, existen otras alernativas como pueden ser SMING (framework escrito en C++) con bastante buena pinta y recorrido o con Espruino y Smart.js (basados en Javascript). Estas dos últimas muy sencillitas y con mucho futuro dentro del prototipado de productos.

Conclusiones

Hay demasiadas alternativas a la hora de elegir cómo desarrollar firmware para el módulo.  Muchas de ellas poco a poco se irán quedando estancadas y a largo plazo estarán descontinuadas esperando nuevas oportunidades.

En este momento parece que desarrollar firmware usando las librerías de Arduino es la mejor opción para un prototipado rápdio o para un producto estable con complejidad media (hay librerías de servidores desarrolladas muy potentes). Si el módulo va a ser parte de un sistema complejo, integración con otras librerías o el sistema tiene necesidades concretas como tener multiproceso, recomendaría usar el SDK de Espressif para RTOS.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *