ESP32: fileSystem integrato SPIFFS – Parte 2

Spread the love

ESP32 SPIFFS FileSystem integrato
ESP32 SPIFFS FileSystem integrato

Continuiamo ad esplorare il l’esp32 di espressif, un potente microcontrollore.

Lo puoi trovare qui 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

SPI Flash File System (SPIFFS)

File system flash per interfaccia periferica seriale, o SPIFFS in breve. È un file system leggero per i microcontrollori con un chip flash SPI. Il chip flash integrato nell’ESP8266 offre molto spazio per i file. 
Il WeMos D1 mini ha 4 Mb di flash e ne puoi utilizzare fino a 3 per i tuoi files. 
Lo SPIFFS ti consente di accedere alla memoria flash come se fosse un normale file system come quello sul tuo computer (ma ovviamente molto più semplice): puoi leggere e scrivere file, creare cartelle ecc.

In questa memoria flash l’ESP memorizza il programma. Insieme al programma è possibile memorizzare i nostri file. Il limite di questa memoria è che ha solo 10000 (diecimila) cicli di scrittura.

Diagramma a blocchi unità funzionali Espressif esp32 Wi-Fi Bluetooth Microcontroller
Diagramma a blocchi unità funzionali Espressif esp32 Wi-Fi Bluetooth Microcontroller

Aggiungere file dall’IDE Arduino su SPIFFS

Questa operazione senza estensione per l’IDE di Arduino non è così semplice, ma qui andremo a vedere il modo più semplice.

Innanzitutto devi scaricare il plugin per l’Arduino IDE qui.

Quindi devi trovare la tua cartella dei Shetckbook, se non sai dove è dislocata puoi andare su File --> Preferences, in quella schermata puoi trovare nella parte superiore della finestra lo Sketchbook location.

Arduino IDE esp32 url aggiuntiva per il gestore schede
Arduino IDE esp32 url aggiuntiva per il gestore schede

Ora devi creare (se non esiste) la cartella tools\ESP32FS\tool e aggiungere lì il file esp32fs.jar.

Arduino IDE esp32 SPIFFS Sketch Data Upload cartella del jar
Arduino IDE esp32 SPIFFS Sketch Data Upload cartella del jar

Ora riavvia l’IDE e nel menu Tools  troverai una nuova riga ESP32 Sketch Data Upload.

Arduino IDE esp32 SPIFFS Sketch Data Upload
Arduino IDE esp32 SPIFFS Sketch Data Upload

Sull’Arduino IDE fai Ctrl+Kper aprire un Esplora risorse nella directory dello sketch. 
Crea una directory denominata datadove andrai ad inserire i dati che desideri caricare.

Sketch to upload data on SPIFFS on esp8266: directory structure

Imposta la dimensione dello SPIFFS Tools --> Flash size e imposta la dimensione del filesystem.

Carica il tuo sketch e fai clic su ESP32 Sketch Data Upload.

Ora vai allo sketch di esempio per verificare se tutto è OK.

Comandi

Ci sono alcuni comandi standard che puoi usare con questo filesystem

SPIFFS.begin ()
Questo metodo monta il file system SPIFFS e deve essere chiamato prima di utilizzare qualsiasi altra API FS. Restituisce vero se il file system è stato montato correttamente, altrimenti falso.

SPIFFS.format ()
Formatta il file system. Restituisce vero se la formattazione ha avuto esito positivo.

SPIFFS.open (percorso, modalità)
Apre un file. il percorso dovrebbe essere un percorso assoluto che inizia con una barra (ad es. /dir/filename.txt). modalità è una stringa che specifica la modalità di accesso. Può essere uno di “r”, “w”, “a”. Il significato di queste modalità è lo stesso della funzione C fopen. 
Restituisce l’oggetto File. Per verificare se il file è stato aperto correttamente, utilizzare l’operatore booleano.

SPIFFS.exists (percorso)
Restituisce vero se esiste un file con un determinato percorso, altrimenti falso.

SPIFFS.remove (percorso) 
elimina un file dato il suo percorso assoluto. Restituisce vero se il file è stato eliminato correttamente.

SPIFFS.rename (pathFrom, pathTo)
Rinomina il file da pathFrom a pathTo. I percorsi devono essere assoluti. Restituisce vero se il file è stato rinominato correttamente.

SPIFFS.totalBytes()
Ritorna il numero totale dei bytes assegnati al filesystem SPIFFS.

SPIFFS.usedBytes()
Ritorna il numero di bytes utilizzati dai vari file.

file.seek (offset, mode)
Questa funzione si comporta come la funzione fseek C. A seconda del valore della modalità, sposta la posizione corrente in un file come segue:

  • se mode è SeekSet, la posizione è impostata per compensare i byte dall’inizio.
  • se mode è SeekCur, la posizione corrente viene spostata di byte offset.
  • se mode è SeekEnd, position è impostato per compensare i byte dalla fine del file.
  • Restituisce vero se la posizione è stata impostata correttamente.

file.position ()
Restituisce la posizione corrente all’interno del file, in byte.

file.size ()
Restituisce la dimensione del file, in byte.

file.name ()
Restituisce il nome del file, come const char *.

file.close ()
Chiude il file.

Esempi pratici

Ecco uno sketch per ottenere informazioni e controllare tutti i file nel tuo SPIFFS.

/*
 *  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();
  }
}

Qui uno sketch con comandi più pratici, scrivi una stringa in un file, leggi tutto il contenuto del file, posizionati sul nono byte del file e leggi da lì i dati.

/*
 *  ESP32
 *  SPIFFS write, read and seek file
 *  by Mischianti Renzo <https://mischianti.org>
 *
 *  https://mischianti.org/
 *
 */
#include "Arduino.h"
#include "SPIFFS.h"

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 remove previous test
	// SPIFFS.remove(F("/testCreate.txt"));

	File testFile = SPIFFS.open(F("/testCreate.txt"), "w");

	if (testFile){
		Serial.println("Write file content!");
		testFile.print("Here the test text!!");

		testFile.close();
	}else{
		Serial.println("Problem on create file!");
	}

	testFile = SPIFFS.open(F("/testCreate.txt"), "r");
	if (testFile){
		Serial.println("Read file content!");
		/**
		 * File derivate from Stream so you can use all Stream method
		 * readBytes, findUntil, parseInt, println etc
		 */
		Serial.println(testFile.readString());
		testFile.close();
	}else{
		Serial.println("Problem on read file!");
	}

	testFile = SPIFFS.open(F("/testCreate.txt"), "r");
	if (testFile){
		/**
		 * mode is SeekSet, position is set to offset bytes from the beginning.
		 * mode is SeekCur, current position is moved by offset bytes.
		 * mode is SeekEnd, position is set to offset bytes from the end of the file.
		 * Returns true if position was set successfully.
		 */
		Serial.println("Position inside the file at 9 byte!");
		testFile.seek(9, SeekSet);

		Serial.println("Read file content!");
		Serial.println(testFile.readString());
		testFile.close();
	}else{
		Serial.println("Problem on read file!");
	}


}

void loop()
{

}

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. Integrazione del modulo W5500 su ESP32 con Core 3: supporto nativo ai protocolli Ethernet con SSL e altre funzionalità
  18. Integrazione del modulo LAN8720 su ESP32 con Core 3: supporto nativo del protocollo Ethernet con SSL e altre funzionalità.


Spread the love

Lascia un commento

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