ESP32: flash del firmware e filesystem (.bin) con strumenti grafici
L’ESP32 vanta una capacità cruciale che semplifica la condivisione del firmware, ampiamente utilizzata dalla maggior parte dei produttori. Questa capacità comporta la creazione di un file binario precompilato contenente la parte dello sketch (o filesystem).
Puoi compilare e generare codice sorgente per il tuo dispositivo, ma puoi anche generare un file binario per il filesystem.
Espressif offre uno strumento GUI anche per semplificare il processo di caricamento.
Qui alcuni dispositivi esp32 che utilizzo ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S
Strumenti di base
Per prima cosa osserviamo che il componente principale del core ESP32 necessita dell’installazione di python e durante l’installazione ricorda di aggiungerlo alla path base (per Windows)
Il comando utilizza l’esptool dell’IDE Arduino interno, ma è possibile installare solo esptool.py
per Python con un semplice comando
pip install esptool
oppure puoi scaricare da qui la versione compilata, ricordati di aggiungere l’eseguibile alla path.
Flash con l’Espressif download tool
La stessa operazione (dopo aver installato python ed esptool) può essere eseguita con Espressif Download Tool, che puoi scaricare da qui.
Esportare solo il binario dello sketch
Per utilizzare il file binario esportato è necessario ricordare l’indirizzo 0x10000 che identifica l’indirizzo di scrittura del firmware.
Devi collegare il file bin (controlla a sinistra), impostare l’indirizzo corretto e selezionare le specifiche del tuo microcontrollore.
Compilato e filesystem binario
Per saperne di più sul filesystem ESP32, è importante leggere
- ESP32: fileSystem integrato SPIFFS
- ESP32: filesystem integrato LittleFS
- ESP32: filesystem integrato FFat (FAT/exFAT)
Faremo un test. Ho preso uno sketch dal tutorial “ESP32: fileSystem integrato SPIFFS“, e ho creato una cartella dati con file1.txt
e file2.txt
.
/*
* ESP32
* SPIFFS get info, read dir and show all file uploaded
* add a data folder to use with ESP32 Sketch data uploader
* by Mischianti Renzo <https://mischianti.org>
*
* https://mischianti.org
*
*/
#include "Arduino.h"
#include "SPIFFS.h"
void printDirectory(File dir, int numTabs = 3);
void setup()
{
Serial.begin(115200);
delay(500);
Serial.println(F("Inizializing FS..."));
if (SPIFFS.begin()){
Serial.println(F("done."));
}else{
Serial.println(F("fail."));
}
// To format all space in SPIFFS
// SPIFFS.format()
// Get all information of your SPIFFS
unsigned int totalBytes = SPIFFS.totalBytes();
unsigned int usedBytes = SPIFFS.usedBytes();
Serial.println("File sistem info.");
Serial.print("Total space: ");
Serial.print(totalBytes);
Serial.println("byte");
Serial.print("Total space used: ");
Serial.print(usedBytes);
Serial.println("byte");
Serial.println();
// Open dir folder
File dir = SPIFFS.open("/");
// Cycle all the content
printDirectory(dir);
}
void loop()
{
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
Questo sketch ottiene l’elenco dei file e alcune informazioni sullo SPIFFS; ecco il comando upload dalla console.
C:\Users\renzo\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\3.0.0/esptool.exe --chip esp32 --port COM26 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 C:\Users\renzo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/partitions/boot_app0.bin 0x1000 C:\Users\renzo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/bin/bootloader_qio_80m.bin 0x10000 C:\Users\renzo\AppData\Local\Temp\arduino_build_303630/read_dir_spiffs.ino.bin 0x8000 C:\Users\renzo\AppData\Local\Temp\arduino_build_303630/read_dir_spiffs.ino.partitions.bin
e del caricamento dello SPIFFS,
[SPIFFS] data : D:\tmp\testSPIFFS\read_dir_spiffs\data
[SPIFFS] offset : 0
[SPIFFS] start : 1376256
[SPIFFS] size : 704
[SPIFFS] page : 256
[SPIFFS] block : 4096
->/file1.txt
->/file2.txt
[SPIFFS] upload : C:\Users\renzo\AppData\Local\Temp\arduino_build_303630/read_dir_spiffs.spiffs.bin
[SPIFFS] address: 1376256
[SPIFFS] port : COM26
[SPIFFS] speed : 921600
[SPIFFS] mode : dio
[SPIFFS] freq : 80m
Prestare attenzione all’indirizzo 1376256 in HEX è 0x150000
l’uscita seriale è ora
Inizializing FS...
done.
File sistem info.
Total space: 655361byte
Total space used: 1004byte
/file1.txt 5
/file2.txt 5
Ora cambiamo un po’ lo sketch:
Serial.println(F("Inizializing FS 2..."));
e aggiungo file3.txt
a spiffs, disconnetto il dispositivo e rigenerato tutto.
Fai attenzione LittleFS e SPIFFS hanno la stessa tabella delle partizioni, FFat no.
Ora carica con Espressif Download Tool
Possiamo verificare che lo schizzo sia aggiornato.
Combinare tutti i binari in un unico file
Ora combineremo tutti i file. Questo genera un taget.bin
file, cancella il firmware del microcontrollore con lo strumento e caricheremo il file combinato.
Fai attenzione che l’indirizzo iniziale per il file combinato è 0x0.
Grazie
- ESP32: piedinatura, specifiche e configurazione dell’Arduino IDE
- ESP32: fileSystem integrato SPIFFS
- ESP32: gestire più seriali e logging per il debug
- ESP32 risparmio energetico pratico
- ESP32 risparmio energetico pratico: gestire WiFi e CPU
- ESP32 risparmio energetico pratico: modem e light sleep
- ESP32 risparmio energetico pratico: deep sleep e ibernazione
- ESP32 risparmio energetico pratico: preservare dati al riavvio, sveglia a tempo e tramite tocco
- ESP32 risparmio energetico pratico: sveglia esterna e da ULP
- ESP32 risparmio energetico pratico: sveglia da UART e GPIO
- ESP32: filesystem integrato LittleFS
- ESP32: filesystem integrato FFat (Fat/exFAT)
- ESP32-wroom-32
- ESP32-CAM
- ESP32: ethernet w5500 con chiamate standard (HTTP) e SSL (HTTPS)
- ESP32: ethernet enc28j60 con chiamate standard (HTTP) e SSL (HTTPS)
- Come usare la scheda SD con l’esp32
- esp32 e esp8266: file system FAT su memoria SPI flash esterna
- Gestione aggiornamenti firmware e OTA
- Gestione del firmware
- Aggiornamento OTA con Arduino IDE
- Aggiornamento OTA con browser web
- Aggiornamenti automatici OTA da un server HTTP
- Aggiornamento del firmware non standard
- Integrare LAN8720 con ESP32 per la connettività Ethernet con plain (HTTP) e SSL (HTTPS)
- Collegare l’EByte E70 (CC1310) ai dispositivi ESP32 c3/s3 ed un semplice sketch di esempio
- ESP32-C3: piedinatura, specifiche e configurazione dell’IDE Arduino
- Integrazione del modulo W5500 su ESP32 con Core 3: supporto nativo ai protocolli Ethernet con SSL e altre funzionalità
- Integrazione del modulo LAN8720 su ESP32 con Core 3: supporto nativo del protocollo Ethernet con SSL e altre funzionalità.