Hallo,
ich habe folgendes Problem.
Ich schreibe mit dem ESP32 eine Datei auf die SD Karte. Diese Datei soll dann als Data Logger zyklisch Daten eines DHT22 speichern.
Dafür initialisiere ich einmalig im SETUP zuerst die Karte bzw. lege die Datei mit einem Header an, um später in Excel saubere Spaltenüberschriften zu haben.
Im LOOP rufe ich dann den Schreibbefehl auf, um Uhrzeit/Datum bzw. Sensordaten zyklisch auf die Karte zu schreiben. Diese sollen dann pro Schreibvorgang Zeile für Zeile in der Datei landen. Ich habe aber den Eindruck, das mir der ESP32 mit jedem Schreibvorgang ein komplett neue Datei mit demselben Namen anlegt und die vorherige überschreibt. Somit habe ich zwar eine Datei auf der SD Karte, aber immer nur mir einer Zeile an Daten. Auch der vormals im SETUP geschriebene Header ist weg. Woran kann das liegen - bitte um Hilfe.
Hier der relevante Ausschnitt vom Sketch:
void Initialize_SDcard() {
dataFile = SD.open("/MM_Data.txt", FILE_WRITE);
if (dataFile) { // schreibe in die Datei, wenn verfügbar
dataFile.println("Date,Time,Temperature,Humidity"); //Schreibe diese Zeile als Header in die Datei
dataFile.close(); //Schließe die Datei
}
}
void WriteFile() {
DateTime now = rtc.now();
char buf2[] = "DD.MM.YY, hh:mm:ss"; // Formatierung der RTC Zeit
dataFile = SD.open("/MM_Data.txt", FILE_WRITE);
if (dataFile) { // schreibe in die Datei, wenn verfügbar
dataFile.print(now.toString(buf2)); //Schreibe Datum/Uhrzeit vom RTC in die Datei
dataFile.print(","); //Gehe in die nächste Spalte, setze ein ","
dataFile.print(rtc.getTemperature()); //Schreibe die Temperatur vom RTC in die Datei
dataFile.print(","); //Gehe in die nächste Spalte, setze ein ","
dataFile.print(rtc.getTemperature()); //Schreibe die Temperatur vom RTC in die Datei
dataFile.print(","); //Gehe in die nächste Spalte, setze ein ","
dataFile.print(rtc.getTemperature()); //Schreibe die Temperatur vom RTC in die Datei
dataFile.print(","); //Gehe in die nächste Spalte, setze ein ","
dataFile.println(); //Ende der Zeile, springe in die nächste
dataFile.close(); //Schließe die Datei
} else {
digitalWrite(ledPinR, HIGH); // Schalten der LED rot auf HIGH
delay(50);
digitalWrite(ledPinR, LOW); // Schalten der LED rot auf LOW
Serial.println("Achtung! Schreibfehler!");
}
}