Cómo programar el ESP8266 por WiFi con Arduino OTA


Hacemos una pequeña pausar en las entradas del ESP8266 como servidor para ver una de las funcionalidades más interesantes, la programación OTA.

En las entradas anteriores hemos visto las formas de conexión del ESP8266 (AP, STA), el ESP8266 actuando cómo cliente, y varias entradas con el ESP8266 como servidor.

La programación OTA (Over The Air) es una funcionalidad muy interesante que nos permite cargar el firmware o los ficheros del SPIFFS del ESP8266 a través de una conexión Wi-Fi, en lugar del habitual puerto serie.

Esto nos permite reprogramar el ESP8266 sin tener acceso físico, o necesidad de conectarnos al módulo con un cable. Por supuesto, es una funcionalidad muy interesante cuando pongamos uno de estos módulos en una instalación permanente (imaginaros que está detrás de un mueble, dentro de una caja, o pegado al techo...)

Anuncio:

Afortunadamente, la programación OTA es muy sencilla gracias a la librería ArduinoOTA, que también se encuentra integrada en la definición de hardware del ESP8266 que instalamos para poder programar el ESP8266 desde el Arduino IDE.

La programación OTA puede realizarse desde el propio Arduino IDE, desde IDEs basados en el (Visual Studio Micro, Visual Studio Code, PlatformIO… ) o directamente por Web. En esta entrada veremos la primera de ellas, desde el propio Arduino IDE.

Para que la programación OTA funcione en el ESP8266 en el IDE Arduino es necesario que tengamos Python instalado. Si aún no lo habéis hecho, aquí tenéis un tutorial.

Además, para que la programación OTA funcione es necesario que el ESP8266 disponga del doble de memoria ocupada por el programa que vamos a subir. Esto es así porque, por seguridad, el programa se sube a la memoria temporalmente. Cuando la carga ha terminado, se vuelca a la memoria flash.

Librería Arduino OTA

Como decíamos, la "magia" de la programación por WiFi recae en la librería Arduino OTA, que dispone de todas las funciones que necesitamos para gestionar el proceso.

El primer lugar, es necesario inicializar la librería con la función

Posteriormente, en el bucle principal debemos llamar a la función que se encarga de gestionar el OTA si se recibe una petición de programación.

Por otro lado, la librería proporciona distintas función de callback cuando ocurren ciertos eventos en el proceso OTA.

En ocasiones, puede ser importante añadir acciones en estos eventos. Por ejemplo, en el caso de una máquina que controla un proceso, este va a quedar "suspendido" mientras se produce la reprogramación OTA.

Por tanto, sería necesario añadir las acciones oportunas para que el proceso se desarrolle con seguridad (por ejemplo, parando los motores, o llevando la máquina a una posición segura).

Adicionalmente, se dispone de la función 'getCommand()' que funciona mientras el proceso OTA se ha iniciado, nos permite distinguir si el proceso OTA es del firmware (Flash) o del sistema de archivos (FS).

Otra cuestión importante es la relativa a la seguridad porque, lógicamente, en muchas ocasiones no queremos que cualquier pueda reprogramar nuestra placa. Por tanto, la librería ArduinoOTA permite añadir un password para autentificar el proceso OTA.

Finalmente, la librería proporciona las siguientes funciones relacionadas con el OTA,

Ejemplo de programación OTA

Una vez visto en detalle la librería ArduinoOTA en su implementación para el ESP8266 toca verlo todo con un ejemplo. Como de costumbre, vamos a dividir el código en ficheros para mejorar la reutilización y mantenibilidad.

Así, creamos un fichero llamado 'ESP8266_Utils_OTA.hpp' cuyo contenido es el siguiente.

Este fichero contiene toda la lógica repetitiva del proceso OTA. Esto permite que nuestro Sketch principal queda tan sencillo como

Cargamos el programa en el ESP8266 como habitualmente, a través del puerto serie. Ahora, ya podemos soltar el cable del ordenado y dejarlo conectado únicamente a una fuente de alimentación (por ejemplo, un cargador de móvil, una batería, etc…)

Por otro lado reiniciamos el Arduino IDE. Al volverlo a iniciar, veremos que tenemos un nuevo "puerto" de programación.

Seleccionamos este puerto de programación WiFi y volvemos a subir el fichero. Veremos que el proceso se muestra correctamente en el Arduino IDE.

Y, si tuviéramos conectado el ESP8266 a un ordenador veríamos la salida por puerto serie indicando asimismo el proceso.


Es importante que recordemos añadir la funcionalidad OTA en el firmware nuevo firmware que subamos o perderemos la capacidad de programación OTA.

¡Así de sencillo! En general, el proceso es bastante sencillo y muy robusto (a mí nunca me ha fallado). Ahora podéis usar la programación WiFi para probar vuestros ejemplos, subiendo tanto firmware como ficheros del SPIFFS.

En las próximas entradas nos adentraremos en las funcionalidades del ESP8266 como servidor, aprendiendo cómo enviar datos desde el cliente al ESP8266 a través de un formulario.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en GitHub.

Si te ha gustado esta entrada y quieres leer más sobre ESP8266 puedes consultar la sección
tutoriales de ESP8266

Anuncio:

Previous Cómo hacer un servidor asíncrono en ESP8266
Next ¡Cumplimos 8 añitos de blog!
1000
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
newest oldest
Roberto

Ostras es genial esto! He aplicado el OTA a uno de los ejemplos de la serie ESP8266, el del deslizador para el LED por PWM, y funciona a las mil maravillas, que pasada!! Con este artículo de OTA ya he terminado todos toditos. Me costó un poco el de python por la instalación e instalar la libreria serial, tuve que consultar un poco a youtube y luego ejecutar scripts, pero toditos, perfecto. Mis felicitaciones Luis!! Que sigan esos artículos que son una pasada! Gracias!!