ESP32 (36) – OTA con Freshen

luca 29/09/2018 0

In uno dei primi articoli di questo tutorial, vi ho parlato del bootloader e della struttura della memoria flash. Nell’articolo scrivevo:

In questo modo è possibile implementare un meccanismo di aggiornamento over-the-air (OTA): si invia la nuova versione dell’applicazione al chip esp32 mentre è in funzione; tale versione viene memorizzata in una nuova partizione

Esistono diversi modi per implementare le funzionalità di aggiornamento OTA per la propria applicazione… oggi vi voglio mostrare come effettuarlo in maniera molto semplice, grazie ad un servizio cloud chiamato Freshen.

Freshen

Freshen è un IoT backend, ovvero uno strumento in cloud (disponibile su Internet) per la gestione di dispositivi IoT.

Dopo aver collegato i propri dispositivi a Freshen (vedremo nel proseguo dell’articolo come fare), è possibile:

  • visualizzare la lista dei dispositivi e il loro stato
  • inviare comandi ad ogni dispositivo
  • gestire i files memorizzati su ogni dispositivo
  • aggiornare il firmware over-the-air (OTA)

Freshen è sviluppato da Cesanta, la compagnia produttrice anche di Mongoose e MongooseOS, molto utilizzati in ambito embedded e compatibili con il chip esp32. Il servizio offre diverse tariffe, inclusa una gratuita:

freshen-001s

Per poter utilizzare Freshen è necessario per prima cosa registrarsi, utilizzando il proprio account Github o Google:

freshen-002

Libreria client

Cesanta mette a disposizione una libreria client che possiamo utilizzare per collegare il nostro progetto IoT basato sul chip esp32 alla dashboard di Freshen. La libreria è racchiusa in un solo file header (freshen.h), scaricabile dal sito ufficiale.

La libreria è pienamente compatibile con il framework esp-idf e mette a disposizione tutte le funzionalità del portale:

freshen-003

Il suo utilizzo è molto semplice. Per prima cosa copiamo il file freshen.h nella cartella main del nostro progetto:

freshen-009

Includiamo quindi il file nel nostro programma:

#include "freshen.h"

Per consentire alla libreria di comunicare con la piattaforma Freshen nel cloud, dobbiamo richiamare periodicamente nel nostro programma la funzione freshen_loop().

Possiamo farlo utilizzando un task apposito:

void freshen_task(void *pvParameter) {
  while(1) {	
    freshen_loop(FIRMWARE_VERSION, ACCESS_TOKEN);
    vTaskDelay(2000 / portTICK_RATE_MS);
  }
}

Il task esegue la funzione ogni 2 secondi. Creiamo il task all’interno di app_main() con:

// start the freshen update task
xTaskCreate(&freshen_task, "freshen_task", 10000, NULL, 5, NULL);

Il metodo freshen_loop() richiede due parametri: la versione del firmware (una stringa a nostra scelta, ad esempio “v1.0″) e l’access token, un codice che ci viene fornito dalla piattaforma dopo aver registrato il dispositivo.

Colleghiamoci quindi alla dashboard e clicchiamo Add new device:

freshen-010

Apparirà un nuovo dispositivo (My Device #n). Possiamo cliccare sul nome per visualizzarne i dettagli.

L’access token del dispositivo è oscurato… è possibile cliccare su click to copy per memorizzarlo nella clipboard del nostro computer e quindi incollarlo nel programma:

freshen-011

La pagina che visualizza i dettagli del dispositivo consente anche di cambiare il suo nome.

Se eseguiamo il nostro semplice programma (lo trovate nel mio repository Github), vedremo – dopo qualche secondo – cambiare lo stato del dispositivo in online, ad indicare che sta correttamente comunicando con la dashboard:

freshen-012

Nella pagina di dettaglio, vedremo ora quali metodi è possibile eseguire da remoto:

freshen-013

Ad esempio se invochiamo il metodo Sys.GetInfo vedremo apparire le informazioni su versione, architettura, data di compilazione:

freshen-014

OTA

Per poter effettuare l’aggiornamento da remoto del nostro dispositivo, dobbiamo ricordarci di utilizzare un layout di partizioni adeguato. Ad esempio possiamo scegliere uno dei layout già forniti con il framework:

freshen-006

Proviamo a modificare la versione del nostro firmware, portandola a “1.1”:

freshen-015

quindi compiliamo il programma ma non diamo il comando di flash. Prendiamo nota del percorso dove è memorizzato il firmware compilato:

freshen-016

Selezioniamo nella dashboard il nostro dispositivo e clicchiamo su OTA update selected:

freshen-017

 

Scegliamo il file .bin che contiene il nuovo firmware.

Dopo qualche istante, vedremo il dispositivo andare per alcuni secondi offline, quindi tornare online. Se il processo di update si è concluso con successo, invocando nuovamente il metodo Sys.GetInfo vedremo la nuova versione:

freshen-018

 

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi