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

nodemcu_pins

 

En este segundo artículo voy a contar dos soluciones para programar en C el módulo ESP8266. Estas soluciones son mucho más potentes pero también se tarda más en implementar los programas.

Simba

logo

Después de encontrarme con los problemas de memoria mencionados en la anterior entrada, busqué una forma de programar el ESP8266 en C, y encontré el sistema operativo Simba. Simba es un RTOS (Sistema Operativo de Tiempo Real) escrito en C y con numerosos drivers fáciles de usar.

La forma de usar Simba con el ESP8266 también es muy sencilla, solo hay que descargar e instalar el editor Atom y luego dentro de Atom añadir el paquete de PlatformIO (platformio-ide). PlatformIO es un ecosistema orientado a la programación de sistemas empotrados. La ventaja principal de este ecosistema es la facilidad de compilar, flashear el firmware y conectarse por puerto serie desde el propio Atom.

Para empezar a programar nuestro ESP8266, crearemos un nuevo proyecto de PlatformIO y seleccionaremos la placa que vamos a utilizar, en mi caso, NodeMCU 1.0 (ESP-12E Module). Si queremos usar Simba tendremos que abrir el fichero platformio.ini y cambiar el framework escribiendo “framework = simba”. Además tendremos que ir a la carpeta lib/ y abrir el fichero readme.txt donde sustituiremos todo el fichero por el árbol de ficheros que tenemos en la página de documentación de Simba: https://simba-os.readthedocs.io/en/latest/developer-guide/file-tree.html. Todo el código que queramos añadir se meterá en la carpeta src/ .

escritorio-simbaos

Por último solo tendremos que usar los siguientes botones:

Compilar

Flashear

Terminal puerto serie

 platformio-compilar platformio-flashear  platformio-puerto_serie

Pese a su sencillez de uso  y rápido aprendizaje, he dejado de usar este sistema operativo debido a que hay drivers que no están implementados completamente y algunos los he tenido que hacer yo mismo. En mi caso, hago uso de Websockets para la comunicación, y las funciones para conectar un cliente de Websocket a un servidor del mismo tipo no estaban correctamente implementadas. Además me he encontrado funciones muy útiles que no funcionaban y al mirar el código he visto que no estaban implementadas, solo estaban definidas.

Creo que es un sistema operativo muy fácil de aprender a usar y tiene la potencia de C a su vez, pero para llegar a ser mi primera opción tendrían que trabajar más con los drivers, no puede ser que publiquen drivers sin implementar.

Otro fallo que le he visto, sobre todo debido a que me interesaba trabajar a bajo nivel, es que el código del firmware se encuentra oculto en una carpeta. Personalmente sería más cómodo que ese firmware que se va a compilar apareciera en el proyecto directamente, por si fuera necesario adaptarlo o para consultarlo más cómodamente.

Toda la documentación se puede encontrar en los siguientes enlaces:

 

 

  1. FreeRTOS

logo_freertos

Por último, pero para mi la solución con mayor potencial es el framework ESP-OPEN-RTOS. Es un firmware basado en FreeRTOS y en el SDK oficial de Espressif. Ha sido desarrollado por la empresa SuperHouse pero es de código abierto. No solo incluye FreeRTOS, sino que además se agregan librerías probadas de terceros que aumentan su funcionalidad. Principalmente estas librerías son lwip, que implementa la pila TCP/IP para sistemas empotrados, y embedTLS para implementar los protocolos TLS y SSL.

Para comenzar a utilizar hay que seguir las instrucciones que se indican en el repositorio:

  1. Clonar el repositorio de esp-open-sdk y compilarlo con :

make toolchain esptool libhal STANDALONE=n

  1. Añadir al PATH la carpeta “esp-open-sdk/xtensa-lx106-elf/bin”.
  2. Clonar el repositorio de esp-open-rtos en modo recursivo:

git clone –recursive https://github.com/Superhouse/esp-open-rtos.git

  1. Compilar y cargar el proyecto desde la carpeta raíz del firmware:

make flash -j4 -C examples/http_get ESPPORT=/dev/ttyUSB0

 

Este framework contiene numerosos ejemplos con los que aprender cómo usar los drivers, por ejemplo, como conectarse a una red WiFi o usar determinados periféricos.

Su ventaja principal es que se puede controlar todo el sistema ya que es una ampliación del framework básico del fabricante. Además tiene buenas valoraciones en Github y sus actualizaciones son bastante recientes.

La desventaja de este framework es que se necesita un mayor conocimiento de programación y electrónica para usarlo, además de que su tiempo de desarrollo es mayor frente a las soluciones que expliqué en el primer artículo.

Toda la documentación de esta solución se puede encontrar en su repositorio:

Github: https://github.com/SuperHouse/esp-open-rtos

Si se desea utilizar una solución más sencilla pero a su vez más limitada, se puede consultar en la parte 1.

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