Forum: Mikrocontroller und Digitale Elektronik ESP32 LittleFS Arduino


von Alexander (alecxs)


Lesenswert?

Kann hier jemand englisch, hat Github und Muße LittleFS auf einem ESP32 
zum laufen zu bringen? Bei meinem ESP32 funktioniert alles, aber bei 
jemand anderem nicht aufgrund geänderter Hardware. Ich weiß nicht weiter 
und kann nicht helfen, da ich das Board nicht habe.

hier das Problem:

https://tinyurl​.com/mrxhktbw
1
E (11) esp_littlefs: ./components/esp_littlefs/src/littlefs/lfs.c:1225:error: Corrupted
es handelt sich soweit ich das rausgelesen habe um folgendes Board:

ESP32-WROOM-32D DEVKIT V4

ESP32-D0WD-V3 (revision v3.1)

https://tinyurl​.com/3nzujhdc

Bitte kein KI Geblubber, das hilft nicht weiter.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

So langsam geht mir Arduino auf den Sack. Kein Java mehr, kein 
esp32fs.jar mehr, und littlefs-upload-1.2.0.vsix funktioniert erst ab 
Windows 10.

von Jan H. (jan_h74) Flattr this


Lesenswert?

Gebraucht er die identische ESP32 Library ? Ich verwende littlefs, mit 
ESP32 V1.06 library. Wen ich hochstufe nach V2.xx ode V3.xx, 
functioniert es nicht mehr....

von Alexander (alecxs)


Lesenswert?

Ja alles gleich V2, bis auf minimale Abweichung (CRC 1.0.3 statt 1.0.2 
und ESP8266Audio 1.9.9 statt 1.9.7) Ich glaube langsam der Kollege hat 
grundlegende Probleme mit der Stromversorgung, denn er meint er hat 
einen AMS1117 (5V) hinter einem LGS5148 (12V) das sind schon mal 4 Watt 
verbraten und es bleiben nur 600 mA. Er soll nun mal einen 91k dazu 
löten und den AMS1117 weglassen, mal sehen was das wird.

Es kotzt mich so an bei Arduino dass man ständig was downgraden muss 
damit es compiliert. Oder überhaupt noch in den Speicher passt. Gut 
selber schuld, aber wenn man nur singen und klatschen in der Schule 
hatte...

https://www.youtube.com/watch?v=iH1CBnGKKxI

Bin aber gerade dabei den Code zu aktualisieren für Arduino IDE 2.3.3 
werde wohl aber nicht umhin kommen einen Windows 10 Rechner aufzusetzen. 
Das kann dauern.

https://github.com/earlephilhower/arduino-littlefs-upload/issues/54

: Bearbeitet durch User
von Roland S. (roschmi)


Lesenswert?

Die alte LittleFS library https://github.com/lorol/LITTLEFS ist jetzt in 
Arduino esp32 cor v2 integriert.
Vielleicht liegen die Probleme darin begründet, dass die neue Arduino 
Version verwendet wird.
Ich hatte einige Mühe, auf die neue Version umzustellen.
Hier sind zwei Github Repos, in der ich die neue Version verwendet habe.
Es wurde allerdings nicht die Arduino IDE sondern PlatformIO als 
Programmierumgebung verwendet.
-https://github.com/RoSchmi/ESP32_LittleFS_Simple_Formatter
-https://github.com/RoSchmi/Esp32_WiFiManager_HeatingSurvey
Die Einzelheiten habe ich auch schon wieder vergessen. Rückfragen wären 
für mich daher auch nur mit einigem Aufwand zu beantworten.

von Alexander (alecxs)


Lesenswert?

Kompilieren tut es ja, nur der Upload funktioniert nicht. Sobald ich 
Windows 10 habe hebe ich alles an auf die neuste Version.

Wenn ich programmieren könnte würde ich PlatformIO nehmen. Aber das ist 
nun mal ein fremdes Arduino Projekt.

von Rainer W. (rawi)


Lesenswert?

4:2 für dich - kannst du dich nicht woanders auskotzen?

Alexander schrieb:
> Wenn ich programmieren könnte würde ich PlatformIO nehmen. Aber das ist
> nun mal ein fremdes Arduino Projekt.

Wenn du nicht programmieren kannst, lerne es. Oder such dir ein anderes 
Hobby.

scnr

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Du scheinst das Konzept Arduino nicht verstanden zu haben. Da benutzt 
man als Konsument fertige Libraries und muss nicht selbst programmieren. 
Und Open Source hat den Zweck zu teilen. Warum soll ich das Rad neu 
erfinden?

von Alexander (alecxs)


Lesenswert?

Habe nun Windows 10 installiert und Arduino IDE 2.3.3 getestet. Das 
Add-on "Upload LittleFS to Pico/ESP8266/ESP32" funktioniert soweit, bis 
auf Startschwierigkeiten mit dem COM Port. Muss man wissen.
https://github.com/earlephilhower/arduino-littlefs-upload/issues/12

Nun gibt es aber ein undokumentiertes Feature eine eigene 
Partitionstabelle anzulegen. Bei PlatformIO speichtert man die 
`partitions.csv` einfach in das Sketch Verzeichnis.
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/partition-tables.html#creating-custom-tables

Ich weiß wie ich die `boards.txt` ändern kann, so dass bei Custom 
Partition Scheme meine .csv hinterlegt wird. Dann kann ich `Partition 
Scheme: Custom` auswählen und es kompiliert auf diese Partitionsgröße.

`%UserProfile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0 
.5\boards.txt`
(Zeilen irgendwo bei dem "DOIT ESP32 DEVKIT V1" hinzufügen)
1
esp32doit-devkit-v1.menu.PartitionScheme.custom=Custom
2
esp32doit-devkit-v1.menu.PartitionScheme.custom.build.partitions=custom
3
esp32doit-devkit-v1.menu.PartitionScheme.custom.upload.maximum_size=1441792

`%UserProfile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0 
.5\tools\partitions`  -> hier die `custom.csv` speichern
1
# Name,   Type, SubType, Offset,  Size, Flags
2
nvs,      data, nvs,     0x9000,  0x5000,
3
otadata,  data, ota,     0xe000,  0x2000,
4
app0,     app,  ota_0,   0x10000, 0x160000,
5
app1,     app,  ota_1,   0x170000,0x160000,
6
spiffs,   data, spiffs,  0x2D0000,0x120000,
7
coredump, data, coredump,0x3F0000,0x10000,

Allerdings ist das zu kompliziert. Man kann nicht von jedem verlangen in 
den esp packages rumzupfuschen. Zumal die Änderung bei einem Update 
flöten gehen. Deswegen möchte ich es pur aus dem Sketch heraus 
partitioniert haben.

Das Add-on "Upload LittleFS to Pico/ESP8266/ESP32" erkennt 
praktischerweise schon meine .csv und legt die LittleFS Partition 
entsprechend an. Wählt man ein anderes Layout so erkennt das Add-on dies 
ebenfalls (z.B. huge_app)

Bei Arduino ist es unklar, ob und wie das funktioniert. Ich konnte noch 
keinen Erfolg erzielen, dass meine .csv irgendwie automatisch 
berücksichtigt wird.
https://forum.arduino.cc/t/arduino-2-1-1-custom-partitions-with-esp32-core/1156402

Hat jemand einen Tipp was ich noch machen kann um meine .csv aus dem 
Sketch Verzeichnis heraus zu laden? Ansonsten lösche ich die .csv wieder 
und nehme gleich `huge_app` aus den Vorlagen, geht allerdings nur für 
Boards wo das hinterlegt ist. Da müsste man "ESP32 Dev Module" als Board 
wählen, und dann die entsprechende Vorlage. Den Schritt hätte ich gern 
gespart.

Zur Erinnerung, es geht darum dass andere das zum laufen kriegen, ich 
selbst komme mit Arduino 1.8.19 und Linux klar. Ich brauche das also 
nicht für mich sondern für die einfachen Windows Nutzer, die nicht erst 
von V3.xx auf V2.xx downgraden wollen.

Das Sketch selbst hab ich schon so angepasst dass es mit den aktuellen 
Libs läuft, nur Punkt Komma Strich Änderungen. Allerdings sind die Libs 
so gewachsen dass das Sketch nun ohne zutun nicht mehr in die Default 
Partitionsgröße passt.

: Bearbeitet durch User
von Jan H. (jan_h74) Flattr this


Lesenswert?

Mit Arduino IDE und ESP32 functioniert das genauso : partition.csv in 
Sketch Ordner ablegen, compilieren und hochladen.Siehe auch : 
https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/tutorials/partition_table.html

von Alexander (alecxs)


Lesenswert?

Danke. Was mache ich falsch?
1
text section exceeds available space in board
2
Sketch uses 1349289 bytes (102%) of program storage space. Maximum is 1310720 bytes.
3
Sketch too big
Alexander schrieb:
> Das Add-on "Upload LittleFS to Pico/ESP8266/ESP32" erkennt
> praktischerweise schon meine .csv und legt die LittleFS Partition
> entsprechend an.

Alexander schrieb:
> app0,     app,  ota_0,   0x10000, 0x160000,

: Bearbeitet durch User
von Monk (Gast)


Lesenswert?

Alexander schrieb:
> Nun gibt es aber ein undokumentiertes Feature eine eigene
> Partitionstabelle anzulegen ... (gefolgt von einem link)

Was denkst du, worauf du da verlinkt hast? Auf die Dokumentation!

Arduino ist im Fall von ESP32 und STM32 ein Framework über einem 
Framework. Da muss man immer die Doku der unteren Ebenen lesen, um alles 
zu verstehen.

Bei über-Frameworks wird es mit jeder Ebene nach oben hin primitiver. 
Man lässt Features weg oder dokumentiert sie nicht nochmal neu. Das 
haben alle über-Frameworks so an sich. Sie versprechen durch 
Zusammenfassung, Umbenennung und Einführung eigener Standards, die 
Anwendung des Krams zu vereinfachen. Ich habe aber (mit Ausnahme des 
ESP8266 in seiner Anfangszeit) noch kein über-Framework erlebt, das 
dieses Versprechen wirklich erfüllt. Sobald man die geraden Pfade 
zwischen den grünen Wiesen verlässt (so drück sich mein Chef aus), wird 
es doch kompliziert - oft komplizierter, als bei Verzicht auf das 
über-Framework.

von Jan H. (jan_h74) Flattr this


Lesenswert?

Alexander schrieb:
> Danke. Was mache ich falsch?
> [code]
> text section exceeds available space in board
> Sketch uses 1349289 bytes (102%) of program storage space. Maximum is
> 1310720 bytes.
> Sketch too big
> Alexander schrieb:
>> app0,     app,  ota_0,   0x10000, 0x160000,
0x160000 entspricht 1310720 bytes. Ihre sketch ist aber 1349289 bytes, 
passt nicht zusammen. Versuch mal app0 partition zu vergrossern. Siehe 
auch dieses tool : https://esp32.jgarrettcorbin.com/

von Alexander (alecxs)


Lesenswert?

Jan H. schrieb:
> 0x160000 entspricht 1310720 bytes

0x160000 entspricht 1441792 Bytes, das hatte ich ja schon vergrößert. Es 
wird nur einfach ignoriert, da nicht explizit in der boards.txt 
zugewiesen. Das Add-on findet die Datei ja, also liegt's nicht an der 
Datei.

Monk schrieb:
> Was denkst du, worauf du da verlinkt hast? Auf die Dokumentation!

Ja auf die Dokumentation für PlatformIO bin ich gestoßen. Aber ich bezog 
mich auf das forum.arduino.cc

> Q: "Is this docuemented somewhere that you know of?"

> A: "Not that I'm aware of"

Jan H. (jan_h74) hat ja noch eine Dokumentation für arduino-esp32 
gefunden von espressif, aber wo ist die Dokumentation von Arduino? Wer 
garantiert mir dass das auch wirklich implementiert wurde, und an wen 
soll ich mich wenden weil es nicht funktioniert?

: Bearbeitet durch User
von Jan H. (jan_h74) Flattr this


Angehängte Dateien:

Lesenswert?

Versuch mal mit dieses partitions.csv
App0 / app1 erweitert nach 0x150000 bytes.
# Name,  Type,  SubType,Offset,           Size,  Flags
nvs,  data,  nvs,  0x9000,          0x5000,
otadata,data,  ota,  0xe000,          0x2000,
app0,  app,  ota_0,  0x10000,  0x150000,
app1,  app,  ota_1,  0x160000,  0x150000,
spiffs,  data,  spiffs,  0x2b0000,  0x140000,
coredump,data,  coredump,0x3f0000,  0x10000,

von Alexander (alecxs)


Lesenswert?

Wie gesagt, die Datei wird ignoriert. Hast Du es mal versucht, geht es 
bei Dir?

edit: aber mir kam da gerade eine Idee.. wobei, csv da dürfte das keine 
Rolle spielen..

: Bearbeitet durch User
von Jan H. (jan_h74) Flattr this


Lesenswert?

Ja, functioniert. Ich brauchte eine partition ohne "coredump". Mein 
Project ist auf github : https://github.com/RP6conrad/ESP-GPS-Logger

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

ich rede von der Arduino IDE

von Jan H. (jan_h74) Flattr this


Lesenswert?

Das project ist mit Arduino IDE 2.3.0, ESP32 lib V1.06 compiliert. 
LittleFS.h wird verwendet.[LittleFS_esp32@1.0.6]

von Alexander (alecxs)


Angehängte Dateien:

Lesenswert?

Sorry bin beim Kompilieren eingeschlafen... hatte mal mit Zeilenende 
CRLF und mal mit LF probiert, macht aber keinen Unterschied.
Hier das Log für deine partitions.csv (gekürzt):
1
Sketch too big; see support.arduino.cc/hc/en-us/articles/360013825179 for tips on reducing it.
2
Sketch uses 1349333 bytes (102%) of program storage space. Maximum is 1310720 bytes.
3
Global variables use 39756 bytes (12%) of dynamic memory, leaving 287924 bytes for local variables. Maximum is 327680 bytes.
4
text section exceeds available space in board
5
6
Compilation error: text section exceeds available space in board
Da es bei dir geht, werde ich mal sukzessiv downgraden und schauen ab 
wann es funktioniert. Ich werde aber erstmal Dein Projekt flashen und 
gucken ob es da geht.

: Bearbeitet durch User
von Monk (Gast)


Lesenswert?

Alexander schrieb:
> Wer garantiert mir dass das auch wirklich implementiert wurde, und an
> wen soll ich mich wenden weil es nicht funktioniert?

Wie gesagt ist genau das der Knackpunkt bei solchen über-Frameworks. 
Arduino ist für den Einstieg toll, aber wer mehr will sollte besser das 
IDF verwenden. Leider muss man sich dann aber auch von anderen 
Bibliothekten trennen, die von Arduino abhängen  oder sie umschreiben. 
Eine bequeme allgemeingültige Lösung für dieses Dilemma kann ich nicht 
bieten.

von Alexander (alecxs)


Angehängte Dateien:

Lesenswert?

Alexander schrieb:
> Da es bei dir geht, werde ich mal sukzessiv downgraden und schauen ab
> wann es funktioniert. Ich werde aber erstmal Dein Projekt flashen und
> gucken ob es da geht.

Auch mit deinem kompletten Sketch funktioniert es bei mir nicht. Ich 
habe überprüft dass deine `partitions.csv` auch wirklich nach 
%TEMP%\arduino\sketches\* kopiert wurde. Das Add-on findet auch die 
Datei und schreibt an die richtige Adresse 0x290000.

Beim Hochladen des Sketches sagt es weiterhin Maximum is 1310720 bytes. 
Die .csv wird ignoriert.

Das mit dem downgraden könnte dauern, Arduino kompiliert immer so 
ewig...

Jan H. schrieb:
> Das project ist mit Arduino IDE 2.3.0, ESP32 lib V1.06 compiliert.
> LittleFS.h wird verwendet.[LittleFS_esp32@1.0.6]

hab mal auf die [LittleFS@3.0.5] aktualisiert (ungetestet)
https://github.com/RP6conrad/ESP-GPS-Logger/pull/34

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

LittleFS ist Standardmäßig für ESP32 vorhanden, muss man nur 
inkludieren. Man benötigt keine fremde Lib.

von Alexander (alecxs)


Lesenswert?

Es gibt augenscheinlich auch gar kein Problem mit LittleFS. Ich hatte 
Probleme mit dem Add-on, weil das Windows 10 erfordert. Das eigentliche 
Problem ist die *"Sketch too big; text section exceeds available space 
in board."* Fehlermeldung, welche verhindert dass das kompilierte Sketch 
geflasht wird.

Lässt sich lösen indem man eine vordefinierte Partitionstabelle 
auswählt. Ich wollte aber eine Partitionstabelle über das Sketch 
vorgeben, das hätte einen Klick erspart.

Das Feature ist aber kaputt gegangen, und wie Stefan schon schrieb, 
fühlt sich auch keiner zuständig.

https://github.com/espressif/arduino-esp32/issues/10120

Keine Lösung, aber ein Workaround:

Alexander schrieb:
> Ansonsten lösche ich die .csv wieder und nehme gleich huge_app aus den
> Vorlagen, geht allerdings nur für Boards wo das hinterlegt ist. Da
> müsste man "ESP32 Dev Module" als Board wählen, und dann die
> entsprechende Vorlage. Den Schritt hätte ich gern gespart.

von Alexander (alecxs)


Lesenswert?

Hat jemand eine Idee wo die Arduino IDE 2.x die Benutzerauswahl 
speichert? Ich möchte wissen wo steht welches Board und welches 
Partitionslayout aktuell ausgewählt ist. In der 
`%UserProfile%\.arduinoIDE\settings.json` habe ich das nicht gefunden?

von Alexander (alecxs)


Lesenswert?

Ich glaube es ist diese Datei. Die würde ich gerne per Skript auslesen. 
Was bietet sich da an für Windows und Linux, Python? Ich wollte das 
Skript gerne per platform.txt ausführen, dort wird aber für Windows .exe 
verwendet.
1
%UserProfile%\AppData\Roaming\arduino-ide\Local Storage\leveldb\000003.ldb

von Alexander (alecxs)


Angehängte Dateien:

Lesenswert?

Das war ne Sackgasse. Habe zwar ein Tool gefunden was die leveldb in 
eine csv exportiert, wo ich einen Python Wrapper drumbauen konnte, aber 
das klappt nur wenn im log was in Klartext steht.
https://github.com/markmckinnon/Leveldb-py
1
$ python ./getpartition_win.py
2
Found: leveldb-dump.exe
3
Attempting to repair DB
4
No Stats
5
Number of records dumped are ==> 7
6
Partition Scheme: huge_app, Huge APP (3MB No OTA/1MB SPIFFS)

Weiß jemand wie ich die Daten aus dem Binärteil kriege sobald die einmal 
weggeschrieben wurden? Hier was zum LevelDB Format:

https://www.forensicfocus.com/articles/after-sqlite-what-next-a-must-read-primer-on-leveldb

von Alexander (alecxs)


Lesenswert?

Damit scheint es zu gehen. Kann zumindest binäre LevelDB lesen und auch 
die Custom Partition Scheme Preferences schreiben. Ob die Arduino IDE 
das annimmt weiß ich noch nicht.

https://github.com/wbolster/plyvel

Für den `Sketch too big` Fehler mit der partitions.csv gibt es nun auch 
eine Lösung. Arduino hat da schon was vorgesehen, hat nur noch keiner 
implementiert.

Mit einem Skript kann man die Prüfung selbst machen, man muss nur ein 
JSON Array auf stdout ausgeben. Das wird dann von der Arduino IDE 
mitgelesen.
1
recipe.advanced_size.pattern

https://forum.arduino.cc/t/ide-preferences-leveldb/1312668

von Alexander (alecxs)


Lesenswert?

Arduino IDE 2.3.3 kann nun unter Windows auch kein Python mehr? gut dass 
ich ein Python Script geschrieben habe...

Im packages/esp32/hardware/esp32/3.0.7/tools Ordner sind nun alle 
Dateien doppelt, einmal als .py und einmal als .exe - kriegt man raus 
mit welchem Compiler ein Python Skript als Windows .exe kompiliert 
wurde?

von Jan H. (jan_h74) Flattr this


Lesenswert?

Alexander schrieb:
> Alexander schrieb:
>> Da es bei dir geht, werde ich mal sukzessiv downgraden und schauen ab
>> wann es funktioniert. Ich werde aber erstmal Dein Projekt flashen und
>> gucken ob es da geht.
>
> Auch mit deinem kompletten Sketch funktioniert es bei mir nicht. Ich
> habe überprüft dass deine `partitions.csv` auch wirklich nach
> %TEMP%\arduino\sketches\* kopiert wurde. Das Add-on findet auch die
> Datei und schreibt an die richtige Adresse 0x290000.
>
> Beim Hochladen des Sketches sagt es weiterhin Maximum is 1310720 bytes.
> Die .csv wird ignoriert.
>
> Das mit dem downgraden könnte dauern, Arduino kompiliert immer so
> ewig...
>
> Jan H. schrieb:
>> Das project ist mit Arduino IDE 2.3.0, ESP32 lib V1.06 compiliert.
>> LittleFS.h wird verwendet.[LittleFS_esp32@1.0.6]
>
> hab mal auf die [LittleFS@3.0.5] aktualisiert (ungetestet)
> https://github.com/RP6conrad/ESP-GPS-Logger/pull/34
Habe nochmal mit dieses thema weiter gemacht, und gewunschte 
partitions.csv ablegen in ordner functioniert, aber....
- In Arduino IDE "Tools" einstellen "Erase All Flash Before Sketch 
Upload Enable" (oder alte partition bleibt behalten).
- "Max Sketch space " wird noch immer von boards.txt file uebernommen, 
und nicht von partitions.csv !!! So allerdings auch noch eine partition 
in "Tools" auswahlen die genugend app space had !!
- Versuche war mit Arduino IDE 2.3, esp32 V2.0.7 library, und ESP32 S3 
Dev module

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.