Come eseguire aggiornamenti via etere (OTA) utilizzando il microcontroller ESP32 e il corrispettivo ESP-IDF
Contributo di Editori nordamericani di DigiKey
2021-08-10
I progettisti di prodotti per Internet delle cose (IoT) devono continuamente valutare la piattaforma e la selezione dei componenti con l'obiettivo di ridurre i costi e il consumo, migliorando le prestazioni e accelerando la progettazione di applicazioni di connettività. Attualmente sono diverse le soluzioni tra cui scegliere, ma i progettisti si trovano di fronte alla sfida di eseguire aggiornamenti wireless, via etere (OTA) per mantenere il firmware del dispositivo aggiornato, una volta distribuito.
La soluzione è guardare alle piattaforme disponibili per vedere quali abbiano gli strumenti aggiuntivi e il supporto necessari a supportare gli aggiornamenti OTA. Tale supporto può semplificare notevolmente il processo, ma può richiedere qualche attenzione in più.
Questo articolo discute i fondamenti dell'OTA e spiega perché è una funzione critica che quasi ogni sistema IoT deve supportare, nonostante i problemi che impone agli sviluppatori. Utilizza quindi il microcontroller Bluetooth e Wi-Fi ESP32 di Espressif Systems, con i relativi moduli, kit e ESP IoT Development Framework (ESP-IDF), per mostrare come creare una partizione OTA e utilizzare lo script otatool.py per aggiornare il firmware mentre è in esecuzione un'applicazione.
Introduzione agli aggiornamenti OTA
L'obiettivo principale per la maggior parte dei team di sviluppo è implementare caratteristiche specifiche del loro prodotto, cioè la business logic che differenzia il loro prodotto. Tuttavia, ogni prodotto IoT ha un set di funzionalità di base che deve essere distribuito, configurato e mantenuto per tutta la vita del dispositivo. Gli aggiornamenti di sicurezza sono un buon esempio. Vista la necessità di eseguire questi aggiornamenti, una caratteristica importante ma facilmente trascurata quando si valuta una piattaforma di sviluppo adatta è il bootloader o la capacità di aggiornamento del firmware OTA (FOTA) (a volte semplicemente indicato come OTA).
OTA fornisce agli ingegneri la capacità di mantenere e aggiornare i prodotti da remoto in risposta ai requisiti tecnici e di business senza la necessità di personale di manutenzione fisicamente presente presso il dispositivo o senza che il cliente finale debba aggiornare da sé il dispositivo. Questi costi possono essere evitati aggiornando il firmware dei dispositivi in background senza sorveglianza oppure durante le ore di "inattività" operativa, come di notte.
Le architetture OTA possono presentarsi in molte forme e configurazioni diverse, da soluzioni costruite su misura fino a implementazioni standard fornite dal fornitore di servizi cloud. Un tipico esempio di architettura è illustrato nella Figura 1.
Figura 1: Una panoramica dell'architettura OTA che mostra un processo di esempio per l'aggiornamento del firmware dell'applicazione sul campo ai dispositivi distribuiti. (Immagine per gentile concessione di Beningo Embedded Group)
In questo esempio, un OEM utilizza Amazon Web Services (AWS) IoT Core per caricare le nuove versioni del firmware e poi utilizza le funzionalità Job integrate per distribuire gli aggiornamenti ai dispositivi sul campo. Questo è solo uno dei tanti esempi e quasi ogni fornitore di servizi cloud propone una soluzione simile.
Sono molti i microcontroller disponibili oggi che supportano OTA. Un microcontroller diffuso sia per i sistemi a basso costo sia tra i maker è ESP32. ESP32 è così popolare per diversi motivi, tra cui:
- Integra un microcontroller con moduli di certificazione Wi-Fi/Bluetooth disponibili
- Basso costo
- Ambiente di sviluppo open-source e framework software come ESP-IDF e ESP Audio Development Framework (ESP-ADF)
- Molti esempi di applicazioni esistenti disponibili sul web
Selezione di un modulo ESP32 per il test OTA
Sono disponibili vari moduli ESP32 e schede di sviluppo agli utenti che desiderano una spiegazione passo-passo degli esempi OTA. La scheda 3405 ESP32 Huzzah Feather di Adafruit ne è un esempio (Figura 2). Questa scheda di sviluppo a basso costo include tutti i circuiti per programmare un ESP32 e alimentarlo attraverso un connettore USB.
Figura 2: La scheda 3405 Huzzah Feather contiene un modulo Wi-Fi/Bluetooth certificato ESP32 WROOM-32D con 4 MB di flash. La scheda include tutto l'hardware necessario per programmare e comunicare con il modulo tramite USB. (Immagine per gentile concessione di Adafruit)
Il cuore del 3405 è un modulo ESP32-WROOM-32D fornito con 4 MB di flash, Wi-Fi, Bluetooth e un set completo di periferiche per praticamente qualsiasi applicazione.
Un'altra scheda di sviluppo di esempio è la scheda audio ESP32-LYRATD-SYNA di Espressif Systems (Figura 3). Questa scheda di sviluppo include il modulo ESP32-WROVER-B.
Figura 3: La scheda ESP32-LYRATD-SYNA è basata su un modulo Wi-Fi/Bluetooth certificato ESP32 WROVER-B con 4 MB di flash. Oltre a permettere ai progettisti di programmare e comunicare con il modulo tramite USB, offre anche i circuiti necessari per sviluppare applicazioni audio. (Immagine per gentile concessione di Espressif Systems)
Il modulo ESP32-LYRATD-SYNA ha anch'esso 4 MB di flash, così come tutta la circuiteria per le applicazioni audio. La scheda include un codec audio, un amplificatore audio e prese per cuffie e altoparlanti per testare completamente un'applicazione audio.
Un'ultima scheda di sviluppo che può essere usata per i test OTA è la scheda di sviluppo ESP32-S2-SAOLA-1RI di Espressif (Figura 4). Quando si parla di schede di sviluppo, questa è la meno costosa. La scheda contiene un modulo ESP32 Wrover e il circuito per programmare il chip. Non ha fronzoli, a parte i pin che permettono di inserirla facilmente su una basetta sperimentale per i test.
Figura 4: ESP32-S2-SAOLA-1RI, basato sul modulo Wrover, è una scheda di sviluppo nuda a basso costo con un numero sufficiente di circuiti per programmare il modulo su scheda. (Immagine per gentile concessione di Espressif Systems)
La scheda specifica selezionata per il test non ha molta importanza, perché ogni modulo ESP32 sfrutta ESP-IDF. Questo framework è progettato per facilitare le attività di sviluppo del software, dato che include driver, middleware, un RTOS, e – importante ai fini di questo articolo – bootloader e librerie OTA.
Il bootloader permette agli sviluppatori di sfruttare gli aggiornamenti OTA e partizionare la memoria per aggiornare il firmware mentre l'applicazione primaria è in esecuzione, il che aiuta a minimizzare i tempi morti. L'impostazione del bootloader può sembrare complicata all'inizio, ma è semplice se seguita correttamente.
Flusso di lavoro di sviluppo OTA
Il flusso di lavoro di sviluppo OTA per ESP32 varierà leggermente in base alle esigenze aziendali e alla selezione dei componenti del prodotto. Ad esempio, un team che sfrutta AWS probabilmente userà le guide e gli esempi di AWS per far funzionare la soluzione ESP32 OTA. Un'azienda che desidera personalizzare la soluzione, invece, probabilmente sfrutterà la documentazione ESP32. In questo articolo, guarderemo agli elementi a livello di ESP32 e non relativi al cloud. La ragione è che questi elementi sono generici e si applicano a OTA con ESP32, indipendentemente dal fornitore di servizi cloud o dalla soluzione utilizzata.
In generale, il processo per impostare un aggiornamento OTA su ESP32 comporta i seguenti passi:
- Configurare la tabella delle partizioni di ESP32
- Scaricare il firmware che supporta OTA
- Sviluppare uno strumento che funga da server per distribuire il nuovo firmware
- Scaricare la versione più recente del firmware su ESP32
- Passare alla nuova applicazione
Ovviamente, questo approccio è stato semplificato. Gli sviluppatori dovrebbero guardare di nuovo la Figura 1 per una visione d'insieme del processo di aggiornamento del firmware. Questo processo può essere abbastanza complesso, quindi è consigliabile sfruttare gli esempi esistenti di ESP32 OTA reperibili su GitHub. Questi esempi forniscono ad esempio:
- HTTPS OTA
- OTA nativo
- OTA semplice
- Strumento OTA (esempio di script python)
La Figura 5 mostra le fasi del processo di distribuzione e aggiornamento. Uno sviluppatore dovrà prima eseguire i passi in rosso per distribuire la soluzione OTA al modulo ESP32. I passi in arancione sono successivi e sono eseguiti per facilitare un aggiornamento OTA.
Figura 5: Gli esempi di aggiornamento OTA di Espressif Systems su GitHub forniscono agli sviluppatori diversi esempi semplici per eseguire gli aggiornamenti OTA con ESP32. (Immagine per gentile concessione di Espressif Systems)
Configurare un'applicazione ESP32 per OTA
ESP32 contiene una tabella di partizione che descrive il tipo e la posizione dei dati sul microcontroller. Ad esempio, una tabella di partizione standard di ESP32 assomiglia a quanto riportato nella tabella 1:
Tabella 1: Una tabella di partizione standard ESP32 che mostra il tipo e la posizione dei dati sul microcontroller. (Tabella per gentile concessione di Beningo Embedded)
Vi sono l'applicazione di fabbrica e una sezione per la libreria NVS e i dati di inizializzazione (init) dello strato fisico (PHY). Al fine di utilizzare la funzionalità OTA, questa tabella deve essere aggiornata in modo che le posizioni di memoria siano specificate per il firmware di aggiornamento OTA, oltre all'applicazione primaria (di fabbrica). Per OTA, sono tipicamente due le partizioni allocate per gli aggiornamenti. Una per il firmware aggiornato attivo e una per il firmware che si sta scaricando e che diventerà la versione più recente. Questo permette di mantenere intatta l'applicazione di fabbrica. Una tabella di partizione OTA aggiornata è simile alla tabella 2.
Tabella 2: Tipica tabella di partizione OTA aggiornata di ESP32. (Tabella per gentile concessione di Beningo Embedded)
Come mostrato, ora vi è una sezione applicativa ota_0 e una ota_1 della dimensione di 1 MB, oltre a una sezione dati (otadata) allocata dalla RAM per il processo di aggiornamento. Questa tabella può essere modificata e aggiornata dallo sviluppatore in base all'applicazione.
Per eseguire l'esempio OTA, è presente una serie di semplici istruzioni su GitHub, nella sezione relativa a come usare gli esempi. Ciò descrive come creare e programmare l'applicazione.
È anche presente otatool, che può essere usato per aggiornare il firmware. Questo script è solitamente usato per:
- Leggere, scrivere e cancellare le partizioni OTA
- Scambiare le partizioni di avvio
- Passare alla partizione di fabbrica
Lo script di esempio può essere eseguito semplicemente avviando l'esempio in un terminale usando il comando:
./otatool_example.sh
O usando Python:
python otatool_example.py
Quando si tratta di configurare ESP32 per OTA, è importante assicurarsi che le partizioni siano impostate.
Suggerimenti d'uso
La soluzione EPS32 OTA può accelerare e semplificare la soluzione di aggiornamento del firmware per uno sviluppatore. Per evitare che la soluzione diventi un peso per lo sviluppo, è utile sottolineare alcuni suggerimenti da tenere a mente:
- Se possibile, sfruttate un framework OTA esistente incluso dal fornitore di servizi cloud dell'azienda. Questo può semplificare enormemente lo sviluppo e l'integrazione.
- Usate una scheda di sviluppo a basso costo per testare le capacità OTA e i bootloader. ESP32 ha diverse opzioni e potrebbe essere necessario sperimentare un po' per determinare quale sia la migliore per l'applicazione in questione.
- Per soluzioni personalizzate, sfruttate gli esempi ESP32 OTA su GitHub.
- Per le applicazioni in cui il prodotto funge da router o hub Wi-Fi, considerate di scaricare l'immagine del firmware nella memoria esterna e di eseguire un aggiornamento da un dispositivo di memoria di massa.
- Dedicate del tempo a rivedere la documentazione di ESP32 sulle tabelle di partizione. Si tratta di qualcosa di leggermente diverso dalla tipica implementazione di un microcontroller.
- Per ragioni di sicurezza, è meglio disabilitare la funzione di ripristino delle applicazioni. Se l'applicazione può essere ripristinata a una versione precedente, un hacker potrebbe distribuire una versione con una vulnerabilità e compromettere il sistema.
Gli sviluppatori che seguono questi suggerimenti risparmieranno parecchio tempo ed eviteranno grattacapi quando tentano di sfruttare ESP32 o qualsiasi altra soluzione OTA.
Conclusione
Gli aggiornamenti OTA sono una caratteristica critica per un numero crescente di sistemi IoT ed embedded. Gli sviluppatori devono capire come eseguirli in modo efficace per risparmiare tempo durante il processo di progettazione e sviluppo e dopo che il prodotto è stato spedito.
Il microcontroller wireless ESP32 si è fatto strada in una vasta gamma di dispositivi e come mostrato offre una soluzione OTA già pronta. Approfittando dell'ESP-IDF e dei moduli e delle piattaforme associate - e utilizzando alcuni suggerimenti basati sull'esperienza - gli sviluppatori possono ridurre sensibilmente i cicli di sviluppo e creare così una soluzione OTA attiva e funzionante in poco tempo.

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.