Forum: Mikrocontroller und Digitale Elektronik ESP Webserver - Dateien listen


von Dieter R. (dieter_r)


Lesenswert?

Hallo zusammen,

ich betreibe einen ESP8266 mit Webserver (ESP8266WebServer.h), primär 
als Lichtdimmer. Ich kann Dateien vom Webserver herunterladen bzw. 
anzeigen (deren Namen ich kenne), und per html-Upload auch Dateien auf 
das SPIFFS hochladen. Soweit so klar.

Gibt es nun eine Möglichkeit mir anzeigen zu lassen, welche Dateien ich 
denn hochgeladen habe bzw. alle Dateien auf dem ESP zu listen? Ich komme 
da irgendwie nicht weiter.

Gruß,
Dieter

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Wenn du Upload und Download, sowie eine Fernsteuerung programmiert hast, 
dann weißt du auch, wie man eine Seite programmiert, die Dateien 
auflistet.

Ich vermute, dass du einfach etwas zusammen kopiert hast, ohne es zu 
verstehen. Falls das stimmt, dann lies die Doku zur deinem Arduino 
Plugin und natürlich auch die Doku zu Arduino selbst. Und natürlich 
musst Du Dich auch mit HTML beschäftigen, zum Beispiel auf selfhtml.org

Falls du eher das Gefühl hast, zu wissen, was du da tust, dann stelle 
eine konkretere Frage und zeige einen minimalen Quelltext, der dein 
Problem demonstriert.

von Vka (Gast)


Lesenswert?

Über HTTP? Dazu musst du dann eine HTML Seite erzeugen die eine 
Auflistung der Dateien im Dateisystem enthält.
Irgendwie so ähnlich: https://www.esp8266.com/viewtopic.php?t=8459

Andere Frage: Wieso möchte man aus einem Dimmer eine Dateiablage machen?

von Dieter R. (dieter_r)


Lesenswert?

@Stefan: Ja, ich habe Dinge zusammenkopiert (und modifiziert) die ich 
nicht vollständig verstanden habe. Und ich habe mir nicht zu jedem Modul 
das ich verwendet habe, die vollständige Doku gelesen - auch weil ich 
diese auch wohl nicht 100% verstehen würde. Nun denn, wenn du diese 
Forderung für alle Arduinocoder - ich sage bewusst nicht Programmierer - 
aufstellst ist das deine Sache.

Und, ja, meine html-Kenntnisse sind nicht besser. Viel über trial & 
error eben. Leider ist die Frage nach Quelltext aber nicht hilfreich - 
ich habe ja keinen, was ja das Problem ist. Und der Code des Arduinos 
ist hier wenig hilfreich meine ich.

@Vka: Danke für den Hinweis. Ich werde mich diesbezüglich mal schlau 
machen.

Nein, keine Dateiablage. Das Problem ist, der Dimmer ist im Betrieb, ich 
habe testweise html-code und Parameterfiles hochgeladen zur 
Dimmersteuerung. Tja, leider weiß ich nicht mehr was alles :(

von Stefan F. (Gast)


Lesenswert?

Dieter R. schrieb:
> Ich habe mir nicht zu jedem Modul
> das ich verwendet habe, die vollständige Doku gelesen - auch weil ich
> diese auch wohl nicht 100% verstehen würde. Nun denn, wenn du diese
> Forderung für alle Arduinocoder - ich sage bewusst nicht Programmierer -
> aufstellst ist das deine Sache.

Wer was eigenes entwickeln will kommt nicht umhin die gesamte Doku zu 
lesen, die zum jeweiligen Thema bereitgestellt wird. Das kann für ein 
einzelnes projekt bedeuten, dass man monatelang einige tausend Seiten 
liest und Teile davon einzeln ausprobiert.

Man kann natürlich auch einfach "nur" fertige Module zusammen stöpseln, 
was ja gerade vom Arduino Framework besonders unterstützt wird. Aber 
dann muss man sich halt auch mit den Modulen zufrieden geben, die schon 
fertig sind.

> Leider ist die Frage nach Quelltext aber nicht hilfreich -
> ich habe ja keinen, was ja das Problem ist.

Das kann nicht sein, du hast geschrieben, dass du schon ein halbfertiges 
Programm hast, das erweitert werden soll. Wir würden Dir hier auch 
niemals ein komplettes Programm auf dem Silbertablett liefern - wie 
könnten wir sonst mit Softwareentwicklung unser täglich Brot verdienen?

https://arduino-esp8266.readthedocs.io/en/2.4.2/filesystem.html#filesystem-information-structure

Hier ist beschrieben, wie du das Inhaltsverzeichnis vom SPIFFS auslesen 
kannst. Nun musst du mit diesen Infos durch String-Verkettung eine HTML 
Seite erzeugen.

von robs8899@t-online.de (Gast)


Lesenswert?

Wenn du einfach nur wissen willst, was alles im SPIFFS abgelegt ist, 
dann lies doch einfach das Image vom Flash zurück auf deinen PC und 
entpacke es dort mit mkspiffs.

Dafür extra ein Listing zu programmieren ist doch Schwachsinn, wenn man 
es nur einmal braucht.

von Dieter R. (dieter_r)


Lesenswert?

Stefanus F. schrieb:
> Das kann nicht sein, du hast geschrieben, dass du schon ein halbfertiges
> Programm hast, das erweitert werden soll. Wir würden Dir hier auch
> niemals ein komplettes Programm auf dem Silbertablett liefern - wie
> könnten wir sonst mit Softwareentwicklung unser täglich Brot verdienen?

Aus der Antwort entnehme ich, dass ich in jedem Fall mein Arduino-Sketch 
entsprechend erweitern muss, richtig?
Wenn das der Fall ist, hat sich das für mich so erledigt.
Ich wollte ja auch nichts von jemand entwickelt haben, sondern einen 
Hinweis / Wink wie gelöst wurde oder zu lösen ist.

robs8899@t-online.de schrieb:
> Wenn du einfach nur wissen willst, was alles im SPIFFS abgelegt ist,
> dann lies doch einfach das Image vom Flash zurück auf deinen PC und
> entpacke es dort mit mkspiffs.
>
> Dafür extra ein Listing zu programmieren ist doch Schwachsinn, wenn man
> es nur einmal braucht.

Gute Idee. Ich arbeite mit der Arduino-IDE. Soweit mir bekannt, kann ich 
damit aber nur "Sketch Data" hochladen, nicht herunterladen. Habe ich da 
was übersehen?

von robs8899@t-online.de (Gast)


Lesenswert?

Dieter R. schrieb:
>> Wenn du einfach nur wissen willst, was alles im SPIFFS abgelegt ist,
>> dann lies doch einfach das Image vom Flash zurück auf deinen PC und
>> entpacke es dort mit mkspiffs.
>>
>> Dafür extra ein Listing zu programmieren ist doch Schwachsinn, wenn man
>> es nur einmal braucht.
>
> Gute Idee. Ich arbeite mit der Arduino-IDE. Soweit mir bekannt, kann ich
> damit aber nur "Sketch Data" hochladen, nicht herunterladen. Habe ich da
> was übersehen?

Sorry, von der Arduino-IDE habe ich mich verabschiedet, kann also nicht 
sagen ob und wo solche Funktionen dort zu finden sind. Es ist mir 
einfach zu mühsam, damit was ernsthaftes zu programmieren.

Ich nehme den ESP8266 Arduino Core direkt aus GitHub mit selbst gebauten 
Make Files und der Eclipse-IDE. Deshalb die unkonventionelle Methode:

1. Flash-Adresse und Größe des SPIFFS-Blocks ermitteln: Anhängig davon, 
was du an Flash- und SPIFFS-Größe hast, wird der jeweilige Linker-Skript 
(eagle.flash.xxx.ld) der ESP-Arduino-Tools  verwendet. Dort stehen die 
Adressen und Größen des SPIFFS-Blocks drin.

2. espressif/esptool auf GitHub suchen, Doku lesen, Python und das Tool 
installieren.

3. Mit read_flash als Kommando den richtigen Flash-Bereich auslesen.

4. igrr/mkspiffs auf GitHub suchen, Doku lesen und unter Releases den 
für dein OS richtigen Build herunterladen und installieren.

5. Mit --unpack als Kommando und den richtigen Werten für -b -f -s (s. 
Doku & Angaben im Linker-Skript oben) sollten die Dateien entpackt 
werden.

Viel Glück beim ausprobieren!

von Carsten F. (carsten_f664)


Lesenswert?

Hallo Dieter,
aus der Doku zu SPIFFS in der ESP8266 Arduino Implementierung ist 
folgendes Codefragment:

Dir dir = SPIFFS.openDir("/data");
while (dir.next()) {
    Serial.print(dir.fileName());
    File f = dir.openFile("r");
    Serial.println(f.size());
}

Wenn Du ein Sketch erstellst mit diesen Zeilen im Init solltest Du in 
der Lage sein die Files zu listen, ggf musst Du "/data" auf "/" 
abaendern, dass weiss ich jetzt nicht so genau.
Der Output kommt dann auf dem seriellen Monitor, vielleicht hilft Dr das 
weiter,
Gruss, Carsten

von Fips (Gast)


Lesenswert?

Auf meiner Webseite findest du den Datei Manager für den Esp.........

https://fipsok.de/sketch/tab.html#spiffs

Gruß Fips

von Dieter R. (dieter_r)


Lesenswert?

Fips schrieb:
> Auf meiner Webseite findest du den Datei Manager für den Esp.........

Bestens. Über den bin ich gerade beim suchen auch zufällig gestolpert. 
Die Funktion ist genau das, was ich gesucht hatte. Ich hatte nur die 
Hoffnung, den Sketch dafür nicht erweitern zu müssen.

Ich werde das mal an meinem Testsystem ausprobieren. Am laufenden 
Dimmer, um den es eigentlich geht, will ich das Programm erst mal nicht 
ändern.

Danke auch allen anderen für die Hilfe. Wieder was gelernt.

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.