Exécuter des mises à jour OTA à l'aide du microcontrôleur ESP32 et de sa structure ESP-IDF
Avec la contribution de Rédacteurs nord-américains de DigiKey
2021-08-10
Les concepteurs de produits Internet des objets (IoT) doivent continuellement réévaluer leur choix de plateformes et de composants en vue de réduire les coûts et la consommation d'énergie, tout en améliorant les performances et en accélérant la conception des applications de connectivité. Il existe actuellement un grand nombre de solutions, mais les concepteurs sont confrontés au défi d'effectuer des mises à jour sans fil OTA (Over-The-Air), pour maintenir le micrologiciel du dispositif à jour, une fois celui-ci déployé.
La clé est d'étudier les plateformes disponibles pour voir quels sont les outils et le support supplémentaires qu'elles proposent pour prendre en charge les mises à jour OTA. Ce type de prise en charge peut grandement simplifier le processus, mais peut nécessiter une certaine attention en amont.
Cet article traite des principes de base de la technologie OTA et explique pourquoi il s'agit d'une fonctionnalité essentielle que presque tous les systèmes IoT doivent prendre en charge, malgré les défis auxquels les développeurs sont confrontés. Il s'appuie ensuite sur le microcontrôleur Bluetooth et Wi-Fi ESP32 d'Espressif Systems, ainsi que sur les modules, les kits et la structure de développement IoT ESP (ESP-IDF) associés, pour montrer comment créer une partition OTA et utiliser le script otatool.py pour effectuer une mise à jour micrologicielle tandis qu'une application est en cours d'exécution.
Introduction aux mises à jour OTA
La plupart des équipes de développement se concentrent sur l'implémentation des fonctionnalités spécifiques à leur produit, c'est-à-dire la logique commerciale qui différencie leur produit. Cependant, chaque produit IoT possède un ensemble de fonctionnalités de base qui doit être déployé, configuré et maintenu tout au long de la durée de vie du dispositif. Les mises à jour de sécurité sont un bon exemple. Étant donné la nécessité d'effectuer ces mises à jour, une caractéristique importante mais facilement négligée lors de l'évaluation d'une plateforme de développement appropriée est la capacité de mise à jour OTA du micrologiciel (FOTA pour « Firmware OTA », parfois simplement appelé OTA) ou du chargeur d'amorçage.
La fonctionnalité OTA permet aux ingénieurs d'assurer la maintenance et la mise à jour à distance de leurs produits en fonction des exigences techniques et commerciales, sans avoir à envoyer du personnel de maintenance ou à demander au client final d'intervenir sur le dispositif pour le mettre à jour. Au lieu de cela, tous ces coûts peuvent être supprimés en permettant aux dispositifs de mettre à jour leur micrologiciel en arrière-plan, ou pendant les temps d'arrêt opérationnels, par exemple au milieu de la nuit.
Les architectures OTA peuvent prendre de nombreuses formes et configurations différentes, qu'il s'agisse de solutions personnalisées ou d'implémentations standard de fournisseurs de services cloud. Un exemple d'architecture typique est illustré à la Figure 1.
Figure 1 : Vue d'ensemble de l'architecture OTA illustrant un processus d'exemple pour la mise à jour du micrologiciel d'une application sur le terrain pour les dispositifs déployés. (Source de l'image : Beningo Embedded Group)
Dans cet exemple, un équipementier utilise Amazon Web Services (AWS) IoT Core pour télécharger de nouvelles versions micrologicielles, puis utilise les fonctionnalités Job intégrées pour déployer les mises à jour sur les dispositifs sur le terrain. Ce n'est qu'un exemple parmi tant d'autres, et presque tous les fournisseurs de services cloud offrent une solution similaire.
Il existe aujourd'hui de nombreux choix de microcontrôleurs prenant OTA en charge. Un microcontrôleur populaire, tant pour les systèmes à faible coût que pour les fabricants, est l'ESP32. Plusieurs raisons expliquent le succès de l'ESP32, notamment :
- Microcontrôleur intégré avec modules de certification Wi-Fi/Bluetooth disponibles
- Économique
- Environnement de développement open-source et structures logicielles, notamment ESP-IDF et ESP-ADF
- Nombreux exemples d'applications existantes disponibles gratuitement sur le Web
Sélection d'un module ESP32 pour les tests OTA
Il existe plusieurs cartes de développement et modules ESP32 différents que les utilisateurs peuvent acheter pour se familiariser avec les exemples OTA. Prenons l'exemple de la carte Feather ESP32 Huzzah 3405 d'Adafruit (Figure 2). Il s'agit d'une carte de développement à faible coût qui inclut tous les circuits nécessaires pour programmer un ESP32 et l'alimenter via un connecteur USB.
Figure 2 : La carte Feather Huzzah 3405 contient un module Wi-Fi/Bluetooth certifié ESP32-WROOM-32D avec 4 Mo de mémoire Flash. La carte inclut tout le matériel requis pour programmer et communiquer avec le module via USB. (Source de l'image : Adafruit)
Le 3405 intègre un module ESP32-WROOM-32D doté d'une mémoire Flash de 4 Mo, de Wi-Fi et Bluetooth, et d'un ensemble complet de périphériques pour presque toutes les applications.
Une autre carte de développement disponible est la carte audio ESP32-LYRATD-SYNA d'Espressif Systems (Figure 3). Cette carte de développement inclut le module ESP32-WROVER-B.
Figure 3 : La carte ESP32-LYRATD-SYNA est basée sur un module Wi-Fi/Bluetooth certifié ESP32-WROVER-B avec 4 Mo de mémoire Flash. En plus de permettre aux concepteurs de programmer et de communiquer avec le module via USB, elle est également équipée des circuits nécessaires au développement d'applications audio. (Source de l'image : Espressif Systems)
Le module ESP32-LYRATD-SYNA est également doté de 4 Mo de Flash, ainsi que de tous les circuits requis pour les applications audio. La carte inclut un codec audio, un amplificateur audio et des jacks de casque et de haut-parleur pour le test complet d'applications audio.
Une dernière carte de développement pouvant être utilisée pour les tests OTA est la carte de développement ESP32-S2-SAOLA-1RI d'Espressif (Figure 4). Il s'agit de la moins chère des cartes de développement. La carte contient un module ESP32 Wrover ainsi que les circuits permettant de programmer la puce. Elle n'inclut pas de fonctionnalités superflues autres que les broches qui lui permettent d'être facilement placée sur un montage d'essai pour les tests.
Figure 4 : L'ESP32-S2-SAOLA-1RI, basée sur le module Wrover, est une carte de développement de base économique, mais qui inclut suffisamment de circuits pour programmer le module embarqué. (Source de l'image : Espressif Systems)
La carte spécifique sélectionnée pour les tests a peu d'importance car chaque module ESP32 exploite la structure ESP-IDF. Cette structure est destinée à faciliter les activités de développement logiciel pour les développeurs en incluant des pilotes, des intergiciels, un système d'exploitation en temps réel (RTOS), et — ce qui est important pour les besoins de cet article — des chargeurs d'amorçage et des bibliothèques OTA.
Le chargeur d'amorçage permet aux développeurs d'exploiter les mises à jour OTA et de partitionner leur mémoire pour mettre à jour le micrologiciel pendant que l'application principale est en cours d'exécution, ce qui permet de minimiser les temps d'arrêt. La configuration du chargeur d'amorçage peut sembler compliquée au premier abord, mais elle est simple avec les bonnes instructions.
Processus de développement OTA
Le flux de développement OTA pour l'ESP32 varie légèrement en fonction des besoins de l'entreprise et du choix des composants du produit. Par exemple, une équipe utilisant AWS s'appuiera probablement sur les exemples et les guides de démarrage AWS pour développer et faire fonctionner sa solution OTA ESP32. En revanche, une entreprise qui personnalise sa propre solution exploitera probablement la documentation ESP32. Dans cet article, nous examinerons les pièces au niveau de l'ESP32 plutôt que dans le cloud. La raison est que ces éléments sont génériques et s'appliquent à OTA avec l'ESP32, indépendamment du fournisseur cloud choisi ou de la solution utilisée.
En général, le processus de configuration d'une mise à jour OTA sur l'ESP32 implique les étapes suivantes :
- Configurer la table de partition de l'ESP32
- Télécharger le micrologiciel prenant OTA en charge
- Développer un outil pour agir en tant que serveur et transférer le nouveau micrologiciel
- Télécharger le dernier micrologiciel sur l'ESP32
- Passer à la nouvelle application
Il s'agit évidemment de l'approche simplifiée. Les développeurs peuvent consulter à nouveau la Figure 1 pour avoir une vue d'ensemble du processus de mise à jour du micrologiciel. Ce processus pouvant être assez complexe, il est conseillé de s'appuyer sur les exemples OTA ESP32 existants disponibles sur GitHub. Ces exemples fournissent plusieurs exemples critiques, notamment :
- HTTPS OTA
- OTA natif
- OTA simple
- Outil OTA (exemple de scripts python)
La Figure 5 montre les étapes du processus de déploiement et de mise à jour. Un développeur doit d'abord effectuer les étapes en rouge pour déployer la solution OTA sur le module ESP32. Les étapes en orange suivent et sont exécutées pour faciliter une mise à jour OTA.
Figure 5 : Les exemples de mise à jour OTA d'Espressif Systems, disponibles sur GitHub, fournissent aux développeurs plusieurs exemples simples de mises à jour OTA par ESP32. (Source de l'image : Espressif Systems)
Configuration d'une application ESP32 pour OTA
L'ESP32 contient une table de partition qui décrit quel type de données se trouve sur le microcontrôleur et où elles sont stockées. Une table de partition ESP32 standard ressemble par exemple à la Table 1 :
Table 1 : Table de partition ESP32 standard indiquant le type de données et leur emplacement sur le microcontrôleur. (Source de la table : Beningo Embedded)
Il y a l'application d'usine et ensuite une section pour la bibliothèque NVS et les données d'initialisation (init) de la couche physique (PHY). Afin d'utiliser la fonctionnalité OTA, cette table doit être mise à jour de manière à ce que des emplacements de mémoire soient spécifiés pour le micrologiciel de mise à jour OTA, en plus de l'application primaire (usine). Pour OTA, deux partitions sont typiquement allouées pour les mises à jour. Une pour le micrologiciel mis à jour actif, et une pour le micrologiciel en cours de téléchargement et qui deviendra la dernière version. Cela permet de conserver l'intégrité de l'application d'usine. Une table de partition OTA mise à jour peut ressembler à la Table 2.
Table 2 : Table typique de partition OTA mise à jour par l'ESP32. (Source de la table : Beningo Embedded)
Comme illustré, il y a maintenant une section d'application ota_0 et une section d'application ota_1, chacune d'une taille de 1 Mo, en plus d'une section de données (otadata) qui est la RAM allouée pour le processus de mise à jour. Cette table peut être modifiée et mise à jour par le développeur en fonction de l'application.
Pour exécuter l'exemple OTA, il existe des instructions simples qui sont répertoriées sur GitHub dans la section « How to use the examples ». Ce document décrit comment développer et programmer l'application.
Il y a aussi otatool qui peut être utilisé pour mettre à jour le micrologiciel. Ce script est généralement utilisé pour :
- Lire, écrire et effacer les partitions OTA
- Changer les partitions d'amorçage
- Passer à la partition d'usine
Le script d'exemple peut être lancé en exécutant simplement l'exemple dans un terminal à l'aide de la commande :
./otatool_example.sh
Ou en utilisant Python :
python otatool_example.py
Lorsqu'il s'agit de configurer l'ESP32 pour OTA, s'assurer que les partitions sont configurées est une étape critique.
Conseils et astuces d'utilisation
La solution OTA ESP32 peut accélérer et simplifier la solution de mise à jour micrologicielle d'un développeur. Pour éviter que la solution ne devienne un fardeau pour le développement, il convient de garder à l'esprit plusieurs conseils et astuces :
- Si possible, exploitez une structure OTA existante appartenant au fournisseur cloud de l'entreprise. Cela peut considérablement simplifier le développement et l'intégration.
- Utilisez une carte de développement à faible coût pour tester les capacités OTA et les chargeurs d'amorçage. L'ESP32 offre plusieurs options, et il peut être nécessaire d'expérimenter pour déterminer celle qui convient le mieux à l'application concernée.
- Pour des solutions personnalisées, tirez parti des exemples OTA ESP32 sur GitHub.
- Pour les applications dans lesquelles le produit fait office de routeur ou de concentrateur Wi-Fi, envisagez de télécharger l'image du micrologiciel vers une mémoire externe et d'effectuer une mise à jour à partir d'un périphérique de stockage de masse.
- Prenez le temps de lire la documentation de l'ESP32 sur les tables de partition. Cela est un peu différent de l'implémentation typique d'un microcontrôleur.
- Pour des raisons de sécurité, il est préférable de désactiver la restauration des applications. Si l'application peut être restaurée à des versions antérieures, des attaquants pourraient potentiellement pousser une version comportant une vulnérabilité connue et compromettre le système.
Les développeurs qui suivent ces conseils et astuces constateront qu'ils économisent beaucoup de temps et d'efforts lorsqu'ils tentent de tirer parti de l'ESP32 ou de toute autre solution OTA, selon le cas.
Conclusion
Les mises à jour OTA constituent une fonctionnalité critique pour un nombre croissant de systèmes IoT et embarqués. Les développeurs doivent savoir comment procéder efficacement pour gagner du temps en amont pendant le processus de conception et de développement, et après l'expédition du produit.
Le microcontrôleur sans fil ESP32 a trouvé sa place dans un large éventail de dispositifs et, comme illustré, il dispose d'une solution OTA toute prête. En tirant parti de la structure ESP-IDF et des modules et plateformes associés, et en suivant certains conseils et astuces fondés sur l'expérience, les développeurs peuvent considérablement réduire leur temps de conception et mettre en place leur propre solution OTA.

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.