Forum: Mikrocontroller und Digitale Elektronik ESP32-WROOM-32 Flash-Größe


von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Da ich noch nicht besonders fit mit dem ESP32 und Arduino bin, mal die 
erste Frage von möglicherweise noch vielen...

Ich beschäftige mich gerade mit einem NodeMCU-32S, welches ein 
ESP32-WROOM-32 Modul besitzt. Dieses hat einen 4Mbyte Flash. Allerdings 
ist darin wohl nicht nur ein "Image" gespeichert, sondern drei - wodurch 
die für ein Programm maximal nutzbare Größe auf 1,3MByte reduziert ist. 
Wenn ich in der Arduino-Umgebung ein einfaches Demo-Programm für einen 
Webserver compiliere, gehen dafür bereits etwa 70% des verfügbaren 
Speichers drauf.

Was macht man, wenn man mehr benötigt? Gibt es eine Möglichkeit, auf dem 
vorhandenen ESP32-Modul mehr Speicher nutzbar zu machen oder braucht man 
eines mit größerem Flash? Welches würde man dann am besten nehmen?

Was mich in diesem Zusammenhang auch interessiert: Wie schnell wächst 
bei der Programmierung mit der Arduino-Umgebung die Größe des Codes? 
Oder anders, wie komplex kann eine Anwendung bei 1,3MByte maximaler 
Code-Größe sein, wie schnell kollidiert man mit diesem Limit?

Danke.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ben B. schrieb:
> Allerdings ist darin wohl nicht nur ein "Image" gespeichert, sondern
> drei

Das kann man übrigens in der Konfiguration (Partitionstabelle) vom 
ESP-IDF einstellen. Man kann auch nur 1 oder 2 Images ablegen. Wenn man 
nur 1 Image hat gehen halt keine OTA-Updates, bei 2 gehen OTA-Updates, 
bei 3 gehen OTA-Updates und der User kann auch immer per Knnopfdruck 
auf das "Werks"-Image zurück (ohne manuelles flashen). Von der 
Gesamtkapazität muss man noch etwas abziehen für Bootloader, Header etc.

Ben B. schrieb:
> Oder anders, wie komplex kann eine Anwendung bei 1,3MByte maximaler
> Code-Größe sein,

Da ist dann halt schon eine Menge Framework-Code drin. Der eigene Code 
macht da typischerweise weniger als 100kB aus, die Frage ist eben wie 
viele Bibliotheken man noch einbindet. Wenn man kein Arduino nutzt 
sondern direkt auf dem ESP-IDF aufsetzt spart man einiges, und man kann 
beim ESP-IDF per Konfiguration alles deaktivieren was man nicht braucht. 
Eventuell kompiliert Arduino auch immer ohne Optimierungen, die kann man 
bei einem reinen IDF-Projekt aktivieren und noch was sparen.

Bei einem Webserver hast du natürlich noch den ganzen Web-Content der 
ausgeliefert werden muss, der kann auch schnell groß sein. Du kannst 
dieses Zeug auch auf einem beliebigen Webserver im Internet hosten und 
vom Controller nur eine nahezu leere Seite ausliefern die das Zeug vom 
Webserver einbindet. Dann funktioniert die Seite natürlich nur wenn der 
Client (PC, Smartphone...) zeitgleich Internetzugang hat.

: Bearbeitet durch User
von Obelix X. (obelix)


Lesenswert?


von Dieter S. (hotsystems)


Lesenswert?

Nimm einen ESP32-S3 N16R8 und lege die Website in das LittleFS.
Z.B hier: https://de.aliexpress.com/item/1005006418608267.html

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Der eigene Code macht da typischerweise weniger als 100kB aus,
> die Frage ist eben wie viele Bibliotheken man noch einbindet.
Okay, das liest sich nicht schlecht, dann bin ich noch nicht an der 
Grenze.

> Wenn man kein Arduino nutzt sondern direkt auf dem ESP-IDF aufsetzt
Würdest Du einem Arduino- genauso wie ESP-IDF-Anfänger eher raten, auf 
ESP-IDF zu gehen und das zu lernen anstelle Arduino?

Ich hatte mich jetzt für Arduino entschieden, da es dort viele 
Bibliotheken für die beiden Schaltkreise gibt, die ich einsetzen wollte 
(I2C ADC und DAC).

Vielleicht gleich ganz kurz zum Hintergrund, bevor wieder jemand sagt, 
ich würde den nicht preisgeben wollen oder Salami-Taktik betreiben.
Mir geht es um meinen PV-Akkulader, den ich gerne WiFi-fähig hätte. 
Daher ESP32, das bastle ich mir nicht selbst mit einem AVR oder so. Die 
beiden Bibliotheken (Adafruit_ADS1X15 und Adafruit_MCP4725) habe ich 
bereits eingebunden, aber noch nicht benutzt (keine Ahnung, ob sie dann 
in voller Länge in den Code eingebunden werden wenn man sie nicht 
benutzt, oder ob der Compiler das weg-optimiert). Der dadurch 
entstehende Beispiel-Webserver mit Bibliotheken benötigt 70% der 
1,3Mbyte, also bleiben mir noch ca. 380kByte für den Rest des Programms. 
Das soll aus ein "paar Webseiten" und der Steuerung des PV-Laders 
bestehen, also das MPP-Tracking und wenige Steuerfunktionen übernehmen. 
Sowas wie Lüfterregelung (wenn ichs hinkriege) oder einfaches 
Ein/Aus-Schalten der Spannungswandler, die nachts nicht laufen müssen. 
Die Webseiten müssen nicht besonders hübsch aussehen oder bunt animiert 
sein, sie müssen nur zweckdienlich und funktionell sein. Mit CSS lässt 
sich recht viel machen und das ist alles nur Text, den man dafür 
übertragen muss.

Ich schätze das Projekt nicht sonderlich komplex ein, aber wenn man noch 
nie mit der Arduino-IDE (oder einer anderen 
Entwicklungsumgebung/Sprache) gearbeitet hat, dann könnte es trotzdem 
unerwartet schwer werden, das hinzukriegen.

> Du kannst dieses Zeug auch auf einem beliebigen Webserver im
> Internet hosten und vom Controller nur eine nahezu leere Seite
> ausliefern die das Zeug vom Webserver einbindet.
Korrekt, sollte aber nicht erforderlich sein.

Ich mache mir eher Sorgen darüber, ob sich die Bibliotheken miteinander 
vertragen, also sich nicht um den I2C-Bus prügeln wenn man sie in 
schneller Folge benutzt usw.

Zwei Fragen hätte ich noch...
Gibt es einen Unterschied zwischen #include "xxx" und #include <xxx>?
Und kann man auf dem ESP-Modul etwas Speicher für eigene Variablen 
bekommen, die man gerne dauerhaft speichern möchte (z.B. 
WLAN-Zugangsdaten oder Kalibrationswerte) oder baut man sich dafür 
besser gleich noch einen I2C-EEPROM mit drauf?

Danke euch!

von Obelix X. (obelix)


Lesenswert?

Ben B. schrieb:
> nd kann man auf dem ESP-Modul etwas Speicher für eigene Variablen
> bekommen, die man gerne dauerhaft speichern möchte (z.B.
> WLAN-Zugangsdaten oder Kalibrationswerte)

https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/storage/nvs_flash.html

Ben B. schrieb:
> Würdest Du einem Arduino- genauso wie ESP-IDF-Anfänger eher raten, auf
> ESP-IDF zu gehen und das zu lernen anstelle Arduino?
>
> Ich hatte mich jetzt für Arduino entschieden, da es dort viele
> Bibliotheken für die beiden Schaltkreise gibt, die ich einsetzen wollte
> (I2C ADC und DAC).

Schau dir mal VS Code + PlatformIO an.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Ben B. schrieb:
> Gibt es einen Unterschied zwischen #include "xxx" und #include <xxx>?

Es sollte, Arduino hält sich nur nicht dran. Ersteres bezieht sich auf 
Includes im Sketch Ordner, das andere durchsucht alle Include Ordner aus 
den Arduino Libs.

Ben B. schrieb:
> Und kann man auf dem ESP-Modul etwas Speicher für eigene Variablen
> bekommen, die man gerne dauerhaft speichern möchte (z.B.
> WLAN-Zugangsdaten oder Kalibrationswerte) oder baut man sich dafür
> besser gleich noch einen I2C-EEPROM mit drauf?

LittleFS wurde schon genannt, da hat man eine Möglichkeit Dateien 
hochzuladen. Für eine Variable geht auch RTC_DATA_ATTR, wenn's mehr sein 
soll ginge auch die EEPROM Library. Randomnerdtutorials hat alles 
anfängerfreundlich erklärt.

Ben B. schrieb:
> Allerdings ist darin wohl nicht nur ein "Image" gespeichert, sondern
> drei - wodurch die für ein Programm maximal nutzbare Größe auf 1,3MByte
> reduziert ist.

Wenn Du in Arduino ein anderes Partition Scheme auswählst hast Du mehr 
Speicher, z.B. huge_app

: Bearbeitet durch User
von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Die Webseiten müssen nicht besonders hübsch aussehen oder bunt animiert
> sein, sie müssen nur zweckdienlich und funktionell sein

Für den Fall kann ich dir die Seite von fips empfehlen.
https://fipsok.de/
Da findest du auch die Möglichkeit, die Site ins FS zu packen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ben B. schrieb:
> Würdest Du einem Arduino- genauso wie ESP-IDF-Anfänger eher raten, auf
> ESP-IDF zu gehen und das zu lernen anstelle Arduino?

Wenn du grknds einigermaßen programmieren kannst würde ich ESP-IDF 
empfehlen. Damit hast du einfach alle Flexibilität.

Ben B. schrieb:
> Ich hatte mich jetzt für Arduino entschieden, da es dort viele
> Bibliotheken für die beiden Schaltkreise gibt, die ich einsetzen wollte
> (I2C ADC und DAC).

Das IDF enthält ziemlich gute Treiber für die ganze interne Peripherie 
des ESP32, damit ist Ansteuerung des I2C, ADC usw kein Problem. IMO ist 
das IDF sogar das am Besten strukturierte und mächtigste unter den 
gängigen Embedded Frameworks. Allerdings sind natürlich keine Treiber 
für externe ICs drin. Da kannst du schauen ob du die extern einbinden 
kannst, oder ggf. einfach selber schreiben, die meisten ADCs o.ä. sind 
da nicht besonders anspruchsvoll.

Ben B. schrieb:
> Zwei Fragen hätte ich noch...
> Gibt es einen Unterschied zwischen #include "xxx" und #include <xxx>

Das ist nicht ESP32 spezifisch sondern Standard C. Spitze Klammern sind 
für Header von Bibliotheken, welche in speziellen dem Compiler 
mitgeteilten Pfaden befinden; Anführungszeichen werden bei Headern des 
selben Projekts genutzt.

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Und kann man auf dem ESP-Modul etwas Speicher für eigene Variablen
> bekommen, die man gerne dauerhaft speichern möchte

Dafür gibt es Preferences im LittleFS.

von Vincent H. (vinci)


Lesenswert?

Steckt in deiner Anwendung irgendeine Echtzeitanforderung 
(~Microsekundenbereich) die gleichzeitig mit dem Web Teil funktionieren 
muss? Weil wenn ja, dann ist weder Arduino noch ein Dateisystem eine 
Option.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Viel zu lesen das ist. Danke euch!

Die Internetseiten werden wirklich nur einfach und auch nicht viele. 
Eine Hauptseite (HTML), einmal CSS, einmal JavaScript und dann noch eine 
oder zwei reine Messwert-Ausgaben (wenn ich mir die Mühe mache JSON, 
ansonsten ohne spezielles Format). Im Wesentlichen spare ich mir damit 
das Display und kann mir mit einem Webserver ein Monitoring bauen.

Als "Bonus für später" hebe ich mir eine Eingabemaske für die WLAN-Daten 
und evtl. eine kleine Benutzerverwaltung bzw. Geräte-Passwort auf.

Die Bibliotheken (für die I2C-Devices) selbst schreiben würde ich evtl. 
machen, wenn ich den ESP32 bzw. dessen Hardware besser kennen würde. Da 
sind aber ein paar Fragen, auf die ich erst noch Antworten finden muss 
bzw. keine Erfahrung habe. Ich weiß z.B. nicht, ob ich das Timing selbst 
erledigen muss wenn mehrere zusammenhängende Bytes über den I2C 
geschickt werden müssen (Messergebnisse) oder ob die Hardware des ESP32 
das selber kann (irgendwelche Puffer).

Da weiß ich auch noch nicht, ob sich die beiden Adafruit-Bibliotheken 
miteinander vertragen, etwa wenn man dem DAC eine Sollwertvorgabe 
schickt und unmittelbar danach einen Messwert vom ADC lesen möchte oder 
anders herum. Also werden dann beide Bus-Aufgaben sauber nacheinander 
ausgeführt oder mischen die sich gegenseitig einmal kräftig durch, so 
daß man das Abarbeiten der ersten Aufgabe selbst überwachen und abwarten 
muss. Und wenn man warten muss (was für das Steuerprogramm nicht 
tragisch wäre), laufen dann andere Aufgaben wie evtl. eine Uhr und WiFi 
sauber weiter oder blockiert sich das... das weiß ich alles noch nicht.

Mit C habe ich leider noch nicht viel gemacht, das ist mein großer Makel 
bei Programmiersprachen. Mit PHP bin ich sehr fit, ich mag die 
Flexibilität... aber das bezeichnen viele als großen Makel von PHP. PHP 
soll ähnlich sein wie C - aber so richtig ähnlich empfinde ich es nicht.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Steckt in deiner Anwendung irgendeine Echtzeitanforderung
> (~Microsekundenbereich) die gleichzeitig mit dem Web Teil
> funktionieren muss?
Nein. Deswegen überlasse ich die Erzeugung von PWM usw. externen 
Schaltkreisen und gebe denen nur mit dem DAC einen Sollwert vor.

Was ich vielleicht brauche, ist eine 25kHz PWM für die Ansteuerung eines 
drehzahlgeregelten Lüfters, die der ESP32 selbst machen müsste. Aber 
wenn die durch WiFi-Aufgaben kurze Glitches bekommt, ist das 
wahrscheinlich egal. Da bin ich noch nicht, weil für eine 
Temperaturregelung bräuchte ich auch einen ADC-Kanal des ESP32 (auf dem 
ADS1115 ist keiner mehr frei). Oder alternativ einen I2C 
Temperatursensor am Kühlkörper.

von Alexander (alecxs)


Lesenswert?

Auf die Wahl der richtigen GPIOs achten 34 35, ADC2 verträgt sich nicht 
mit WiFi.

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Da weiß ich auch noch nicht, ob sich die beiden Adafruit-Bibliotheken
> miteinander vertragen,

Warum sollten die das nicht machen ?
Immerhin bist du als Programmierer für deinen Code verantwortlich.
Also musst du darauf achten, dass alles sauber abläuft.
Ich vermute mal, du siehst da Probleme, wo keine sind.
Und wenn du nur Temperatur messen möchtest, tut es auch ein "OneWire" 
DS18B20.

von Alexander (alecxs)


Lesenswert?

Alexander schrieb:
> Auf die Wahl der richtigen GPIOs achten 34 35, ADC2 verträgt sich nicht
> mit WiFi.

aber das weißt Du ja bereits

Beitrag "Re: ESP32: Wie das beste aus dem ADC herausholen?"

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ja, mit dem ADC des ESP32 habe ich mich schon mal auseinandergesetzt... 
für so'n Freischuss wie 'ne Temperaturmessung reichts, für alles andere 
eher nicht.

> Ich vermute mal, du siehst da Probleme, wo keine sind.
Ehrlich gesagt hoffe ich das. Das ist besser als anders herum, wenn da 
vielleicht ein schwerwiegendes Problem wartet und ich es nicht sehe. Mir 
fehlt halt noch jede Erfahrung mit dem ESP32 und Arduino. Über die 
Hello-Worlds bin ich drüber, nun gehts ans Eingemachte...

von Dieter S. (hotsystems)


Lesenswert?

Dann noch mal den Tipp zum ESP32-S3 WROOM N16R8, der ist sehr 
leistungsstark und läuft bei mir im Dauertestbetrieb mit 433MHz Funk, 
Webseite, UDP, TCP, TFT-Display und Sensor BME280 problemlos.
Und auch in der Arduino IDE programmiert.

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


Lesenswert?

Dieter S. schrieb:

> Dafür gibt es Preferences im LittleFS.

Hat beides nichts miteinander zu tun. Kann man getrennt verwenden. 
Üblicherweise entweder oder.

von Dieter S. (hotsystems)


Lesenswert?

Veit D. schrieb:
> Hat beides nichts miteinander zu tun. Kann man getrennt verwenden.
> Üblicherweise entweder oder.

Ja und nein....man kann auch beides nutzen.

von Christian M. (christian_m280)


Lesenswert?

Dieter S. schrieb:
> Für den Fall kann ich dir die Seite von fips empfehlen.
> https://fipsok.de/

Einige Codes auf dieser Seite sind leider fehlerhaft, manchmal sind es 
kleine Sachen, Einiges habe ich nicht zum Laufen gebracht.

Gruss Chregu

von Dieter S. (hotsystems)


Lesenswert?

Christian M. schrieb:
> Einiges habe ich nicht zum Laufen gebracht.

Das Problem kenne ich, liegt aber sicher nicht an den Codes.

von N. M. (mani)


Lesenswert?

Wenn du beim Webcontent auch noch sparen möchtest kannst du die Dateien 
auch noch  gzippen. Danach die Datei wieder wie das Original benennen 
(z.B. index.html).
Dann musst du noch das Content-Encoding im Header deiner Response 
richtig setzen (gzip). Damit weiß dein Browser das es gepackt ist und 
entpackt es Hintergrund.
Merkt man nichts davon dass es langsamer wäre. Bringt aber gerade bei 
den kleinen Devices auf 2 Arten was:
Content nimmt weniger Platz weg im Flash und wird schneller übertragen 
weil insgesamt weniger Daten.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Traust du dir zu den zu öffnen und dir 16,7MB Flash rein zu löten?

Brauche nur die Bauform die auf dem ESP Modell von dir drauf ist, dann 
schau ich ob ich einen passenden habe.

Bei denen welche ich bisher modifiziert habe war es soic, einen mit 
16,7MB hab ich noch dafür.

Danach kurz mit esptool dran, mit --flash_size detect, passende 
Partitionstabelle vorher Wahlen, funktioniert normalerweise super.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

@kilo

Im Moment warte ich das erstmal ganz entspannt ab. Ich bin immer noch 
beim Wandler zusammenlöten, die Software kommt danach.

Die Internetseiten werden wie gesagt erstmal nicht besonders 
umfangreich. Paar Kilobyte Text. Das wird erst mehr wenn man die 
WLAN-Zugangsdaten variabel macht oder eine konfiguierbare 
Benutzerverwaltung einbaut. Dann muss man sich plötzlich mit möglichen 
Fehleingaben usw. herumschlagen und das wird deutlich komplexer, als nur 
die Messdaten übers WLAN verfügbar zu machen.

Wenn man Änderungen an dem Modul vornimmt, wie beispielsweise die 
Flash-Konfiguration ändert, so daß man die halbe Flash-Größe für die 
Applikation benutzen kann (kein OTA-Update), kommt die Arduino-Umgebung 
mit der geänderten Größe klar?

Das Ding aufmachen und den Flash tauschen würde ich gerne vermeiden, das 
wäre wirklich die aller letzte Option. Wahrscheinlich kaufe ich vorher 
ein anderes Modul mit großem Flash. Ich denke aber, so umfangreich wird 
die Software für das Ding nicht - evtl. passt alles in die 1,3Mbyte und 
mit 2Mbyte Platz sollte es auf jeden Fall reichen.

von Kilo S. (kilo_s)


Lesenswert?

Ben B. schrieb:
> kommt die Arduino-Umgebung mit der geänderten Größe klar?

Bisher hab ich keine klagen von meinem Kollegen gehört, für den ich ein 
paar auf 16MB umgebaut habe.

von Alexander (alecxs)


Lesenswert?

Ben B. schrieb:
> kommt die Arduino-Umgebung mit der geänderten Größe klar?

Arduino IDE verlässt sich ganz auf das ESP32 Arduino Framework. Was auch 
immer in boards.txt drin steht wird gemacht.

Du sagtest Du hast ein NodeMCU-32S deswegen kannst Du das nicht wissen, 
aber es ist nur ein Klick. Wenn Du deine Boardauswahl änderst auf "ESP32 
Dev Module" (die alten Einträge soll man gar nicht mehr nutzen) dann 
siehst Du dann auch das "Partition Scheme" Drop-down Menü. Dort wählst 
Du dann den entsprechenden Eintrag aus der boards.txt aus. Wenn Dir 
"Huge App" nicht reicht gibt's auch den Eintrag "Custom".

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Okay, das mit dem Custom-Board klingt plausibel. Übernimmt die 
Arduino-IDE beim Übertragen des Codes die Änderungen, also kann die das 
Board passend umkonfiguieren wie man es dort einstellt?

Was mir dabei aufgefallen ist: "Events" und "Arduino" läuft beides auf 
Core 1. Macht es Sinn, eines von beiden auf Core 0 umzustellen oder 
passt das so wie es ist am besten?

von Alexander (alecxs)


Lesenswert?

Arduino ist keine STM32CubeIDE da wird nichts boardspezifisches im Code 
hinterlegt. Man kann das Board vor problemlos ändern, kompiliert halt 
beim ersten Mal bisschen länger.

Ich nutze xTaskCreatePinnedToCore() und weise den Core dem 
entsprechenden Task explizit zu, um die IDE Einstellungen habe ich mich 
nie gekümmert.

Das sind so schöne Anfängerfragen, ich freue mich dass ich auch mal 
helfen kann.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Tja, so ist das halt, aber freut mich wenn Dich das freut.

Ich denke nicht, daß ich besonders viel Rechenleistung brauche, aber ich 
weiß auch nicht wie schlau der Compiler ist, den die Arduino-IDE 
verwendet. Oder ob der Core 0 beim ESP32 am besten frei gehalten werden 
sollte, damit der sich um den WiFi-Kram kümmern kann und Core 1 macht 
den Rest.

Oder eben wie dieser Flash organisiert sein muss, ob man da problemlos 
eines dieser Dateisysteme "aktivieren" kann, was die Arduino-IDE so 
anbietet (fatfs?), ob die Arduino-IDE das passend ändert oder ob man das 
vorher machen muss, bevor man das Modul mit der Arduino-IDE verwendet. 
Ich mag das Ding auch nicht schrotten, etwa daß man es nicht mehr 
flashen kann oder der ESP32 nicht mehr von dem Flash starten kann. Da 
hat jeder Controller so seine Stolperfallen und es ist schade, daß man 
die nicht alle kennt bevor man hineingetappt ist.

von Alexander (alecxs)


Lesenswert?

Das mit dem Wifi kann gut möglich sein.

Das Dateisystem FatFS hab ich mir noch nicht angeguckt, benötigt 
anscheinend 4096 Bytes für das Wear Leveling am Start der Partition. 
Würde erstmal mit LittleFS (ex SPIFFS) anfangen, dafür gibt es dann auch 
für die IDE 2 wieder ein Add-on zum Dateien hochladen ("Tools" -> "ESP32 
Sketch Data Upload" funktioniert nicht mehr, da kein Java)

https://randomnerdtutorials.com/arduino-ide-2-install-esp32-littlefs

Das ist aber nur relevant wenn du Dateien von der IDE hochladen willst. 
Dazu einen Order "data" anlegen, alles was da drin liegt kann mit dem 
Add-on einmalig auf die Partition kopiert werden, und bleibt dann auch 
dort bis Du es wieder löschst.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Eigentlich ist mir das Dateisystem "egal", eigentlich brauche ich keines 
und ich möchte auch aus der Applikation heraus keine häufigen 
Schreibzugriffe auf den Flash machen.

Was ich evtl. später brauche wäre vielleicht 1kByte Platz, um sowas wie 
die WLAN Zugangsdaten oder ein paar Benutzer mit Passwort zu speichern. 
Ich weiß nicht, ob man diese "paar Bytes" ohne großen Aufwand direkt auf 
dem ESP32-Modul bekommt - wenn nicht, baue ich mir auch noch ein kleines 
EEPROM an den I2C.

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> baue ich mir auch noch ein kleines EEPROM an den I2C.

Ich hatte dir schon mal den Tipp gegeben, Preferences dafür zu nutzen. 
Oder liest du nicht das was dir geschrieben wird ?
Da ist deutlich einfacher, als mit einem EEprom.

von Alexander (alecxs)


Lesenswert?

Hier noch mal das Beispiel für eine Textdatei (siehe Link)
1
#include "LittleFS.h"
2
void setup() {
3
  Serial.begin(115200);
4
  LittleFS.begin();
5
}
6
void loop() {
7
  File file = LittleFS.open("/test_example.txt", "r");
8
  Serial.println("File Content:");
9
  while(file.available()){
10
    Serial.write(file.read());
11
  }
12
  file.close();
13
}
Der einzige "Aufwand" den Du hast ist das Add-on erstmalig für Deine 
Arduino IDE einzurichten. Um mehr brauchst Du dich nicht zu kümmern, 
Parition usw. geschieht alles automatisch. Also weniger denken, einfach 
machen, so wie sich das für einen Arduino-Nutzer gehört.

: Bearbeitet durch User
von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Eigentlich ist mir das Dateisystem "egal"

Und wenn du LittleFS auf dem ESP32 nutzt, kannst du darin deine Website 
ablegen und  musst nicht den kompletten ESP32 flashen, wenn da mal eine 
Änderung an der Seite gemacht werden muss.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Ich hatte dir schon mal den Tipp gegeben, Preferences dafür zu nutzen.
> Oder liest du nicht das was dir geschrieben wird ?
> Da ist deutlich einfacher, als mit einem EEprom.
Ich lese es, aber für mich sind das alles Böhmische Dörfer, die ich 
natürlich gerne vermeiden möchte. Bzw. ich habe kein Problem damit, 
Neues auszuprobieren, aber immer etwas Respekt davor, daß es nicht 
funktioniert. Es dauert halt, Vertrauen in eine neue 
Entwicklungsumgebung zu finden (die Arduino IDE, die ich für den ESP32 
brauche). Wenn sich beispielsweise nach ein paar Stunden Betrieb der 
I2C-Bus festfährt, weil man inkompatible oder nicht fehlerfreie 
Bibliotheken oder sowas benutzt hat, dann habe ich damit ein großes 
Problem. Das Gleiche mit irgendwelchen mir derzeit noch völlig 
unbekannten Dateisystemen auf dem Flash. Wenn ich da irgendwas 
einstelle, wodurch das ESP32-Modul nicht mehr startet und nicht mehr 
geflasht werden kann (z.B. beim AVR den Bootloader gekillt oder falsche 
Fuses gesetzt), dann habe ich nichts erreicht.

Alex, welche Bibliothek würdest Du für littleFS empfehlen und welche 
Einstellungen braucht das ESP32-Modul dafür?

von Alexander (alecxs)


Lesenswert?

Lass mich gucken... gar keine. die LittleFS Library von lorol ist 
bereits im Framework integriert. Du musst nur einen "data" Ordner im 
Sketch Verzeichnis erstellen und Deine Dateien da hinein legen.

Für das Add-on kopierst Du die Datei 
"arduino-littlefs-upload-1.5.4.vsix" in den %UserProfile%\\.arduinoIDE 
Ordner "plugins" (vorher anlegen)

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

: Bearbeitet durch User
Beitrag #7876199 wurde vom Autor gelöscht.
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Hmpf, lapsus calami. Aber noch selbst gefunden.

Welche Einstellung sollte man dann beim 4Mbyte Flash wählen wenn man 
LittleFS verwenden will? Ist die originale Einstellung mit den für die 
Applikation  verfügbaren 1,2MByte und SPIFFS dafür okay oder muss man da 
was ändern?

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
>> (z.B. beim AVR den Bootloader gekillt oder falsche
> Fuses gesetzt), dann habe ich nichts erreicht.

Das ist auch völlig etwas anderes.
Und ja, du hast etwas dazu gelernt.
Ich hatte dir auch schon den Link von fips gepostet. Da wird das 
LittleFS sehr komfortabel gehandhabt. Direkt aus dem Sketch heraus und 
mit einer passenden Webseite.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Und ja, du hast etwas dazu gelernt.
Ich gebe mir zumindest Mühe, aber es fühlt sich noch nicht so an.

Die meisten Sachen sind leider viel mehr als ich brauche und dadurch 
kostet es viel Zeit, diese gut zu verstehen - um am Ende das bißchen, 
was ich brauche, herauszunehmen. Versteh das bitte nicht als Angriff 
oder Unfreundlichkeit - aber wenn ich zur Versorgung einer 60W Glühlampe 
ein Atomkraftwerk bauen muss, was problemlos auch 1600MW schafft, dann 
macht das am Ende zwar die Glühlampe hell, aber ist wenig zweckmäßig. 
Ich brauche wirklich keine großen Internetseiten im Flash oder einen 
Dateimanager in der Applikation, sondern wirklich nur ein Kilobyte an 
beschreibbarem Speicher...

Auf dem ESP32 habe ich sowieso nichts wie PHP oder so, sondern ich muss 
die HTTP-Requests komplett selbst verarbeiten und die HTML-Antwort 
zusammensetzen. Da nutzt es mir doch nichts, z.B. Scripts (wie x.php) in 
einem Dateisystem abzulegen... oder übersehe ich was?

Am Ende landen alle HTML-Seiten (wenn man diese denn so nennen möchte) 
sowieso im Code weil sie durch diesen dynamisch erzeugt werden und das 
einzige, was ich von einem Dateisystem am Ende nutze ist, eine kleine 
Datei einmal beim einzulesen und ein paar Variablen damit zu laden und 
diese Datei bei Änderungen ins Dateisystem zu speichern. Mehr nicht.

von N. M. (mani)


Lesenswert?

Ben B. schrieb:
> Die meisten Sachen sind leider viel mehr als ich brauche

Das mag zwar sein, trotzdem ist es oft einfacher fertiges zu benutzen 
als etwas genau passendes für seinen Anwendungsfall selbst zu schreiben.
Dann kann man eben deutlich mehr als man braucht. Was soll's. Solange 
genug Ressourcen vorhanden sind ja kein Problem.

Die oben genannten Libraries sind im Normalfall sehr leicht zu bedienen.

Ben B. schrieb:
> Auf dem ESP32 habe ich sowieso nichts wie PHP

Das stimmt, aber wer will heute überhaupt noch PHP.

Ben B. schrieb:
> sondern ich muss die HTTP-Requests komplett selbst verarbeiten und die
> HTML-Antwort zusammensetzen.

Das eben nicht. Im Normalfall ist das HTML komplett statisch und wird in 
keinster Weise modifiziert bevor es ausgeliefert wird. Die dynamischen 
Sachen wie aktuelle Prozesswerte, Daten werden dann danach dynamisch 
abgerufen.
Das macht das Filesystem eben gerade so hilfreich. Um die Auslieferung 
der statischen Files muss man sich nicht mehr kümmern. Nur noch um die 
dynamischen Daten.

Ben B. schrieb:
> Am Ende landen alle HTML-Seiten (wenn man diese denn so nennen möchte)
> sowieso im Code

Im Flash.

Ben B. schrieb:
> weil sie durch diesen dynamisch erzeugt werden

Nö, siehe oben.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

>> sondern ich muss die HTTP-Requests komplett selbst verarbeiten
>> und die HTML-Antwort zusammensetzen.
> Das eben nicht. Im Normalfall ist das HTML komplett statisch
> und wird in keinster Weise modifiziert bevor es ausgeliefert
> wird. Die dynamischen Sachen wie aktuelle Prozesswerte, Daten
> werden dann danach dynamisch abgerufen.
Dafür brauche ich maximal drei Dateien. Man könnte CSS und JS auch mit 
in die Landing Page packen. Etwas unübersichtlicher, aber dann ist es 
nur noch eine einzige Datei. Dafür gleich ein ganzes Filesystem empfinde 
ich als Overkill.

Spätestens bei der Erzeugung der Antwort, die die Messwerte beinhaltet, 
bin ich doch wieder bei dynamischem HTML/HTTP (bzw. es ist für die 
Technik egal, ob man dort HTML oder irgend ein anderes Dateiformat 
überträgt) und muss das im Code erledigen.

>> Auf dem ESP32 habe ich sowieso nichts wie PHP
> Das stimmt, aber wer will heute überhaupt noch PHP.
Anderes Thema. Ich mag PHP und jede andere Programmiersprache
hätte ich genau so nicht auf dem ESP zur Verfügung.

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Die meisten Sachen sind leider viel mehr als ich brauche

Ja, da kann man sich das benötigte raussuchen.
Aber ok, ich kann dich verstehen, nur wie schon geschrieben wurde, "das 
Rad nochmals zu erfinden", ist sicher mühevoll und zeitraubend.
Dann lieber auf fertige Module setzen und die anpassen.

von N. M. (mani)


Lesenswert?

Ben B. schrieb:
> Etwas unübersichtlicher, aber dann ist es nur noch eine einzige Datei.
> Dafür gleich ein ganzes Filesystem empfinde ich als Overkill.

Ja, wie gesagt. Wenn man etwas fertiges hat mache ich mir erst Gedanken 
wenn es von der Performance oder dem Platz ein Problem gibt. Ansonsten 
nehme ich gerne Standard Dinge. Wenn morgen doch noch 28 Files dazu 
kommen musst du dann nichts mehr ändern.

Ben B. schrieb:
> Dafür brauche ich maximal drei Dateien. Man könnte CSS und JS auch mit
> in die Landing Page packen. Etwas unübersichtlicher, aber dann ist es
> nur noch eine einzige Datei.

Ja klar, kann man machen. Die Argumente dagegen hast du ja schon selbst 
gebracht.

Ben B. schrieb:
> Spätestens bei der Erzeugung der Antwort, die die Messwerte beinhaltet,
> bin ich doch wieder bei dynamischem HTML/HTTP

Ne, die HTML kann doch komplett statisch sein. Sie wird einmalig an den 
Client(Browser) ausgeliefert. In dieser Seite steht dann ein bisschen 
Javascript, das dann einen Fetch/GET auf die eigentlichen Daten macht.
Zurück kommt dann ein Mini Datum (z.B. etwas JSON). Das bekommt dann 
dein Fetch/GET Request auf deinen Client, der sucht sich das richtige 
DOM Element raus und ersetzt diese kleine Stelle mit den aktuellen 
Daten.
Wenn du das immer im HTML patchen würdest, hättest du zum einen einen 
ziemlichen Aufwand im uC weil du ständig String Ersetzung machen musst 
und zweitens weil du ständig die Seite KOMPLETT neu ausliefern musst.

Ben B. schrieb:
> Anderes Thema. Ich mag PHP und jede andere Programmiersprache
> hätte ich genau so nicht auf dem ESP zur Verfügung.

Sollte nicht abwertend sein, aber meinem Empfinden nach wird es immer 
weniger verwendet. Aber auch da gilt... Wenn man damit ins Ziel kommt.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Mir ist schon klar wie das funktionieren soll und ich hatte das auch so 
geplant - aber ich komme nicht drum herum, diese JSON-Ausgabe (falls man 
sich die Mühe mit JSON macht und nicht einfach eigene Symbole verwendet) 
im Code zusammenzubasteln.

Wenn man dann später noch sowas wie eine kleine Benutzerverwaltung 
einbaut (wo man die Fehleingaben der DAUs abfangen muss), dann wird das 
noch viel schlimmer.

von N. M. (mani)


Lesenswert?

Ben B. schrieb:
> Mir ist schon klar wie das funktionieren soll

Hm OK. Dann verstehe ich nicht warum du mehrmals davon redest dass man 
da dynamisch HTML Dateien/Daten auf dem Controller zusammenbauen muss.

Ben B. schrieb:
> diese JSON-Ausgabe (falls man sich die Mühe mit JSON macht und nicht
> einfach eigene Symbole verwendet) im Code zusammenzubasteln

Wenn der Server nur liefern muss ist das billigste Technik. Ich habe das 
vor kurzem mit einem Cortex M0 gemacht. Selbst der bekommt das mit 3-6ms 
Response Time hin. Da kotzt der Browser! Zugegebenermaßen ohne Arduino 
Framework.

Im einfachsten Fall sieht das so in der Art aus:
1
snprintf(pReturn,50,"{\"ts\":%d,\"adc\":[%d,%d,%d]}",ts,adc1,adc2,adc3);

JSON hat hat halt den Vorteil dass es dein Browser ohne großes zutun in 
ein Objekt parst.

Ben B. schrieb:
> Wenn man dann später noch sowas wie eine kleine Benutzerverwaltung
> einbaut (wo man die Fehleingaben der DAUs abfangen muss), dann wird das
> noch viel schlimmer.

Wenn du nicht damit rechnen musst dass einer mutwillig Falscheingaben 
macht sondern nur versehentliche, dann kannst du das auch Clientseitig 
im HTML Form abfangen. Macht es für den Controller einfacher.
Wenn du das auch noch ausschließen möchtest gibt es sehr kompakte Header 
only JSON Libraries die das für dich abfangen. Stichwort ArduinoJSON 
oder nlohmann JSON. Die checken nicht nur die Validität des JSON selbst 
sondern mit Custom Konverter oder beim zuweisen (je nach Librarie) auch 
den Inhalt jedes einzelnen Elements.

von Kilo S. (kilo_s)


Lesenswert?

Ben B. schrieb:
> Anderes Thema. Ich mag PHP

Ich auch.
C/C++ ist vom Syntax doch Recht ähnlich, daher finde ich fällt das lesen 
des Code selbst relativ leicht.

Schwer wird es bei der, ich nenne es mal "Abstraktion", hier haben wir 
keine "einheitliche" Referenz wie in PHP.
STM ist da auch nicht immer der gleiche STM, wie ich bei den Puya aus 
den Vapes lernen durfte.
So manches Beispiel läuft erst wenn du den MCU echt "kennenlernst".

Der Arduino Kram mit den "offiziellen" und gut unterstützten Boards ist 
eigentlich echt unkompliziert, learning by doing ohne "tiefe" Details. 
Wirklich einfach, damit klappt bei mir meist in kurzer Zeit an Hand von 
bearbeiteten Beispielen alles mögliche. Da ist auch der Sprachgebrauch 
wie bei PHP, dank des Framework Recht einheitlich.

Du darfst nur nicht im Ablauf denken wie bei PHP, den Fehler mache ich 
noch häufig, das klappt nicht gut, immer wenn ich in diese Muster 
verfalle wird es instabil oder liefert völligen schwachfug an Ergebniss.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Im einfachsten Fall sieht das so in der Art aus: [..]
Plus den HTTP-Header.

> JSON hat hat halt den Vorteil dass es dein Browser
> ohne großes zutun in ein Objekt parst.
Wenn man die Symbole passend wählt, so daß sie nur ein einziges Mal in 
den Daten vorkommen dürfen, sollte man da auch mit ein wenig JavaScript 
hinbekommen, das sehe ich nicht als Problem.

JSON hätte lediglich den Vorteil, daß man es in irgendwelche 
Heim-Automatisierung einbinden könnte, aber sowas verwende ich im Moment 
nicht und eine Weitergabe des Projekts ist derzeit nicht geplant.

> Wenn du nicht damit rechnen musst dass einer mutwillig
> Falscheingaben macht sondern nur versehentliche, dann
> kannst du das auch Clientseitig im HTML Form abfangen.
Wenn, dann mache ich das richtig. Man weiß nie,
wann ein DAU oder Scriptkiddie vorbeikommt.

So, und nun muss ich nochmal ein wenig was über das LittleFS nachfragen.

Angenommen ich will das benutzen, um sowas wie Benutzerdaten zu 
speichern - wie richte ich das ein, also die Größe des Dateisystems und 
in welchem Bereich der Flash-Partitionen wird das dann gespeichert? So 
wie ich das sehe, muss man das ja auch formatieren. Wenn ich dann 
einfach eine oder mehrere kleine Dateien aus der Applikation heraus auf 
dieses Dateisystem schreiben (und natürlich wieder von da lesen) kann, 
reicht mir das und löst das Problem, daß ich später evtl. etwas 
EEPROM-Speicher bräuchte.

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> LittleFS nachfragen.

Dafür ist Preferences besser geeignet, hatte ich auch schon geschrieben.
Das wird aber auch automatisch im LittleFS abgelegt.

von Alexander (alecxs)


Lesenswert?

Ben B. schrieb:
> So, und nun muss ich nochmal ein wenig was über das LittleFS nachfragen.

Hab Dir eine PM geschickt heute morgen, ist die nicht angekommen?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Bitte um Entschuldigung, aber könnt ihr's mir nicht "einfach" so 
erklären, daß ich es auch verstehe? :)

"Preferences" in diesem Zusammenhang sagt mir schon wieder gar nichts 
und wenn das seine Daten in diesem LittleFS ablegen möchte, dann muß ich 
das LittleFS dafür trotzdem zum Laufen bekommen - und möglichst gut 
verstehen. Die Webseite von fips habe ich mir nochmal angeschaut, sowie 
den alten Thread. Wahrscheinlich würde ich diese Dateiverwaltung von 
fips zum Laufen bekommen, (vorausgesetzt, die Arduino IDE richtet die 
Voraussetzungen für LittleFS automatisch ein), aber dann weiß ich immer 
noch nicht, wo diese Daten hinterher tatsächlich auf dem Flash liegen, 
bzw. von welcher Partition auf dem Flash der Platzbedarf weggeht.

Edit @Alex:
PNs kommen bei mir leider nie an, entschuldige.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Ben B. schrieb:
> PNs kommen bei mir leider nie an, entschuldige.

dann halt öffentlich
https://www.youtube.com/watch?v=22AP0pmcsJE

: Bearbeitet durch User
von N. M. (mani)


Lesenswert?

Ben B. schrieb:
> Plus den HTTP-Header.

Machen dir die bekannten Libraries bei den Dateien im Filesystem anhand 
der Dateiendung automatisch mit. Bei den dynamischen Requests ist es 
eine Zeile mehr:
1
snprintf(pReturn,50,"{\"ts\":%d,\"adc\":[%d,%d,%d]}",ts,adc1,adc2,adc3)
2
request->send(200, "application/json", pReturn);
Eine weitere Zeile würde noch beim Komprimieren dazu kommen. Vielleicht 
gibt es aber sogar eine Methode wo man alles auf einmal machen kann. Hab 
ich nicht nachgesehen.

Ben B. schrieb:
> Wenn man die Symbole passend wählt, so daß sie nur ein einziges Mal in
> den Daten vorkommen dürfen, sollte man da auch mit ein wenig JavaScript
> hinbekommen, das sehe ich nicht als Problem.

Wenn du selbst Parsen möchtest. Feel free.

Ben B. schrieb:
> JSON hätte lediglich den Vorteil, daß man es in irgendwelche
> Heim-Automatisierung einbinden könnte, aber sowas verwende ich im Moment
> nicht und eine Weitergabe des Projekts ist derzeit nicht geplant.

Die HA können auch nicht nur JSON sondern diverse bekannte Formate. Nach 
der Logik kannst du den gleichen Parser was du in Javascript geschrieben 
hast einfach nochmal schreiben ;-) IOBroker ist glaube ich JS. Da 
könntest du den sogar nochmal verwenden :-D

Ich sehe den größten Vorteil in JSON darin, dass es ein weit 
verbreiteter Standard ist. Außerdem das JSON in vielen Sprachen bereits 
standardmäßig unterstützt wird. Und dass du nahezu beliebige Objekte 
abbilden kannst ohne selbst etwas programmieren zu müssen.

Ben B. schrieb:
> Wenn, dann mache ich das richtig. Man weiß nie,
> wann ein DAU oder Scriptkiddie vorbeikommt.

Eine Lösung dazu hatte ich ja schon genannt.

Aber ich glaube ich Klinke mich an der Stelle aus. Ist mir zu 
anstrengend. Bin ja kein Zeuge Jehovas der dir etwas aufschwatzen muss.

Viel Erfolg mit dem Projekt

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Preferences" in diesem Zusammenhang sagt mir schon wieder gar nichts
> und wenn das seine Daten in diesem LittleFS ablegen möchte, dann muß ich
> das LittleFS dafür trotzdem zum Laufen bekommen

Preferences ist eine Libraty, die per Library Manager in der IDE 
installiert wird. Die Verwendung ist sehr einfach und du musst dazu 
LittleFS nicht installieren, die Nutzung passiert im Hintergrund, ohne 
dein Zutun.

Hier eine gute Beschreibung:
https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Achso, eine Library. Okay. Weißt Du auch
die Antworten zu meinen restlichen LittleFS-Fragen?

>> [DAU-Formular-Eingabefehler]
> Eine Lösung dazu hatte ich ja schon genannt.
Jain. Wenn ich mich vor manipulierten Anfragen schützen möchte, bleibt 
nichts anderes übrig, als die Eingaben auf dem ESP32 zu überprüfen.

> Aber ich glaube ich Klinke mich an der Stelle aus.
> Ist mir zu anstrengend.
Hehe. Konzept- und Arduino-Anfängerfragen. Sorry dafür. :)

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Wahrscheinlich würde ich diese Dateiverwaltung von
> fips zum Laufen bekommen, (vorausgesetzt, die Arduino IDE richtet die
> Voraussetzungen für LittleFS automatisch ein), aber dann weiß ich immer
> noch nicht, wo diese Daten hinterher tatsächlich auf dem Flash liegen,
> bzw. von welcher Partition auf dem Flash der Platzbedarf weggeht.

Wenn du die Beispiele von fips (Dateimanager) nutzt, dann wird LittleFS 
auf dem ESP32 im eingestellten Filesystem (FS) eingerichtet. Das 
wiederum hängt von deinen Einstellungen in der IDE ab.
Je nachdem wie du das Partitionschema konfiguriert hast landet es im 
"spiffs", heute aktuell LittleFS.

von Alexander (alecxs)


Lesenswert?

Du hast doch nun schon eine Anleitung bekommen, diese besteht aus drei 
Schritten und einem Beispielcode - Addon installieren - (lokalen) Ordner 
für die Dateien anlegen - Ordner hochladen. Fertig.

Alexander schrieb:
> https://randomnerdtutorials.com/arduino-ide-2-install-esp32-littlefs

Es ist standardmäßig eine SPIFFS Partition voreingestellt. Diese wird 
für LittleFS verwendet. Wenn Du die Adresse wissen willst schau in die 
Partitionstabelle. In der default.csv ist die an Adresse 0x290000 und 
Größe 0x160000 (1408 kB), in der huge_app.csv Adresse 0x310000 mit Größe 
0xE0000 (896kB). Die Partition wird beim flashen nicht überschrieben.

Die csv Dateien findest Du unter
1
%UserProfile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\tools\partitions
Ich weiß aber nicht warum Dich das interessiert, Du wählst in der IDE 
das Paritionsschema aus und fertig. Zu sehen bei 12:24 min.
https://www.youtube.com/watch?v=22AP0pmcsJE&t=744s

Obelix X. schrieb:
> 
https://forum.arduino.cc/t/brauche-hilfe-bei-der-partitiontabelle-fuer-meinen-esp32/1205790

TMI (Trotzdem der Hinweis wenn Du auf Handarbeit stehst kannst Du 
natürlich eine partitions.csv in den Sketch Ordner legen und "custom" 
auswählen. Nur der Größencheck stimmt dann nicht mehr, das haben die 
einfach nicht hingekriegt. Könnte man aber noch fixen.)

Wenn Du das nachgemacht hast wie im Video, dann sind Deine Fragen 
beantwortet. Ich konnte leider nur 15 min hochladen, 14 min davon sind 
Wartezeit wo die Arduino IDE rödelt. Die Tastenkombination für das 
Prompt ist [Ctrl] + [Shift] + [P] und zum flashen muss man den Boot 
Knopf drücken. Serial baud rate auf 115200 reduzieren wenns nicht 
klappt. Bei Problemen mit dem COM Port IDE neu starten. Serial Monitor 
muss geschlossen sein.

Alexander schrieb:
> Der einzige "Aufwand" den Du hast ist das Add-on erstmalig für Deine
> Arduino IDE einzurichten. Um mehr brauchst Du dich nicht zu kümmern,
> Partition usw. geschieht alles automatisch.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Okay, ich danke Dir für Deine Mühe.

Also benutzt das LittleFS die komplette Größe dieser SPIFFS-Partition. 
Spricht irgendwas dagegen, vorerst nicht auf Huge App zu wechseln, 
sondern die Default-Lösung beizubehalten? Ich glaube zwar nicht, daß ich 
OTA brauche, aber im Moment habe ich auch noch keine 
Speicherplatz-Probleme.

von Alexander (alecxs)


Lesenswert?

Mit Arduino 1.8.19 hab ich durch ein Update der ESP32 Board Plattform 
mal die 1310720 bytes überschritten. Durch ein Downgrade auf Version 
2.0.13 hat es dann wieder gepasst. Damals hatte ich auch das NodeMCU-32s 
ausgewählt und nicht gewusst dass man Partitionsschema einfach über 
einen Klick auswählen kann. Ich hatte auch festgestellt unter Linux 
kompiliert es schlanker, während es unter Windows jede Header Datei 
mitkompiliert selbst wenn diese im Code gar nicht genutzt werden. Wie 
sich das mit der Arduino IDE 2.3.x unter Linux verhält weiß ich nicht.

Ich hab nur ein paar mp3 Dateien im LittleFS. OTA über BLE steht bei mir 
noch auf der todo Liste. Ich werde mir aber erstmal Preferences 
anschauen, brauche ich nämlich auch gerade. Die Random Nerd Tutorials 
haben mir bisher immer geholfen.

von Dieter S. (hotsystems)


Lesenswert?

Ben B. schrieb:
> Ich glaube zwar nicht, daß ich OTA brauche,

Und genau OTA macht den Vorteil aus.
Da lassen sich die Projekte jederzeit aus der "Ferne" aktualisieren, 
ohne die Controller umständlich auszubauen. Wenn du das erstmal genutzt 
hast, möchtest du es nicht mehr vermissen.

Und auch dafür gibt es bei fips sehr gute Beispiele.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Mit OTA beschäftige ich mich ggf. wenn es soweit ist. Das läuft im 
Moment unter "rein sportliche Herausforderung". Aktuell ist das ein 
NodeMCU-32S Board, da wird USB reichen wenn mal ein Update fällig sein 
sollte. Es ist auch keine Serienproduktion meines Solar-Laders 
geplant... es würde nur wenig Sinn machen, zu versuchen, aus Deutschland 
heraus mit den Chinesen mithalten zu wollen.

Kann man sich eigentlich eine Partitionstabelle komplett selbst bauen 
oder müssen da bestimmte Größen eingehalten werden, etwa für wear 
leveling oder so? Könnte man die 4MB vielleicht so 47% Applikation, 47% 
OTA und 6% SPIFFS aufteilen?

Edit:
Alex, was mir bei Deinem Video aufgefallen ist, was hast Du da für einen 
Computer verwendet? Läuft die Arduino-Umgebung wirklich so langsam? 
Irgendwie bin ich ja schon wieder froh, daß ich dafür eigentlich 'ne 
Spiele-Kiste verwendet habe und der Ryzen 3800X ist bei der Bedienung 
deutlich schneller. Auch wenn das Compilieren teilweise lange dauert 
(WiFi.h scheint riesig zu sein).

Naja, ich baue erstmal den Leistungsteil weiter.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Kannst Du machen, es muss aber das Alignment von 0x1000 eingehalten 
werden.

Den Computer hab ich vor 6 Jahren für 10 Eur gekauft. Zu sehen bei 7:50 
min. Da ist kürzlich extra für Arduino Windows 10 draufgekommen. Hab 
mich lange dagegen gesträubt. Also keine Sorge, langsamer wirds nicht.

https://www.youtube.com/watch?v=22AP0pmcsJE&t=468s

Alexander schrieb:
> 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

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Kannst Du machen, es muss aber das Alignment
> von 0x1000 eingehalten werden.
Na das klingt doch schon mal klasse, damit sollte der 4Mbyte Flash auf 
jeden Fall reichen.

> Den Computer hab ich vor 6 Jahren für 10 Eur gekauft.
Gut, in dieser Hinsicht ist mein Ryzen raus.

von Alexander (alecxs)


Lesenswert?

Schau Dir noch mal die Hinweise zu den Pins an, und schau dass Du in der 
Hardware ggf. Jumper einbaust falls Du irgendwo einen Pin mit Pull-Down 
auf GND legst oder in Benutzung haben solltest welcher für das Flashen 
bzw. den Bootloader eine Rolle spielt. Sonst kann es passieren Du musst 
das Board zum flashen immer erst von der Hardware trennen. 
Anfängerfehler.

https://randomnerdtutorials.com/esp32-pinout-reference-gpios

: Bearbeitet durch User
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.