community italiana di domotica personale
 
Backup, flash/restore e cancellazione del firmware di un ESP8266 via esptool

Backup, flash/restore e cancellazione del firmware di un ESP8266 via esptool

SCOPI DELLA GUIDA:
  • Eseguire un backup, un restore e/o una cancellazione del firmware presente su una board basata su SOC ESP8266)
  • Livello di difficoltà: basso
CONCETTI AFFRONTATI:
  • Gestione firmware
Componenti software utilizzate:
Dispositivi fisici utilizzati:
GUIDA maggiormente DEDICATA A utenti:
Tutti gli ambienti
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 2.0

Abstract

ESP8266, come molti sanno, è un piccolo SOC (“System-on-a-chip”) particolarmente apprezzato in domotica personale (e non solo) per la sua grandissima versatilità e tramite il quale è possibile, a fronte di costi davvero irrisori, prototipare in libertà e realizzare davvero piccole meraviglie.

Solitamente ESP32 viene montato su delle board di sviluppo le quai forniscono pinout (collegamenti diretti esterni analogici e digitali) nonché alimentazione e interfacciamento USB; altre volte lo si trova all’interno di dispositivi più complessi, di mercato, come cuore del sistema (o supporto laterale per specifiche funzioni).

NodeMCU ESP8266
un esempio di ESP8266 implementato su una board NodeMCU.

Dato che può rendersi necessario effettuare un backup del firmware (specialmente quello originale di fabbrica) per provvedere magari, in un secondo momento, al ripristino, questa guida illustra l’utilizzo del tool gratuito “esptool” (utilizzabile su Windows, Mac, Linux) a tale scopo.

Si parte

Assunzioni

Si assume che si possegga un adattatore USB/TTL e relativo cavo di connessione USB, nonché dei cavetti di connessione Dupont ed eventualmente contatti pin (opzionali).

Se si utilizza, invece, una board di sviluppo dotata di porta USB, si può omettere l’uso dell’adattatore e collegare il computer d’appoggio direttamente a quella porta.

Installazione esptool

esptool è un tool software gratuito basato su Python espressamente concepito per permettere ai nostri computer di comunicare col boot loader dei chip SOC ESP8266 e ESP32.

Per installarlo sul computer di appoggio scelto per programmare l’ESP8266, seguire questa guida:

esptool

Connessione

Per effettuare backup, restore o cancellazione della flash memoria del componente in questione è necessario collegarvisi tramite l’adattatore USB/TTL (FTDI) alla board (o del modulo in questione).

Un adattatore USB/TTL (FTDI) è un semplice dispositivo che ci permette di mettere in comunicazione il nostro computer e il cuore del modulo basato su ESP8266. L’adattatore, che può variare nella forma e nei colori, di base presenta una porta USB e quattro contatti, i quali vanno messi a contatto con quelli presenti sulla board utilizzando dei cavetti di connessione Dupont.

I contatti VCC e Ground dell’USB/TTL (FTDI) vanno collegati agli stessi punti di contatto della board, mentre TX e RX vanno collegati incrociati (TX con RX e RX con TX).

ATTENZIONE: se l’adattatore presenta una possibilità di scelta tra le tensioni 5v e 3.3v, scegliere sempre 3.3v. Un adattatore che eroghi solo 5v, non è adatto.

Solitamente si usa saldare sulla board dei pin in modo da rendere agevole la connessione verso l’FTDI, ma è sufficiente posizionare dei pin a semplice contatto per ottenere lo stesso risultato – vedi immagine sopra.

ATTENZIONE! NON COLLEGARE CONTEMPORANEAMENTE IL COMPONENTE ALL’ADATTATORE USB/TTL ED EVENTUALMENTE ALLA CORRENTE DI RETE 220V!
RICORDARSI DI SCOLLEGARE LA CORRENTE DI RETE DAL DISPOSITIVO!!!

N.b. In caso la board in questione sia una Sonoff, ci si riferisca anche a queste guide:

Flash mode

Una volta effettuata la connessione è possibile collegare l’adattatore al computer, ma nel fare questo è necessario, contemporaneamente, collegare il pin presente sulla board denominato “GPIO0” al pin “Ground” e, dopo aver effettuato la connessione USB, disconnettere tale “corto” tra i due pin. Questo fa sì che il modulo entri in una modalità detta “flash mode“, la quale dà libero accesso al firmware del modulo.

Per fare questo, ad esempio, su un Sonoff Basic come su altri modelli (TH-16, POW…), è sufficiente (a monte di effettuare la connessione USB) premere il pulsante presente sulla board (per poi rilasciarlo dopo l’avvenuta connessione USB); in altri casi è invece necessario utilizzare un ulteriore cavetto di connessione Dupont (maschio-maschio) per mettere in contatto i due pin specifici. La cosa varia da modello a modello, basta far riferimento alla guida specifica di riprogrammazione del firmware del dispositivo per capire come fare.

Sequenza corretta:

  • attesto i quattro contatti VCC, Ground, TX e RX;
  • premo il pulsante o metto in contatto GPIO0-Ground con un cavetto Dupont (scelta fatta in base al tipo di modulo)
  • collego l’USB;
  • aspetto un secondo, dopodiché rilascio il pulsante o rimuovo il cavetto Dupont.

In questo modo il modulo entrerà in “flash mode”; ciò detto, su inDomus abbiamo dedicato una lista completa di tecniche per impostare la modalità “flash” nei vari modelli Sonoff, così da capire, per il proprio modello, come operare.

Porta COM

Dopo aver effettuato la connessione, recarsi presso il pannello di controllo del proprio computer (in base al proprio sistema operativo) e, presso l’elenco delle USB, capire quale porta si stata assegnata all’USB/TTL.

Su Windows solitamente queste porte sono chiamate “COM1“, “COM2” eccetera, mentre su linu sono chiamate “/dev/ttyUSB0“, “/dev/ttyUSB1” ecc.

NOTA per gli utenti Apple: il sistema operativo macOS potrebbe identificare una porta diversa dalla classica COMx. Per capire come configurare la porta in questa casistica, far riferimento a questo thread. Al di lì di quanto espresso nel link, si ricordi sempre di installare il corretto driver per Mac del proprio adattatore USB/TLL.

BACKUP

Siamo finalmente pronti ad effettuare il backup del modulo, il quale è connesso al computer in “flash mode”, conosco la porta e posso quindi eseguire, da terminale/prompt del comandi, il seguente comando:

esptool.py --port COMx read_flash 0x00000 0x100000 firmware.bin

dove ovviamente COMx è la porta di comunicazione e firmware.bin il nome del file che conterrà il firmware salvato.

Se tutto andrà bene, l’output sarà analogo al seguente:

esptool - backup

Al termine sarà stato creato un file nominato come da comando (nel caso dell’immagine, “test.bin“).

RESTORE (Flash)

Avendo già a disposizione un precedente backup (o comunque di un compilato realizzato ad hoc), il comando di “restore”, ovvero di ripristino, o di flash (da eseguire sempre dopo aver collegato il modulo in “flash mode”), sarà il seguente:

esptool.py --port COMx write_flash -fs 1MB -fm dout 0x0 firmware.bin

dove “firmware.bin” sarà il nome del file di backup precedentemente realizzato.
L’output sarà simile al seguente:

esptool - restore

ERASE

Infine potrebbe essere utile “pulire” la flash memory del modulo. Per effettuare una cancellazione totale, eseguire il seguente comando:

esptool.py --port COMx erase_flash

Il quale produrrà un output di questo tipo:

esptool - erase