ESP32 (37) – OTA via https

luca 27/10/2018 0

Nel precedente articolo di questo tutorial, vi ho mostrato come sia possibile effettuare un aggiornamento Over-The-Air grazie alle funzionalità della dashboard Freshen.

Oggi vi spiegherò come aggiornare il firmware in esecuzione sul chip esp32 utilizzando solo il framework esp-idf, senza la necessità di dashboard esterne.

OTA API

Il framework esp-idf mette a disposizione una serie di funzioni native per implementare, in un nostro programma, la capacità di aggiornarsi over the air.

Tali funzioni si trovano nel componente app_update e per utilizzarle dobbiamo includere il relativo header file:

#include "esp_ota_ops.h"

Sebbene non sia complesso l’utilizzo di queste funzioni native (su Github potete trovare un programma di esempio), gli sviluppatori di Espressif hanno aggiunto al framework un componente che rende ancora più facile l’aggiornamento over the air, nel caso in cui il nuovo firmware si trovi su un sito web.

Tale componente si chiama esp_https_ota.

esp_https_ota

Il componente esp_https_ota utilizza le OTA API per aggiornare il firmware, scaricando la nuova versione da un sito web. Come il nome suggerisce, l’unico requisito (per questioni di sicurezza) è che tale sito web sia disponibile con protocollo sicuro (HTTPS).

Il componente è in grado di identificare automaticamente la partizione OTA non in uso nella memoria flash e di caricare in tale partizione il nuovo firmware; configurando infine il chip per effettuare il boot da tale partizione:

https_ota_001

Il suo utilizzo è davvero semplice. Per prima cosa creiamo una struct di tipo esp_http_client_config_t dove configurare l’URL del file che contiene il nuovo firmware e il certificato SSL del server (o della CA che lo ha firmato):

esp_http_client_config_t ota_client_config = {
  .url = "https://mysite.com/newfirmware.bin",
  .cert_pem = server_cert_pem_start,
};

Il certificato deve essere fornito in formato PEM. Per caricarlo all’interno del nostro programma, possiamo utilizzare le funzionalità di embedding binary files del framework come vi ho già spiegato in un precedente tutorial.

Ora è sufficiente il comando:

esp_err_t ret = esp_https_ota(&ota_client_config);

Per avviare il processo di aggiornamento. Se al termine la variabile ret contiene un esito positivo (ESP_OK), possiamo riavviare il chip in modo che il nuovo firmware sia eseguito:

esp_restart();

In una applicazione reale, abbiamo però la necessità di controllare periodicamente se sia disponibile un nuovo firmware e, solo in tal caso, procedere con l’aggiornamento. Come possiamo fare?

Nel programma che ho preparato per questo articolo e che illustro nel video seguente, vi mostro una modalità molto utilizzata anche in progetti commerciali… buona visione ;)

come al solito, il sorgente del programma è disponibile nel mio repository Github e il video contiene sottotitoli in italiano

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