Cómo realizar actualizaciones por aire (OTA) utilizando el microcontrolador ESP32 y su ESP-IDF
Colaboración de Editores de DigiKey de América del Norte
2021-08-10
Los diseñadores de productos del Internet de las Cosas (IoT) deben evaluar continuamente la selección de plataformas y componentes con vistas a reducir el costo y la potencia, al tiempo que mejoran el rendimiento y aceleran el diseño de las aplicaciones de conectividad. En la actualidad hay bastantes soluciones entre las que elegir, pero los diseñadores se enfrentan al reto de realizar actualizaciones inalámbricas por aire (OTA) para mantener el firmware del dispositivo al día, una vez desplegado.
La clave está en mirar las plataformas disponibles para ver qué herramientas adicionales y apoyo vienen para apoyar las actualizaciones OTA. Este tipo de apoyo puede simplificar mucho el proceso, pero puede necesitar cierta atención por adelantado.
En este artículo se analizan los fundamentos de la OTA y por qué es una función crítica que casi todos los sistemas de IoT deben soportar, a pesar de los desafíos que enfrentan los desarrolladores. A continuación, utiliza el microcontrolador ESP32 con Bluetooth y Wi-Fi de EspressifSystems, con los módulos asociados, los kits y el marco de desarrollo del IoT ESP (ESP-IDF), para mostrar cómo crear una partición OTA y utilizar el script otatool.py para realizar una actualización del firmware mientras una aplicación sigue en marcha.
Introducción a las actualizaciones OTA
El objetivo principal de la mayoría de los equipos de desarrollo es implementar las características específicas de su producto, es decir, la lógica empresarial que lo diferencia. Sin embargo, todos los productos del IoT tienen un conjunto de características básicas que deben ser desplegadas, configuradas y mantenidas a lo largo de la vida útil del dispositivo. Las actualizaciones de seguridad son un buen ejemplo. Dada la necesidad de llevar a cabo estas actualizaciones, una característica importante, pero que fácilmente se pasa por alto a la hora de evaluar una plataforma de desarrollo adecuada es la capacidad de actualización del cargador de arranque o del firmware OTA (a veces simplemente denominado OTA).
La OTA ofrece a los ingenieros la posibilidad de mantener y actualizar a distancia sus productos en respuesta a los requisitos técnicos y empresariales sin necesidad de enviar personal de mantenimiento al dispositivo o de que el cliente final haga algo activamente con el dispositivo para actualizarlo. En cambio, todos esos costes pueden eliminarse haciendo que los dispositivos actualicen silenciosamente su firmware en segundo plano, o durante las horas de "inactividad" operativa, como la mitad de la noche.
Las arquitecturas de la OTA pueden adoptar muchas formas y configuraciones diferentes, desde soluciones personalizadas hasta implementaciones estándar suministradas por el proveedor de la nube. En la figura 1 se puede ver un ejemplo típico de arquitectura.
Figura 1: Visión general de la arquitectura OTA que muestra un proceso de ejemplo para actualizar el firmware de la aplicación sobre el terreno en los dispositivos desplegados. (Fuente de la imagen: Beningo Embedded Group)
En este ejemplo, un fabricante de equipos originales utiliza Amazon Web Services (AWS) IoT Core para cargar nuevas versiones de firmware y, a continuación, utiliza las funciones de trabajo integradas para desplegar las actualizaciones en los dispositivos sobre el terreno. Este es sólo uno de los muchos ejemplos, y casi todos los proveedores de la nube tienen una solución similar.
Hay muchas opciones de microcontroladores disponibles hoy en día que soportan OTA. Un microcontrolador muy popular tanto para sistemas de bajo coste como entre los fabricantes es el ESP32. Hay varias razones por las que el ESP32 ha sido tan popular, entre ellas:
- Tiene un microcontrolador integrado con módulos de certificación Wi-Fi/Bluetooth disponibles
- Bajo costo
- Entorno de desarrollo de código abierto y marcos de software como ESP-IDF y ESP Audio Development Framework (ESP-ADF)
- Numerosos ejemplos de aplicaciones existentes disponibles gratuitamente en la web
Selección de un módulo ESP32 para pruebas OTA
Hay varios módulos ESP32 y placas de desarrollo disponibles que los usuarios pueden comprar para recorrer los ejemplos de OTA. Por ejemplo, la placa Adafruit 3405 ESP32 Huzzah Feather (Figura 2). Se trata de una placa de desarrollo de bajo costo que incluye toda la circuitería para programar un ESP32 y alimentarlo a través de un conector USB.
Figura 2: La placa 3405 Huzzah Feather Board contiene un módulo Wi-Fi/Bluetooth certificado ESP32 WROOM-32D con 4 Mbytes de flash. La placa incluye todo el hardware necesario para programar y comunicarse con el módulo a través de USB. (Fuente de la imagen: Adafruit)
El núcleo del 3405 es un módulo ESP32-WROOM-32D que viene con 4 Mbytes de flash, Wi-Fi, Bluetooth y un completo conjunto de periféricos para casi cualquier aplicación.
Otra placa de desarrollo que se puede utilizar es la placa de audio ESP32-LYRATD-SYNA de Espressif Systems (Figura 3). Esta placa de desarrollo incluye el módulo ESP32-WROVER-B.
Figura 3: La placa ESP32-LYRATD-SYNA se basa en un módulo Wi-Fi/Bluetooth certificado ESP32 WROVER-B con 4 Mbytes de flash. Además de permitir a los diseñadores programar y comunicarse con el módulo a través de USB, también cuenta con los circuitos necesarios para desarrollar aplicaciones de audio. (Fuente de la imagen: Espressif Systems)
El módulo ESP32-LYRATD-SYNA también tiene 4 Mbytes de flash, así como toda la circuitería para aplicaciones de audio. La placa incluye un códec de audio, un amplificador de audio y conectores de auriculares y altavoces para probar completamente una aplicación de audio.
Una última placa de desarrollo que se puede utilizar para las pruebas OTA es la placa de desarrollo Espressif ESP32-S2-SAOLA-1RI (Figura 4). Cuando se trata de placas de desarrollo, ésta es la más barata. La placa contiene un módulo ESP32 Wrover junto con los circuitos para programar el chip. No hay más adornos que el hecho de que contiene pines que permiten ponerlo fácilmente en una protoboard para probarlo.
Figura 4: El ESP32-S2-SAOLA-1RI, basado en el módulo Wrover, es una placa de desarrollo de bajo costo que incluye suficientes circuitos para programar el módulo de a bordo. (Fuente de la imagen: Espressif Systems)
La placa específica seleccionada para las pruebas no importa demasiado porque cada módulo ESP32 aprovecha el ESP-IDF. Este marco está diseñado para facilitar las actividades de desarrollo de software para los desarrolladores mediante la inclusión de controladores, middleware, un RTOS y, lo que es importante para los fines de este artículo, cargadores de arranque y bibliotecas OTA.
El cargador de arranque permite a los desarrolladores aprovechar las actualizaciones OTA y particionar su memoria para actualizar el firmware mientras la aplicación principal sigue funcionando, lo que ayuda a minimizar el tiempo de inactividad. La configuración del cargador de arranque puede parecer complicada al principio, pero es sencilla si se guía correctamente.
El flujo de trabajo de desarrollo de la OTA
El flujo de trabajo de desarrollo de la OTA para el ESP32 va a variar ligeramente en función de las necesidades del negocio y la selección de componentes del producto. Por ejemplo, un equipo que aprovecha AWS probablemente utilizará las guías de inicio y los ejemplos de AWS para hacer funcionar su solución ESP32 OTA. Por otro lado, una empresa que está personalizando su propia solución probablemente aprovechará la documentación del ESP32. En este artículo, vamos a ver las piezas a nivel de ESP32 y no en la nube. La razón es que estas piezas son genéricas y se aplican a la OTA con el ESP32, independientemente del proveedor de la nube o de la solución que se utilice.
En general, el proceso para configurar una actualización OTA en el ESP32 implica los siguientes pasos:
- Configurar la tabla de particiones del ESP32
- Descargar el firmware que soporta OTA
- Desarrollar una herramienta que actúe como servidor y empuje el nuevo firmware
- Descargue el último firmware en el ESP32
- Cambiar a la nueva aplicación
Obviamente, este es el enfoque simplificado. Los desarrolladores deberían volver a mirar la Figura 1 para ver el proceso general de actualización del firmware. Este proceso puede ser bastante complicado, por lo que es aconsejable aprovechar los ejemplos existentes de ESP32 OTA ubicados en GitHub. Estos ejemplos proporcionan varios ejemplos críticos como:
- HTTPS OTA
- OTA nativa
- OTA simple
- Herramienta OTA (ejemplo de scripts python)
La figura 5 muestra los pasos del proceso de despliegue y actualización. Un desarrollador tendrá que realizar los pasos en rojo primero para desplegar la solución OTA al módulo ESP32. Los pasos en naranja son los siguientes y se ejecutan para facilitar una actualización OTA.
Figura 5: Los ejemplos de actualización OTA de Espressif Systems ubicados en GitHub proporcionan a los desarrolladores varios ejemplos sencillos para conseguir que su ESP32 realice actualizaciones OTA. (Fuente de la imagen: Espressif Systems)
Configurar una aplicación ESP32 para OTA
El ESP32 contiene una tabla de particiones que describe qué tipo de datos se encuentran en el microcontrolador y dónde viven. Por ejemplo, una tabla de partición estándar de ESP32 se parece a la Tabla 1:
Tabla 1: Una tabla de particiones estándar de ESP32 que muestra el tipo de datos y su ubicación en el microcontrolador. (Fuente de la tabla: Beningo Embedded)
Está la aplicación de fábrica y luego una sección para la biblioteca NVS y los datos de inicialización (init) de la capa física (PHY). Para utilizar la funcionalidad OTA, es necesario actualizar esta tabla para que haya ubicaciones de memoria especificadas para el firmware de actualización OTA, además de la aplicación primaria (de fábrica). En el caso de la OTA, suele haber dos particiones asignadas a las actualizaciones. Una para el firmware actualizado activo, y otra para el firmware que se está descargando y que se convertirá en la última versión. Esto permite que la aplicación de fábrica permanezca intacta. Una tabla de particiones de la OTA actualizada se parecería a la Tabla 2.
Tabla 2: Tabla de particiones OTA típica de ESP32 actualizada. (Fuente de la tabla: Beningo Embedded)
Como se muestra, ahora hay una sección de aplicación ota_0 y una ota_1 que tiene un tamaño de 1 Mbyte, además de una sección de datos (otadata) que es RAM asignada para el proceso de actualización. Esta tabla puede ser modificada y actualizada por el desarrollador para adaptarla a la aplicación.
Para ejecutar el ejemplo de la OTA, hay una serie de instrucciones sencillas que aparecen en GitHub en la sección "Cómo usar los ejemplos". Aquí se describe cómo construir y programar la aplicación.
También existe la herramienta otatool que se puede utilizar para actualizar el firmware. Este script se utiliza normalmente para:
- Leer, escribir y borrar las particiones OTA
- Cambiar las particiones de arranque
- Cambiar a la partición de fábrica
El script de ejemplo puede ser ejecutado simplemente ejecutando el ejemplo en un terminal utilizando el comando
./otatool_example.sh
O usando Python:
python otatool_example.py
A la hora de configurar el ESP32 para OTA, asegurarse de que las particiones están configuradas es un paso crítico.
Consejos y trucos para utilizar
La solución EPS32 OTA puede acelerar y simplificar la solución de actualización de firmware de un desarrollador. Para evitar que la solución se convierta en una carga de desarrollo, hay varios "consejos y trucos" que deben tenerse en cuenta:
- Si es posible, aproveche un marco OTA existente incluido con el proveedor de la nube de la empresa. Esto puede simplificar enormemente el desarrollo y la integración.
- Utiliza una placa de desarrollo de bajo coste para probar las capacidades OTA y los cargadores de arranque. El ESP32 tiene varias opciones, y puede ser necesario experimentar para determinar cuál es la mejor para la aplicación en cuestión.
- Para soluciones personalizadas, aprovecha los ejemplos de ESP32 OTA en GitHub.
- Para las aplicaciones en las que el producto actúa como router o concentrador Wi-Fi, considere la posibilidad de descargar la imagen del firmware a la memoria externa y realizar una actualización desde un dispositivo de almacenamiento masivo.
- Dedica algún tiempo a revisar la documentación del ESP32 sobre las tablas de partición. Esto es un poco diferente de la típica implementación del microcontrolador.
- Por razones de seguridad, es mejor desactivar la reversión de la aplicación. Si la aplicación puede retroceder a versiones anteriores, los posibles atacantes podrían introducir una versión con un exploit conocido y comprometer el sistema.
Los desarrolladores que sigan estos "consejos y trucos" descubrirán que se ahorran bastante tiempo y disgustos cuando intenten aprovechar el ESP32, o cualquier otra solución OTA, según el caso.
Conclusión:
Las actualizaciones OTA son una característica crítica para un número cada vez mayor de sistemas IoT e integrados. Los desarrolladores deben saber cómo hacerlo de forma eficaz para ahorrar tiempo durante el proceso de diseño y desarrollo, y después de que el producto haya sido enviado.
El microcontrolador inalámbrico ESP32 se ha abierto camino en una amplia gama de dispositivos, y como se ha mostrado tiene una solución OTA lista. Al aprovechar el ESP-IDF y los módulos y plataformas asociados, y utilizando algunos consejos y trucos basados en la experiencia, los desarrolladores pueden aligerar drásticamente su tiempo de diseño y poner en marcha su propia solución OTA.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




