
Se vuoi aggiornare un nodo IoT in modalità OTA (Over the Air), dovresti dimenticare i setup da hobbisti. Un calo di tensione durante la scrittura della memoria flash potrebbe rovinare il tuo ESP32 e costringerti a sostituire fisicamente il chip.
La Partition Table
Modifica il file partitions.csv e flasha il target direttamente con esptool.py.
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, , 0x4000, otadata, data, ota, , 0x2000, phy_init, data, phy, , 0x1000, factory, app, factory, , 1M, ota_0, app, ota_0, , 1M, ota_1, app, ota_1, , 1M,
Analisi dei Blocchi di Memoria
| Partizione | Dimensione | Specifica RAW |
|---|---|---|
| nvs | 16 KB | Non solo SSID in chiaro. Struttura chiave-valore persistente per certificati x509, chiavi private MQTTS e costanti di calibrazione PID (Kp, Ki, Kd) per il tuning ad anello chiuso. |
| otadata | 8 KB | Il core del routing OTA. Contiene le struct esp_ota_select_entry_t. Il bootloader (Stage 1) legge qui l'indice della partizione attiva. Fallisce il checksum CRC32? Rollback hardcoded alla partizione factory. |
| factory | 1 MB | Core intoccabile in silicio. Firmware di fallback di fabbrica. Si avvia solo in caso di disastri critici per ripristinare stack di rete e tunnel di management. |
| ota_0 / ota_1 | 1 MB | Doppio slot per deploy atomici. Il payload viene scaricato e scritto esclusivamente nello slot passivo, dopodiché si aggiorna il puntatore in otadata e si forza il reset. |
Come implementare la OTA
Per gestire l’aggiornamento senza rischi, la logica deve essere deterministica:
il nodo verifica la connessione e interroga il server; se la versione remota è superiore a quella locale, avvia lo streaming del firmware direttamente nello slot di memoria passivo. Non c’è spazio per l’errore: se il download fallisce o il file è corrotto, il sistema interrompe tutto senza intaccare il firmware attivo.
Solo a scrittura completata e validata, il bootloader scambia i puntatori e forza un reset hardware, rendendo il passaggio alla nuova versione immediato e sicuro.
Conclusione
Senza la struttura A/B (Blue-Green) e un ‘fallback factory’ blindato, stai creando un sistema programmato per autodistruggersi al primo glitch di rete o calo di tensione: l’integrità del nodo deve essere garantita a livello hardware e quindi il bootloader deve agire come un ‘giudice’ imparziale. Deve quindi essere capace di scartare un firmware corrotto e di riportare la macchina in uno stato operativo noto (Safe State) senza intervento umano.
Smetti di scrivere codice che ‘spera’ di finire il download. Implementa l’isolamento dei blocchi, segmenta la memoria in modo deterministico e lascia che sia il bootloader a gestire la continuità del servizio. Solo così trasformerai un giocattolo connesso in un vero asset semi professionale.