ESP32 WROOM32-Modul

LittleFS für den ESP32 – Teil 2: Dateisystem-Tools

Der zweite Teil des Beitrags zu LittleFS auf dem ESP32 beschreibt ausführlich die Installation der Dateisystem-Tools für die Arduino-IDE. Damit kann man aus der IDE heraus ein Dateisystem so vorbereiten, dass es vorinstallierte Dateien enthält. Mit den Tools erstellt man ein Image (Abbild) des vorbelegten Dateisystems und lädt es in den Flash-Speicher des ESP32 hoch. Der Einsatz der Dateisystem-Tools ist optional; sie sind zur Nutzung der Flash-Dateisysteme nicht erforderlich.

Der erste Teil hat Grundlagen zu LittleFS im Vergleich mit SPIFFS erläutert, dem bisherigen Standard-Dateisystem auf dem ESP32. Die LittleFS-Bibliotkek wurde installiert und zwei Beispielprogramme haben den Zugriff auf das Dateisystem des ESP32 demonstriert.

Wie der erste Teil gezeigt hat, kann man mit LittleFS direkt nach der Installation der Bibliothek arbeiten. Die Dateisystem-Tools sind dafür nicht nötig – ihre Installation ist optional.
Mit diesen Werkzeugen kann man eine Imagedatei eines Dateisystem mit vorinstallierten Dateien erstellen und auf den ESP32 flashen. Das kann z.B. sinnvoll sein, wenn man auf dem ESP32 einen Webserver laufen lässt – dann kann man bereits bestimmte (statische) Inhalte vorbereiten, ohne dass diese erst vom Programm erstellt werden müssen. Ein anderer denkbarer Anwendungsfall sind Bilder oder (Teil-)Grafiken, die ein Programm auf einer Anzeige darstellen soll.

Die Tools zum Hochladen von Dateisystemen gibt es schon länger für die anderen ESP32-Dateisysteme SPIFFS und FatFS. Wer sie bereits nutzt, muss aber mindestens mklittlefs und eine aktualisierte Version des Dateisystem-Upload-Tools ESP32FS installieren, damit auch LittleFS unterstützt wird.

Die folgenden Abschnitte beziehen sich im Wesentlichen auf die Anleitungen von „lorol”, dem Entwickler der Bibliothek für den ESP32:

Installation des Tools mklittlefs

mklittlefs erzeugt das Image eines LittleFS-Dateisystems, das anschließend auf den Flash-Speicher übertragen wird. Man lädt das Programm von der Seite github.com/earlephilhower/mklittlefs/releases herunter:[1]Die genannten Dateinamen beziehen sich auf die im Mai 2021 aktuelle Version 3.0.0 vom Juli 2020. Neuere Versionen werden sich in den letzten Zeichen des Dateinamens (hier „295fe9b”) davon … Continue reading

  • 64-bit-Windows: x86_64-w64-mingw32-mklittlefs-295fe9b.zip
  • 32-bit-Windows: i686-w64-mingw32-mklittlefs-295fe9b.zip
  • Das Tool steht auch für MacOS und mehrere Linux-Architekturen zur Verfügung.

Das in der Archivdatei enthaltene Programm mklittfs(.exe) muss in den Tools-Ordner des ESP32-Pakets kopiert werden, in dem sich bereits die Tools espota and esptool befinden. Unter Windows ist das bei einer Standard-Installation der Arduino-IDE der Pfad
     C:\Users\Heiko\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\tools
(auf dem Bild im Vordergrund). Es gibt einen weiteren tools-Ordner C:\Users\<benutzername>\AppData\Local\Arduino15\packages\esp32\tools (im Hintergrund angezeigt) – das ist NICHT der richtige.

mklittefs.exe im Tools-Verzeichnis für den ESP32
mklittefs.exe im Tools-Verzeichnis für den ESP32

Installation des Tools mkfatfs (optional)

Falls man möchte, kann man das Tool mkfatfs zum Erzeugen des FAT-Dateisystems gleich mitinstallieren. (Ich habe es zwar installiert, aber nicht ausprobiert; schließlich will ich mit LittleFS arbeiten.)

Der Download erfolgt von github.com/labplus-cn/mkfatfs/releases – im Mai 2021 ist Version 2.0.1 aktuell. Unter Windows benötigt man das Archiv mkfatfs.rar. Das enthält einen Ordner, in dem sich das eigentliche Tool mkfatfs.exe und drei zugehörige DLL-Dateien befinden. Diese vier Dateien kopiert man in dasselbe Verzeichnis, in das man eben schon mklittls.exe kopiert hat – im Screenshot oben sieht man auch diese Dateien.

7-ZIP: Inhalt des RAR-Archivs mkfatfs
7-ZIP: Inhalt des RAR-Archivs mkfatfs

Windows kann standardmäßig nicht mit RAR-Archiven umgehen. Um das Archiv zu entpacken, kann man das kostenlose Open-Source-Tool 7-Zip nutzen. Auch der Dateimanager Double Commander bietet eine eingebaute Unterstüzung für RAR-Dateien und andere Archive.
Weitere Tools findet man per Suchmaschine. (Dabei sollte man aber aufpassen, dass man nicht irgendwo landet, wo einem beim Download oder Installieren der Software weitere (Schad-)Programme untergeschoben werden. Außerdem werden auch auf seriösen Seiten oft lediglich Testversionen kommerzieller Software angeboten, die bei dauerhafter Nutzung mit regelmäßigen Popups nerven.)

mkspiffs ist vorinstalliert

Da SPIFFS als Standarddateisystem Bestandteil des ESP32-Systems für den Arduino ist, ist das Tool mkspiffs zum Erzeugen des Dateisystems bereits vorinstalliert. Man findet es bei einer Standard-Installation unter Windows im Ordner C:\Users\<benutzername>\AppData\Local\Arduino15\packages\esp32\tools\mkspiffs\0.2.3.

Dateisystem-Uploader ESP32FS installieren

Mit dem Tool ESP32FS werden die Image-Dateien der verschiedenen Dateisysteme (SPIFFS, LittleFS und FatFS) aus der Arduino-IDE heraus in den Flash-Speicher des ESP32 hochgeladen. So eine Image-Datei kann ein leeres Dateisystem enthalten oder bereits mit Dateien, die vom PC übernommen werden, befüllt sein (siehe unten).
Damit LittleFS unterstützt wird, benötigt man die aktualisierte Version des ESP32FS-Tools von github.com/lorol/arduino-esp32fs-plugin/releases. Hierzu lädt man die Archivdatei esp32fs.zip herunter; im Mai 2021 ist Version 2.0.7 aktuell.

Zum Installieren muss man den Pfad kennen, in dem man die Arduino-Sketches speichert: Er ist in den Einstellungen der IDE im Menü Datei → Voreinstellungen im Feld Sketchbook-Speicherort zu finden; unter Windows ist das standardmäßig im Benutzerverzeichnis
     C:\Users\<benutzername>\Documents\Arduino,
auf meinem System habe ich es auf K:\code\arduino geändert (siehe das folgende Bild links).

In diesem Ordner muss man einen Ordner tools anlegen (falls noch nicht vorhanden), dort einen Ordner ESP32FS und darin wiederum den Ordner tool, sodass der gesamte Pfad dann
     C:\Users\<benutzername>\Documents\Arduino\tools\ESP32FS\tool\
bzw. auf meinem System K:\code\arduino\tools\ESP32FS\tool\ lautet. In diesen tool-Ordner kopiert man die Datei esp32fs.jar aus dem ZIP-Archiv (rechtes Bild über diesem Absatz).

Neustart der Arduino-IDE

ESP32FS im Werkzeuge-Menü der Arduino-IDE
ESP32FS im Werkzeuge-Menü der Arduino-IDE

Hat man die obigen Installationsschritte erledigt, muss man die Arduino-IDE beenden und neu starten.

Nach dem Neustart sollte sich im Werkzeuge-Menü ein neuer Eintrag »ESP32 Sketch Data Upload« befinden, mit dem das ESP32FS-Tool gestartet wird.

Flashen des Dateisystems mit ESP32FS

Wie oben geschrieben, kann man mit dem Tool ESP32FS Image-Dateien der Dateisysteme SPIFFS, LittleFS und FatFS aus der Arduino-IDE heraus in den Flash-Speicher des ESP32 übertragen. Die eigentliche Erstellung des Images erledigen die oben installierten Hilfsprogramme.

Wenn man will, kann man das Dateisystem mit Dateien vorbelegen. Das erfolgt projektbezogen, d.h. die Dateien sind einem bestimmten Sketch (Programm) zugeordnet.

Zu beachten ist, dass ESP32FS nicht dazu geeignet ist, „nur” Dateien vom PC auf den ESP32 zu kopieren – das erzeugte Image überschreibt den alten Inhalt der Dateisystem-Partition im Flash. Bereits dort gespeicherte Inhalte gehen beim Flashen verloren.

Der Ablauf ist wie folgt:

  • Öffnen eines Sketches (Programm mit Endung .ino) in der Arduino-IDE
    (für ein neues Projekt legt man einen neuen Sketch an und speichert diesen).
  • In dem Verzeichnis, in dem sich der Sketch befindet, legt man einen Ordner data an, in den man die gewünschten Dateien hineinkopiert,
    oder
    man öffnet irgendeinen Sketch, in dessen Programmverzeichnis sich kein data-Ordner befindet, wenn man ein leeres Dateisystem erzeugen will.
  • Im Werkzeuge-Menü der IDE wählt man das passende ESP32-Board aus, stellt den korrekten Port ein und wählt das gewünschte Partitionsschema aus: eines mit SPIFFS, wenn man ein LittleFS- oder SPIFFS-Dateisystem einrichten will, sonst eines für FatFS.[2]Die Default-Schemata sehen eine 1,2 MB große Partition für das Programm vor, eine ebenso große für ein Programmupdate OTA (drahtlos, over the air) und 1,5 MB für das Dateisystem. Da … Continue reading
  • Man startet das Tool ESP32FS über den Menüpunkt Werkzeuge → ESP32 Sketch Data Upload und wählt im Dropdown-Menü das gewünschte Dateisystem aus.
    ESP32FS-Tool, rechts das Dropdown-Menü
    ESP32FS-Tool, rechts das Dropdown-Menü
  • Ein Klick auf OK erstellt das Image und lädt es in den Flash. Wurde kein data-Ordner gefunden, gibt es eine Nachfrage, ob man wirklich ein leeres Dateisystem erstellen will.
    Hat man ein ESP32-Board, bei dem man zum Programm-Upload die BOOT-Taste drücken mus, muss man das auch hier tun – der Upload des Images startet, wenn man die BOOT-Taste für ca. 3 Sekunden gedrückt gehalten hat.
  • Im Ausgabebereich der IDE werden ausführliche Meldungen angezeigt.

Außerdem kann man mit dem Tool den Flash-Speicher des ESP32 komplett löschen, wenn man den untersten Menüpunkt »!Erase Flash!« auswählt. Nach dem Klick auf OK erfolgt zur Sicherheit eine Nachfrage, bevor es losgeht.

Beispiel: Flashen eines LittleFS-Dateisystems

Für das folgende Beispielprogramm soll das LittleFS-Dateisystem ein paar Dateien enthalten: eine Textdatei testdatei.txt im Root und eine weitere Datei (test2.txt) im Verzeichnis test-dir. Das Sketch-Verzeichnis enthält also neben dem Programm den data-Ordner mit den gewünschten Dateien und Verzeichnissen:

dir /s /b
 
K:\code\arduino\LittleFS_Test\data
K:\code\arduino\LittleFS_Test\LittleFS_Test.ino
K:\code\arduino\LittleFS_Test\data\test-dir
K:\code\arduino\LittleFS_Test\data\testdatei.txt
K:\code\arduino\LittleFS_Test\data\test-dir\test2.txt

Startet man dann ESP32FS über den Menü-Eintrag in der IDE, wird das Dateisystem erzeugt (dabei werden Meldungen zu den enthaltenen Dateien ausgegeben) und auf den ESP32 geflasht. Ich habe das Partitionschema »No OTA (2MB APP/2 MB SPIFFS)« gewählt, wie man an der Größenangabe „[LittleFS] size: 1984” (KB) oben in den Meldungen sieht.

Im Ausgabebereich der IDE unterhalb des Editors wird das Flashen so protokolliert:

Chip : esp32
Using partition scheme from Arduino IDE.
Start: 0x210000
Size : 0x1f0000
mklittlefs : C:\Users\Heiko\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\tools\mklittlefs.exe
 
esptool : C:\Users\Heiko\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\3.0.0\esptool.exe
 
[LittleFS] data   : K:\code\arduino\LittleFS_Test\data
[LittleFS] offset : 0
[LittleFS] start  : 2162688
[LittleFS] size   : 1984
[LittleFS] page   : 256
[LittleFS] block  : 4096
->/test-dir/test2.txt
->/testdatei.txt
[LittleFS] upload : C:\Users\Heiko\AppData\Local\Temp\arduino_build_634795/LittleFS_Test.littlefs.bin
[LittleFS] address: 2162688
[LittleFS] port   : COM4
[LittleFS] speed  : 921600
[LittleFS] mode   : dio
[LittleFS] freq   : 80m
 
->esptool.py v3.0-dev
->Serial port COM4
->Connecting........_____....._
->Chip is ESP32-D0WDQ6 (revision 1)
->Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
->Crystal is 40MHz
->MAC: 24:62:ab:f1:e1:90
->Uploading stub...
->Running stub...
->Stub running...
->Changing baud rate to 921600
->Changed.
->Configuring flash size...
->Auto-detected Flash size: 4MB
->Compressed 2031616 bytes to 2508...
->Writing at 0x00210000... (100 %)
->Wrote 2031616 bytes (2508 compressed) at 0x00210000 in 0.1 seconds (effective 235550.5 kbit/s)...
->Hash of data verified.
->
->Leaving...
->Hard resetting via RTS pin...

Fußnoten

Fußnoten
1 Die genannten Dateinamen beziehen sich auf die im Mai 2021 aktuelle Version 3.0.0 vom Juli 2020. Neuere Versionen werden sich in den letzten Zeichen des Dateinamens (hier „295fe9b”) davon unterscheiden; wichtig ist der Präfix des Dateinamens, um die richtige Datei für das eigene System auszuwählen: „x86_64” für 64bit-Systeme und „i686” für 32bit-Windows. Die jeweils aktuelle Version findet man über die o.g. Release-Seite.
2 Die Default-Schemata sehen eine 1,2 MB große Partition für das Programm vor, eine ebenso große für ein Programmupdate OTA (drahtlos, over the air) und 1,5 MB für das Dateisystem. Da ich kein OTA benötige, habe ich eines der anderen Schemata verwendet: je 2 MB für Programm und Daten oder 1 MB Programm und 3 MB Daten.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.