Abbonati ora!

Aggiorniamo ESPertino con l’OTA

Over the Air, o semplicemente OTA, è una tecnica largamente utilizzata per l’aggiornamento wireless del software di sistema, del software applicativo, o dei parametri di configurazione di un sistema embedded. Vediamo in questo articolo i principi base che permettono di impiegare questa tecnica, oggi diffusissima soprattutto sui dispositivi mobile, per aggiornare il sw applicativo in esecuzione sulla scheda ESPertino.

Introduzione

Nei precedenti articoli riguardanti la scheda di prototipazione rapida ESPertino, abbiamo avuto modo di elogiarne le numerose funzionalità e caratteristiche tecniche di assoluto rilievo. E’ inutile negarlo, la vocazione principale di ESPertino, e il suo naturale terreno di utilizzo, è rappresentato dal mondo dell’Internet of Things (IoT). I dispositivi IoT stanno vivendo una diffusione molto rapida, supportata da investimenti, attività di ricerca, e “use cases” sviluppati da aziende operanti nel settore elettronico, dei servizi, e delle infrastrutture per le telecomunicazioni.

Sappiamo che una prima caratteristica imprescindibile che i dispositivi IoT devono possedere è la connettività, meglio se senza fili, cioè wireless. Il modulo ESP-Wroom-32 di Espressif Systems installato su ESPertino è in linea con questo requisito, dal momento che integra sia un’interfaccia Bluetooth a bassa energia che un’interfaccia WiFi con possibilità di operare nelle modalità Server, Station, e Soft Access Point. In sostanza, ESPertino ha tutte le carte in regola per fornire un ottimo livello di connettività, necessario per supportare la funzionalità OTA che ora andremo a descrivere.

Over the Air (OTA)

Utilizzando schede di prototipazione rapida relativamente semplici, come ad esempio Arduino Uno, siamo abituati a collegarci alla board tramite un connettore USB-seriale, che utilizziamo sia per l’aggiornamento del software applicativo (lo sketch) che per il collegamento al monitor seriale. Durante l’attività di sviluppo questo sistema non crea in genere problemi di sorta: è sicuro, affidabile, e molto economico. Supponiamo ora che il dispositivo su cui abbiamo sviluppato un’applicazione debba essere installato sul campo, ed operare all’interno di un sistema funzionante 24 ore su 24, sette giorni su sette. Stiamo parlando, quindi, di una possibile applicazione industriale, come ad esempio un sistema per il rilevamento del consumo dell’acqua, che esegue il conteggio e la totalizzazione degli impulsi provenienti da un misuratore volumetrico (ad esempio, 1 impulso TTL emesso per ogni cl misurato). Questi dispositivi sono in genere collocati in posti non facilmente accessibili, racchiusi all’interno di contenitori a tenuta stagna, oppure sigillati, e persino piombati per evitare manomissioni. Può essere necessario l’utilizzo di scale, oppure l’esecuzione di apposite procedure per accedere al dispositivo, con costi e rischi per la sicurezza non indifferenti. Poichè nel mondo IoT questi tipi di applicazioni sono molto comuni, è facile immaginare come l’aggiornamento wireless del firmware o del software applicativo, e degli eventuali parametri di configurazione memorizzati sulla memoria non volatile, rappresenti non solo una possibilità, ma spesso una vera e propria necessità a cui non si può rinunciare.

Ecco dunque che entra in gioco l’OTA, ovvero la possibilità di aggiornare l’applicazione in esecuzione sul dispositivo senza virtualmente “mettere le mani” sullo stesso. Utilizzando un link radio (tipicamente WiFi, ma possono essere utilizzati altri protocolli di comunicazione, come ad esempio la rete mobile 3G/4G), il dispositivo viene connesso ad un server sul quale è presente la versione da utilizzarsi per l’aggiornamento. Questa viene trasferita sulla memoria flash del dispositivo, attivata, e messa in esecuzione al riavvio successivo. Oltre all’interfaccia di comunicazione wireless, per supportare l’OTA occorre che il dispositivo disponga di una memoria flash opportunamente organizzata e di capienza sufficientemente elevata. Il modulo ESP-Wroom-32 di ESPertino possiede entrambe queste caratteristiche, pertanto ora andremo ad analizzare come deve essere strutturata e utilizzata la memoria flash del modulo affinchè la funzionalità OTA possa essere efficacemente impiegata.

Partizioni della flash

Il modulo ESP-Wroom-32 utilizza una flash esterna (installata sullo stesso PCB dove è presente il modulo), con dimensione compresa tra 4 e 16 Mb) e interfaccia SPI. Durante la fase di configurazione di un’applicazione, è possibile selezionare la modalità di partizionamento della memoria flash. In particolare, le modalità più utilizzate sono le seguenti:

  1. single factory app, no OTA. Scegliendo questa modalità (in Figura 1 l’ouput del comando di configurazione), il programma applicativo verrà scaricato e memorizzato all’interno della partizione factory, utilizzando la consueta tecnica di programmazione basata sull’utilizzo di un convetitore USB-seriale. Questa modalità non supporta l’OTA, ed è quindi adatta per applicazioni in cui questa funzionalità non è richiesta, oppure non vi è la possibilità di utilizzarla. Il vantaggio è quello di poter disporre di una partizione con dimensioni maggiori, e quindi più spazio a disposizione del programma applicativo;

    Figura 1: partizionamento della flash per utilizzo senza OTA

  2. factory app, two OTA definitions. Questa modalità  (Figura 2) è proprio quella a cui siamo interessati, e che quindi utilizzeremo per la nostra applicazione demo. In questo caso la flash è suddivisa in tre partizioni (aree separate di programma): una partizione factory e due partizioni OTA (OTA_0 e OTA_1).

    Figura 2: partizionamento della flash per supportare l’OTA

La partizione factory contiene il programma iniziale, scaricato nel modo tradizionale, quindi tramite convertitore USB-seriale. Questa applicazione dovrà contenere al suo interno delle istruzioni che permettano di utilizzare la tecnica OTA. Quando si innesca un aggiornamento OTA, la nuova versione (che ora verrà ricevuta in modalità wireless) verrà programmata nella prima partizione OTA libera (la OTA_0), e qundi attivata. Al successivo reset, verrà caricato il programma residente nella partizione OTA_0. Se ora, con OTA_0 running, si innesca un successivo aggiornamento OTA, la nuova versione verrà programmata nella prima partizione OTA libera (la OTA_1), che verrà quindi attivata e andrà in esecuzione dopo il reset. Le due partizioni OTA_0 e OTA_1 vengono quindi utilizzate in modo alternato per memorizzare il programma corrente. I vantaggi di questa soluzione sono essenzialmente due:

  1. se qualcosa dovesse andare storto durante l’aggiornamento, rimarrà attiva la partizione corrente, e quindi non si perderà il controllo del dispositivo, a cui è sufficiente dare un reset ed eventualmente riprovare con l’aggiornamento;
  2. utilizzando due partizioni OTA si bilancia l’utilizzo della flash e si evita quindi di scrivere sempre sulla stessa partizione, lasciando altre aree della memoria completamente inutilizzate.

Quanto detto può essere sintetizzato e riassunto nello schema di Figura 3, da cui si può notare come la partizione factory venga utilizzata per il primo download (via seriale), mentre le due partizioni OTA_0 e OTA_1 per i successivi download (esclusivamente via wireless), alternandosi l’una con l’altra.

Figura 3: schema di utilizzo delle partizioni della flash nella versione OTA

La demo OTA

Per acquisire maggiore dimestichezza con la tecnica OTA e il suo utilizzo sulla scheda ESPertino, vediamo ora di eseguire alcuni test con un programma dimostrativo (una demo, appunto) della funzionalità stessa. Utilizzeremo a questo scopo il programma proposto da Espressif Systems, e contenuto all’interno dell’esp-idf. Ricordiamo che esp-idf (dove idf è l’acronimo di IoT Development Framework) rappresenta il framework di sviluppo ufficiale per il modulo ESP-Wroom-32 e quindi per tutte le board, come ESPertino, che lo supportano.

Il materiale occorrente per questa demo è il seguente:

  • una board ESPertino 32;
  • un convertitore USB-seriale;
  • un PC;
  • un router wireless.

Vediamo ora gli step su cui si articola il setup e l'esecuzione del programma dimostrativo.

Installazione di esp-idf

Il framework di sviluppo ufficiale, disponibile su GitHub a questo indirizzo, è un ambiente di sviluppo multi piattaforma, e può essere installato in ambiente Linux, Windows, oppure Mac OS. All’indirizzo sopra menzionato sono disponibili le istruzioni dettagliate che consentono in pochi passi di avere l’ambiente operativo e funzionante. In questa sede riproponiamo le istruzioni per l’installazione sotto Windows, anche perchè leggermente più complessa di quella sotto Linux.

La toolchain di sviluppo scelta dai realizzatori di esp-idf si basa, come consuetudine al giorno d’oggi, sui tool GNU, in particolare il compilatore C/C++, il cross-compilatore per il microprocessore Xtensa® 32-bit LX6 che equipaggia il modulo, librerie e tool vari di supporto. Poichè nulla di tutto ciò è normalmente presente in Windows, dovremo anzitutto installare un ambiente GNU-compatibile per poter compilare e generare il codice per ESPertino. Di ambienti di questo tipo ne esistono diversi, tuttavia Espressif suggerisce di utilizzare MSYS2, un ambiente self-contained molto completo (include anche Python e Git) e semplice da utilizzare. Il modo più immediato per installarlo è quello di scaricare l’archivio compresso (.zip) preparato da Espressif e disponibile a questo indirizzo. L’archivio va poi decompresso in C:\ (o in un’altra cartella di vostro gradimento), generando così la sottocartella msys32. Eseguendo poi il comando mingw32.exe presente nella cartella msys32 (si può tranquillamente lanciarlo dalla finestra Esplora Risorse di Windows), verrà aperta una bash shell come visibile in Figura 4 (la finestra terminale di MSYS2). Questa finestra, che a tutti gli effetti equivale ad avere disponibile un sistema Linux, rappresenterà la nostra interfaccia per eseguire i comandi nel framework di sviluppo esp-idf.

Figura 4: la finestra terminale di MSYS2

Una volta installata la toolchain, dovremo installare le API e le librerie specifiche per il modulo ESP32, rese disponibili da Espressif su un apposito repository GitHub. Per eseguire l’installazione, è sufficiente impartire i seguenti comandi da una finestra terminale di MSYS2 (git è già incluso nella suite MSYS2):


cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git

A seguito di questi comandi, l’ambiente esp-idf verrà installato in ~/esp/esp-idf.

L’ultima cosa che ci rimane da fare, prima di essere operativi, è quella di configurare il percorso per accedere all’ambiente di sviluppo. Il modo più semplice che ho personalmente sperimentato e verificato è il seguente. Create nella cartella ../msys32/etc/profile.d (sostituite i “..” con il percorso sul vostro computer per accedere alla cartella msys32) un file chiamato export_idf_path.sh con il seguente contenuto:


export IDF_PATH="<inserite il vostro percorso per accedere a esp-idf>/esp-idf"
export PATH="/mingw32/bin:$PATH"

In <vostro percorso esp-idf> dovrete inserire il percorso relativo al vostro computer per accedere alla cartella esp-idf (installando ad esempio MSYS2 in C:\, avrete "C:/msys32/home/esp-idf". Al successivo riavvio della shell (mingw32.exe) avrete i percorsi per l’accesso al compilatore e all’ambiente esp-idf correttamente impostati.

Il workflow della demo

Attraverso questa demo vogliamo dimostrare come un’applicazione in esecuzione sulla scheda ESPertino possa aggiornare sè stessa scaricando via wireless una nuova immagine binaria, e memorizzandola nella memoria flash del modulo. Come detto in precedenza, utilizzeremo il partizionamento della flash in tre immagini: factory, OTA_0, e OTA_1, ciascuna delle quali sarà una partizione auto-consistente. Il workflow, cioè il processo e le operazioni necessarie per condurre la dimostrazione, è visualizzato in Figura 5.

Figura 5: workflow della demo OTA con ESPertino (ESP32)

Il procedimento è descritto qui di seguito.
[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3076 parole ed è riservato agli abbonati MAKER. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e potrai fare il download (PDF) dell'EOS-Book del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

6 Commenti

  1. alby 4 luglio 2018
  2. Stefano Lovati Stefano Lovati 5 luglio 2018
    • alby 6 luglio 2018
      • Stefano Lovati Stefano Lovati 9 luglio 2018
        • alby 9 luglio 2018
          • Stefano Lovati Stefano Lovati 10 luglio 2018

Scrivi un commento

EOS-Academy