Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Flashdateisysteme auf dem ESP8266 / ESP32
#1
Hallo Mitbastler und Mitleser,

oftmals steht man vor dem Problem  Daten in einem Microcontroller persistent zu speichern. Das können bestimmte Einstellungsdaten, Reglervariablen oder andere Sachen sein. Ist die Datenmenge gering, reicht der knappe Platz im EEPROM eines AVR/Arduino-Controllers meist aus. Anders sieht es bei größeren Datenmengen aus. Kalibrierkurven, Look-up-Tabellen, Webseiten für einen Webserver, ... usw. brauchen Platz im oberen Kilobyte bis Megabyte-Bereich.

Microcontroller wie der ESP8266 und der ESP32 haben einen mehrere MByte-großen Flashspeicher, der auch ein Dateisystem enthalten kann. Hier ein Auszug aus der Memorymap der eben genannten Systeme.


.jpg   Speicher_Map.jpg (Größe: 29,41 KB / Downloads: 218)

Die Einrichtung eines Dateisystems ist mit der Arduino IDE sehr komfortabel möglich.

Zunächst muss man ein Zusatztool für die Arduino IDE installieren. Das Tool findet man unter https://github.com/esp8266/arduino-esp82...-0.1.3.zip

Im nächsten Schritt legt man im lokalen Arduino-Projektverzeichnis ein Ordner mit dem Namen "tools" an. In dieses Verzeichnis entpackt man die oben aufgeführte ZIP-Datei. Das Ganze sollte dann so aussehen.

<lokales Benutzerverzeichnis>/Arduino/tools/ESP8266FS/tool/esp8266fs.jar

Danach startet man die Arduino IDE neu. Als nächstes legt man ein neues Projekt (Sketch) an, oder wählt ein bestehendes Sketch aus. Nachfolgend mein Beispiel-Sketch:


Code:
#include "FS.h"

boolean bFFSaktiv = false;

void setup()
{
 Serial.begin(115200);
 delay(1000);
 // Start filing subsystem
 if (SPIFFS.begin()) {
     Serial.println("Flashdateisystem aktiv\n\n");
     Serial.println();
     bFFSaktiv = true;
 } else {
     Serial.println("Flashdateisystem kann nicht eingeschaltet werden\n\n");
 }
 
}

void loop()
{
 Serial.println("Dateien in Root-Verzeichnis");
 if (bFFSaktiv) {
  Dir dir = SPIFFS.openDir("/");
  while (dir.next()) {    
    Serial.print(dir.fileName());
    File f = dir.openFile("r");
     Serial.print(" Größe: "); Serial.println(f.size());
   f.close();
  }
 }

 while (true){
   yield();
 }
}

Dann wählt man in der Menüleiste der Arduino-IDE "Sketch" - "Sketch-Ordner anzeigen" aus.
   

Danach öffnet sich das aktuelle Projektverzeichnis im Standarddateibrowser. Darin legt man den Ordner "data" an.
   

Dieser "data"-Ordner stellt nun das Wurzelverzeichnis unseres Dateisystems auf dem Microcontroller dar. Darin können wir beliebige Dateien und Dateitypen erstellen (siehe nachfolgendes Bild). Natürlich darf die Gesamtgröße aller Dateien nicht die maximale Größe unseres Dateisystems überschreiten.

   

Anschließen wählen wir das neue Tool "ESP8266 Sketch Data Upload" im Menüpunkt "Werkzeuge" unserer Arduino-IDE aus.

   
Die Übertragung des Dateisystems auf den Microcontroller kann einige Zeit in Anspruch nehmen. Ist der Upload erfolgreich gewesen, flashen wir als nächstes wie gehabt unser Programm (bzw. den Beispielcode von oben) in den Microcontroller. Das Beispielprogramm ist ein "kleiner" primitiver Dateibrowser der alle Dateien im Wurzelverzeichnis des Dateisystems auf dem Controller anzeigt.

   


Ist ein Filesystem im Microcontroller erfolgreich angelegt, kann man die Dateien mit Programmcode beliebig modifizieren. Einen Überblick der Dateisystembefehle findet man unter http://esp8266.github.io/Arduino/version...ystem.html


Viele Bastlergrüße
Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#2
ISt zwar etwas älter, habe es auch in meinem webradio eingebaut und noch etwas nützliches gefunden.

Da war jemand so fleißig und hat einem FTPserver dafür gebastelt :

https://github.com/nailbuster/esp8266FTP...tpServer.h


man muß am ende nur

FtpServer ftpSrv;             //set #define FTP_DEBUG in ESP8266FtpServer.h to see ftp verbose on serial

  ftpSrv.begin("user", "user");                                     //username, password for ftp.  set ports in ESP8266FtpServer.h  (default 21, 50009 for PASV)


und im mainloop

    ftpSrv.handleFTP();                                            //make sure in loop you call handleFTP()!!

Und schon hat man den zugriff auf das flash. Ich selber lade so meine stationslisten in das gerät.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Fragen und Antworten zum Nachbau - ESP8266/ESP32 Webradio klammi † 151 51.318 22.11.2022, 17:40
Letzter Beitrag: Siegfried55
  Gartenradio mit ESP32 fx2radio 9 3.111 15.06.2022, 10:23
Letzter Beitrag: fx2radio
  Webradio mit ESP32 Neuling 173 67.461 01.04.2022, 16:31
Letzter Beitrag: saarfranzose
  Wolle's Webradio mit dem ESP32 Tubefan 7 7.534 20.04.2021, 20:22
Letzter Beitrag: saarfranzose
  Webradio mit ESP8266 / ESP32 Bernhard45 54 24.297 01.02.2021, 12:21
Letzter Beitrag: saarfranzose

Gehe zu: