Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe
Makerprojekte => Arduino und Co (Mikrocontroller) => Thema von: DL8EBD am 15. Januar 2021, 07:50:09

Titel: SD.h File öffnen mittles wildcard " *.bin "
Beitrag von: DL8EBD am 15. Januar 2021, 07:50:09

Hallo zusammen,

folgendes Szenario: ich habe auf einem ESP32 einen Arduino-Sketch geschrieben der es auch gestattet ein Binär File von einer SD Karte einzulesen um damit die Firmware auszutauschen.
Das funktioniert alles hervorragend (Update.h)

Auf der SD Karte gibt es ein Verzeichnis /firmware/
und das Binärfile muss aktuell fw.bin lauten.
Vereinbart wird, dass es immer nur ein Binärfile in dem Verzeichnis geben wird.
Alles gut.... File file = SD.open("/firmware/fw.bin");

Aber:
damit man die Binärfiles auf dem Rechner unterscheiden kann, möchte ich sie auf geeignete Weise im Namen nummerieren und nicht jedes mal vor dem Kopieren auf SD-Karte in fw.bin umbenennen.
Zum Beispiel sowas: fw0001.bin oder fw0001a.bin usw.

Mein Sketch soll nun, egal wie der Filename lautet, solange er nur auf .bin endet, dieses Binärfile akzeptieren.

File file = SD.open("/firmware/*.bin");
* als wildcard funktioniert leider nicht :-\

Ich finde zu dem Thema auch nichts passendes im Internet.....
Hat da wer eine zündende Idee wie man das machen kann?

Ich weiß, es gibt die Möglichkeit "openNextFile()" zu nutzen, die würde aber ungeachtet der Endung auch nicht-bin Files öffnen.
Oder nicht?

Daaanke ;)


Titel: Re:SD.h File öffnen mittles wildcard " *.bin "
Beitrag von: Andreas am 15. Januar 2021, 08:16:47

Hallo Thomas,

die open-Funktion erwartet einen exakten Dateinamen - egal in welcher Programmiersprache. Da brauchst Du nicht zu suchen. Ist ja auch einleuchtend: Was soll denn passieren wenn auf ein Wildcard mehrere Dateien passen? Wonach soll entschieden werden?

Du kommst also nicht herum dieses Problem durch eine eigene String-basierte Methode abzuhandeln. Schema etwa so:
1) Du liest das in Frage kommende Verzeichnis ein (z.B. in ein Array)
2) Du parst jedes Element mit einer Stringfunktion auf den passenden Match
3) Du schiebst alle passenden Matches in ein zweites Array
4) Wenn erstes Array durch, gehst Du zum zweiten Array
Sollte nur ein Match da sein: Klasse - das ist das richtige. Sollten mehrere da sein musst Du eine Routine programmieren die dem User alle Möglichkeiten zur Auswahl anbietet.

LG
Andreas

Titel: Re:SD.h File öffnen mittles wildcard " *.bin "
Beitrag von: DL8EBD am 15. Januar 2021, 08:24:11

Danke Andreas, ich hatte "befürchtet" dass es einen gewissen Aufwand bedarf und gehofft es wäre auch einfacher möglich.
Leuchtet ein, sobald mehrere .bin auftauchen gibt es ein "Problem".
Da ich ja ein TFT am ESP habe, überlege ich daher dem Anwender eine Auswahl aller auf der SD Karte verfügbaren .bin zu präsentieren.
Dann hätte er die Möglichkeit zwischen verschiedenen Softwareständen auszuwählen.


ESP32 und Firmwareupdate von SD-Karte

wer es mal am ESP32 ausprobieren möchte:


Code:

#include "SD.h"
#include "Update.h"

void firmware_updater() {
File file = SD.open("/firmware/fw.bin");
if(!file){
return;
}
size_t fileSize = file.size();
if(!Update.begin(fileSize)){
return;
};
Update.writeStream(file);
file.close();
ESP.restart();
}


was sehr cool ist:
unterbricht man das laufende Update, beispielsweise durch eine Spannungsunterbrechung,
ist nichts verloren - das original Programm bleibt erhalten.
Erst wenn das Update erfolgreich verlief wird nach dem Reboot die neue Firmware verwendet.

Ich teste hier gerade Updates mit rund 500kB großen Binärfiles.
Dauer: 5 Sekunden + reboot

Übrigens:
bis zum Befehl ESP.restart(); kann man problemlos Debug-Ausgaben auf die serielle
Schnittstelle leiten oder wie in meinem Fall, eine Bedienerführung auf einem angeschlossenen
TFT darstellen und den Anwender über den Status auf dem Laufenden halten.

Das ist ein Vorteil der ESP32!
AVRs könnten das freilich nicht.....

********************************************************

EDIT:
.....wobei im MSDOS und auch beim alten PET2001 konnte man wildcards benutzen

"Load "*",8,1" ist mir da noch in Erinnerung geblieben.... es wurde das erste File von der Datasette/Floppy gezogen ;D
Man waren das noch Zeiten.

Titel: Re:SD.h File öffnen mittles wildcard " *.bin "
Beitrag von: Andreas am 15. Januar 2021, 08:47:03

Thomas, das ist schon eine Ebene höher: das ist das Betriebssystem bzw. der eingebaute Basic-Interpreter. Ich (und auch Du) benötigst aber etwas auf der COMPILER-PROGRAMMIEREBENE....

LG
Andreas


Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.