▷ #ESP32 - Over-The-Air programming #OTA

⭐⭐⭐⭐⭐ #ESP32 - Over-The-Air programming #OTA 

Los microcontroladores ESP32 tienen tecnologías Wi-Fi y Bluetooth incorporados, los que los vuelve una muy buena opción para el IOT por su versatilidad para sistemas completamente inalámbricos. Sin embargo, como todo microcontrolador para poder usarlo debemos cargarle una programación al dispositivo, y dicha programación siempre la realizamos por cable. Los que nos obliga a si en futuro deseamos actualizar la programación de nuestro sistema, tener que ubicarnos físicamente alado del equipo con un cable usb serial conectado a una computadora, quitando una de las ventajas del IOT de poder utilizar el dispositivo desde cualquier lado. 

Para solventar esta problemática tenemos el OTA. Over-the-air programming (OTA programming) se refiere a varios métodos de distribución de nuevo software, ajustes de configuración a dispositivos como teléfonos móviles, decodificadores, coches eléctricos o equipos de comunicación de voz segura, de manera inalámbrica, de allí su termino de programación por “aire”.

Para este blog hablaremos de OTA para ESP32, sin embargo, es bueno destacar que estos métodos son muy usados en diferentes ámbitos del día al día, como las actualizaciones de nuestros teléfonos móviles, computadoras entre otros, e invitamos al lector a profundizar en los diferentes métodos OTA para otros dispositivos.

ESP32-ARDUINO OTA

Una vez entendido el termino OTA, podemos enfocarnos para nuestros dispositivos ESP32.  La programación OTA permite actualizar / cargar un nuevo programa en ESP32 usando Wi-Fi en lugar de requerir que el usuario conecte el ESP32 a una computadora a través de USB para realizar la actualización. Para realizar la programación OTA en el ESP32 existe una variedad de librerías que nos permiten realizarlo, para este blog nos concentraremos en la librería “ArduinoOTA” que viene instalada por defecto al instalar las placas ESP32 en el ARDUINO IDE.

Para implementar la programación OTA en ESP32, tenemos dos formas diferentes:

Pasos para seguir:

1) Instalar Python en nuestro ordenador:

 

2) Abrir IDE Arduino



3)  Tools -> Board -> ESP32 Arduino -> ESP32 Dev Module

4)  Seleccionar file -> Examples -> ArduinoOTA -> BasicOTA


Código básico para ArduinoOTA

Una vez realizados estos pasos tendremos la configuración mínima para realizar la programación OTA, a continuación, explicaremos a profundidad las diferentes partes del código para el entendimiento del lector.


  • Exportar librerías: Incluimos las librerías necesarias para nuestra configuración OTA, cabe mencionar que no existe problemas si deseamos agregar más librerías, lo importante es tener las cuatro mostradas

  • Conexión WIFI: Como mencionamos en la introducción, la programación del microcontrolador se realizara de manera inalámbrica y para ello inicialmente necesitamos estar conectados a una red WIFI, colocamos nuestras credenciales y con la función WIFI.begin nos tratamos de conectar, caso contrario el dispositivo se reinicia. 

  • Configuración OTA: Esta es una de las partes más importantes, es en donde se cargara la programación en la flash de nuestro dispositivo, por ello es de suma importancia haberlo configurado antes que nada, por ello se lo realiza en el setup(), para configuraciones básicas no necesitamos modificar esta parte del código, sin embargo, es útil mencionar al lector, que si queremos agregar tareas ante los posibles errores que pueden presentarse, este es el lugar donde debemos realizar dicha configuración.


  • Iniciar servidor OTA: Previamente configurado el OTA, con esta función podemos inicializarlo, esto quiere decir que en este momento el ESP32 será visible para los IDE Arduino que estén conectados a la red.

  • Puntero OTA: Y, por último, pero no menos importante, tenemos el handle. Este puntero se encargará de comprobar si algún dispositivo se trata de conectar al servidor OTA en nuestro ESP32. En caso de ser positivo iniciará con el proceso de programación vía OTA, caso contrario seguirá al a siguiente línea de código.



Ejecución del código ejemplo

  • Luego de haber comprendido las diferentes partes de la configuración, escribimos nuestras credenciales, conectamos nuestra placa a la computadora, seleccionamos nuestra placa ESP32 en el IDE y cargamos el código.


  • Con esto el servidor OTA ya estaría montado y ejecutándose en nuestro ESP32, para verificar eso, podemos desconectar el ESP32 de la computadora y energizarlo por una fuente externa, en mi caso utilizare una batería de litio.


  • Nos dirigimos a Tools -> Port y si todo salió bien podemos observar cómo nos sale un dispositivo en nuestra red, sin necesidad de que esté conectado a la PC.


  • Ahora, si nosotros deseamos cargar un código al dispositivo, solo debemos seleccionarlo, y darle a cargar al nuevo código que queremos subir, para ese ejemplo subiremos el mismo otra vez. Veremos cómo empezará a compilar como siempre y a la hora de subir el código nos saldrá el siguiente mensaje: 

  • Esperamos que finalice y cuando nos salte este mensaje, habremos realizado nuestra primera programación OTA.

  • Ahora muchos se preguntarán y como agrego más partes al código o como configuro otras partes. La respuesta es sencilla, al cargar el código por OTA, lo que se realiza es lo mismo que si fuera por USB con la diferencia que ahora es por WIFI, es decir que todo el código es subido a la placa. Para ver esto haremos un pequeño ejemplo, aprovechando que mi placa tiene un led incorporado, encenderemos ese led de manera inalámbrica:

  • Como vemos en el código lo único que se agrego es que ahora el pin 13 sea una salida y a la vez se encienda. Compilamos y volvemos a subir el código por OTA.


  • Y como podemos observar, ahora nuestro led permaneció encendido, es decir, que podemos realizar más configuraciones sin ningún inconveniente.
  • Otra duda que tal vez muchos lectores tengan es, ¿es necesario mantener la programación OTA en nuestro código?, y la respuesta es depende, si nosotros seguiremos programando por OTA, si tenemos que mantenerla debido que ella es la que nos permite cargar nuevo código a la placa, en caso de que no vayamos a volver a programar por OTA, la respuesta es que no es necesario, para ello le presentamos el siguiente ejemplo:


  • Como podemos observar es el típico blink de un LED, y se cargó sin ningún inconveniente, y podemos observar que se ejecuta la programación en nuestro ESP32.
  • Sin embargo, que sucede si queremos volver a cargarlo ahora en la placa, tendremos el siguiente resultado, un error, porque al ya no tener una configuración de OTA, la placa dejo de tener dicha características y tendremos que volver a conectarlo por USB para cargar un nuevo Código.

Recomendaciones:

  • Para los ejemplos mostrados, el servidor OTA lo inicializábamos desde el setup, es decir, todo el tiempo estará encendido. Este método es el más ineficiente, debido que la ejecución del servidor consume recursos de la placa, al tener un proceso ejecutándose todo el tiempo, por lo que es recomendable activarlo en momentos indicados, por ejemplos presionando un botón, por un RTC entre otras maneras.
  • Tener cuidado con el puntero OTA (ArduinoOTA.handle()), recordemos que el es quien se encarga de estar verificando si algún dispositivo quiere conectarse a la placa por OTA, por lo tanto, si el dispositivo se tarde en ejecutar dicho puntero o no lo ejecuta, aunque tengamos el OTA iniciado, y en el IDE lo detecte, nunca podremos cargar la nueva programación por OTA.

Leer temas relacionados:

Comentarios

Popular Posts

▷ #ESP32 - REAL-TIME CLOCK #RTC INTERNO

▷ Especificaciones del módulo ESP32

▷ #ESP32 - SINCRONIZAR RTC INTERNO CON SERVIDOR NTP

▷ #ESP32 - Display OLED 128x64

▷ DISEÑO DE SISTEMAS DIGITALES, PROYECTOS PROPUESTOS (2019 2do Término)

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2021 PAO1)

▷ PROTEUS PCB DESIGN

▷ Instrumentación con #Microcontroladores y #LabView

▷ Sensor networks for agriculture based on #FPGA