ESP32: flash del firmware e filesystem (.bin) con strumenti grafici

Spread the love

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).

ESP32: compiled binary (.hex) with command line and GUI tool
ESP32: compiled binary (.hex) with command line and GUI tool

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)

ESP Tools Install Python and add It to path
ESP Tools Install Python and add It to path

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.

esp32 espressif download tool sketch binary file only
esp32 espressif download tool sketch binary file only

Compilato e filesystem binario

Per saperne di più sul filesystem ESP32, è importante leggere

Faremo un test. Ho preso uno sketch dal tutorial “ESP32: fileSystem integrato SPIFFS“, e ho creato una cartella dati con file1.txtfile2.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

esp32 espressif download tool all binary files with filesystem
esp32 espressif download tool all binary files with a filesystem

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.

esp32 espressif download tool combined binary and filesystem files
esp32 espressif download tool combined binary and filesystem files

Grazie

  1. ESP32: piedinatura, specifiche e configurazione dell’Arduino IDE
  2. ESP32: fileSystem integrato SPIFFS
  3. ESP32: gestire più seriali e logging per il debug
  4. ESP32 risparmio energetico pratico
    1. ESP32 risparmio energetico pratico: gestire WiFi e CPU
    2. ESP32 risparmio energetico pratico: modem e light sleep
    3. ESP32 risparmio energetico pratico: deep sleep e ibernazione
    4. ESP32 risparmio energetico pratico: preservare dati al riavvio, sveglia a tempo e tramite tocco
    5. ESP32 risparmio energetico pratico: sveglia esterna e da ULP
    6. ESP32 risparmio energetico pratico: sveglia da UART e GPIO
  5. ESP32: filesystem integrato LittleFS
  6. ESP32: filesystem integrato FFat (Fat/exFAT)
  7. ESP32-wroom-32
    1. ESP32-wroom-32: flash, piedinatura, specifiche e configurazione dell’Arduino IDE
  8. ESP32-CAM
    1. ESP32-CAM: piedinatura, specifiche e configurazione dell’Arduino IDE
    2. ESP32-CAM: upgrade CamerWebServer con gestione della luce flash
  9. ESP32: ethernet w5500 con chiamate standard (HTTP) e SSL (HTTPS)
  10. ESP32: ethernet enc28j60 con chiamate standard (HTTP) e SSL (HTTPS)
  11. Come usare la scheda SD con l’esp32
  12. esp32 e esp8266: file system FAT su memoria SPI flash esterna
  13. Gestione aggiornamenti firmware e OTA
    1. Gestione del firmware
      1. ESP32: flash del firmware binario compilato (.bin)
      2. ESP32: flash del firmware e filesystem (.bin) con strumenti grafici
    2. Aggiornamento OTA con Arduino IDE
      1. Aggiornamenti OTA su ESP32 con Arduino IDE: filesystem, firmware e password
    3. Aggiornamento OTA con browser web
      1. Aggiornamenti OTA su ESP32 tramite browser web: firmware, filesystem e autenticazione
      2. Aggiornamenti OTA su ESP32 tramite browser web: caricamento in HTTPS (SSL/TLS) con certificato autofirmato
      3. Aggiornamenti OTA su ESP32 tramite browser web: interfaccia web personalizzata
    4. Aggiornamenti automatici OTA da un server HTTP
      1. Aggiornamento automatico Firmware OTA dell’ESP32 dal server
      2. Aggiornamento automatico Firmware OTA dell’ESP32 dal server con controllo della versione
      3. Aggiornamento automatico Firmware OTA dell’ESP32 in HTTPS (SSL/TLS) con certificato autofirmato affidabile
    5. Aggiornamento del firmware non standard
      1. Aggiornamento firmware e filesystem ESP32 dalla scheda SD
      2. Aggiornamento firmware e filesystem ESP32 con client FTP
  14. Integrare LAN8720 con ESP32 per la connettività Ethernet con plain (HTTP) e SSL (HTTPS)
  15. Collegare l’EByte E70 (CC1310) ai dispositivi ESP32 c3/s3 ed un semplice sketch di esempio
  16. ESP32-C3: piedinatura, specifiche e configurazione dell’IDE Arduino
  17. i2c esp32: gestione rete a 5v, 3.3v e interfaccia aggiuntiva
  18. […]

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *