Note: Normalerweise hole ich Datum und Zeit via GPS, aber um es hier zu vereinfachen hab ich die 6 Variablen einfach fix definiert.
Es dreht sich hier also vermutlich um die Zeile:
1
SdFile::dateTimeCallback(dateTime);
Mancherorts steht, man muss diese Zeile direkt vor das "open file" stellen. Andere schreiben es soll ins Setup vor "SD.begin()" und irgendwo stand auch, dass es einfach vor "file.close()" stehen muss, da die close() function den Trigger macht.
Wird erfolgreich gebaut, auch die Testdatei wird auf der SD angelegt, aber der Callback wird scheinbar nie getriggert. Ich stehe hier grade wieder mal etwas auf dem Schlauch.
Wer order was sollte den CB wann genau triggern?
Ich brauche mal wieder einen Schubs in die richtige Richtung.
#include"SD.h" // used for SDcard, version 3.1.1 for ESP32
2
#include<SdFat.h>
Äh, sind das zwei verschiedene SD-Libraries?!
Ähhhmmm....ja? Vielleicht. Weiss ich noch nicht so genau...
Mein Verständnis war/ist, dass SD die SD Karte händelt (zB SD.begin() usw) und SdFat nur für das Datetime Zeugs zuständig ist.
Impliziert Deine Frage, dass ich nur die SdFat.h nehmen soll?
(Nur die SD.h alleine geht jedenfall nicht, da ich dann einen Fehler bekomme, dass FAT_DATE und FAT_TIME undefiniert sind.)
PS: Wenn ich das recht überblicke, dann ist die SD.h mit dem Paket für das ESP32 board installiert worden. (Zumindest liegst sie in einem Unterpfad von $HOME/.Arduino/packages/ESP32/ )
Die SdFat habe als library installiert für FAT_DATE und FAT_TIME.
Die SdFat habe als library installiert für FAT_DATE und FAT_TIME.
Heißt also du sagst der SdFat Library, diesen Callback aufzurufen, wenn du mit der SdFat Library eine Datei anlegst. Dann nutzt du die SdFat Library aber nie wieder sondern legst stattdessen die Datei mit der SD-Library an, welche natürlich überhaupt nichts von SdFat und dem Callback weiß. Oder?!
Wie oben geschrieben wurde, muss der Callback des SD-Karten-Objekts natuerlich "im Bilde" sein. In dieser Version ist "SD" nicht mehr ein Objekt aus der SD.h, sondern ein Objekt aus der SdFat.h
Danke an Niklas für den Schubs. Bzw den Tritt in den Hintern. ;) Danke.
DANKE! (Musste echt schmunzeln. So wie Du es formuliert hast, war die
Sache sofort klar! Didaktik +1000)
Ups, allerdings fällt mir gerade auf dass dein Ansatz sowieso gar nicht so abwegig war, denn ich habe gefunden:
The SD.h 0022 library is a wrapper for an old version of SdFat. The Arduino developers did not choose to expose timestamp callback support in their wrapper.
Den Callback bei SdFat einzustellen ist also eigentlich korrekt, aber anscheinend hat die Arduino-SD-Library das SdFat irgendwie intern und man kann den Callback dort nicht setzen. Indem du dein eigenes SD-Objekt anlegst ganz ohne die Arduino-Library geht es wieder.
Also bei mir stimme Datum auf der SD Karte, ich arbeite mit sd.h time.h und ntp.h als Libarys. Also vielleicht mit time.h dir RTC des ESP32 setzen.Oder mit GPS setzen: https://github.com/espressif/arduino-esp32/issues/1444
Das könnte erklären warum es vereinzelt Beispiele im Netz gab die angeblich liefen, meiner ersten Version aber sehr ähnlich sahen.
Ich vermute es gibt da draussen verschiedene SD.h Varianten. Verschiedene Plattformen, verschiedene Implementationen.
Eigentlich mag ich ja nicht an den Libraries rumfummeln, aber vielleicht ist das mal so ein Fall wo es sich lohnt. Denn, auch wenn das oben jetzt geht. Wenn ich den Ansatz in mein eigentliches Projekt übersetzen will, hab ich wieder andere Probleme:
Bestimmte Funktionen fehlen in der SdFat.h scheinbar. (z.B. cardType(), totalBytes(), cardSize() ). Und bei den Pointeroperationen auf die Datei klemmt es nun auch... da muss ich jetzt mal noch was weiter bohren.
Aber Dein eigentlicher Hinweis war Gold wert. Ich hab mir einfach noch zu wenige Gedanken darüber gemacht, was welche Lib bei der SD-Karte was genau tut.
Also bei mir stimme Datum auf der SD Karte, ich arbeite mit sd.h time.h
und ntp.h als Libarys. Also vielleicht mit time.h dir RTC des ESP32
setzen.Oder mit GPS setzen:
https://github.com/espressif/arduino-esp32/issues/1444
Hast Du ein Code-Sample?
Welche SD.h benutzt Du?
Die Zeit aus GPS rauszuholen ist nicht mein Problem. Das klappt prima.
Meine SD.h für den ESP32 scheint jedoch den Callback nicht zu triggern.