ESP32 S3 - Daten mit Zeitstempel auf SD-Karte protokollieren

Erfahren Sie, wie Sie mit dem ESP32 S3 und einem Micro-SD-Kartenmodul einen Datenlogger mit Zeitstempel bauen. Dieses Tutorial zeigt Ihnen, wie Sie reale Daten erfassen, sie mit genauen Datums- und Uhrzeitangaben aus einem RTC-Modul verknüpfen und anschließend dauerhaft auf die Karte schreiben.

Was Sie bauen werden:

  1. Eine Schaltung, die den ESP32 S3 mit einem Micro-SD-Kartenmodul und einem DS3231-RTC-Modul verbindet
  2. Einen Sketch, der Dateneinträge mit Zeitstempel in eine einzelne Datei auf der Micro-SD-Karte schreibt
  3. Einen zweiten Sketch, der die Log-Ausgabe auf tägliche, nach Datum benannte Dateien aufteilt
  4. Eine Grundlage für langlaufende IoT-Datenprotokollierungs- und Überwachungsanwendungen
ESP32 S3 Daten mit Zeitstempel auf Micro-SD-Karte protokollieren

Überblick über Micro SD Card Module and RTC Module

Das Micro-SD-Kartenmodul wird über den SPI-Bus mit dem ESP32 S3 verbunden und bietet zuverlässigen Zugriff auf ein FAT16/FAT32-Dateisystem, um Logdateien zu speichern, die über Tage oder Wochen wachsen können. Das DS3231-RTC-Modul hält die Uhrzeit unabhängig vom Stromzustand des ESP32 S3 sehr genau, sodass jeder Logeintrag auch nach einem Reset oder Neustart des Boards ein aussagekräftiges Datum und eine Uhrzeit trägt. Zusammen bilden diese beiden Module das Rückgrat einer robusten, eigenständigen Datenprotokollierungslösung.

Wichtige Spezifikationen

Sie sind mit dem Micro-SD-Kartenmodul oder dem RTC-Modul, ihrer Pinbelegung, Funktionsweise und Programmierung noch nicht vertraut? Sehen Sie sich die ausführlichen Tutorials zu diesen Themen an:

Verdrahtungsdiagramm

Schließen Sie das Micro-SD-Kartenmodul und das DS3231-RTC-Modul gemäß dem folgenden Schaltplan an den ESP32 S3 an und halten Sie die Leitungen kurz, um Störungen auf dem SPI-Bus zu minimieren. Überprüfen Sie jede Verbindung, bevor Sie das Board einschalten, um Initialisierungsfehler zu vermeiden.

ESP32 S3 Micro-SD-Kartenmodul RTC Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Sicherheitshinweise

Stellen Sie immer sicher, dass die Micro-SD-Karte vollständig im Modul sitzt und als FAT16 oder FAT32 formatiert ist, bevor Sie einen Protokollierungscode ausführen, denn eine unformatierte oder locker sitzende Karte verhindert die Initialisierung. Entfernen Sie die Karte niemals, während der ESP32 S3 Daten schreibt, da dies das Dateisystem beschädigen und zuvor aufgezeichnete Logeinträge zerstören kann.

Micro-SD-Modul Pin ESP32 S3 Pin
VCC 5V
GND GND
MISO GPIO13 (MISO)
MOSI GPIO11 (MOSI)
SCK GPIO12 (SCK)
SS GPIO10 (CS)
DS3231 Pin ESP32 S3 Pin
VCC 3.3V
GND GND
SDA GPIO8 (SDA)
SCL GPIO9 (SCL)

ESP32 S3 - Daten mit Zeitstempel auf Micro-SD-Karte protokollieren

Code-Übersicht

Der folgende Code liest in jedem Schleifendurchlauf die Werte von zwei Analogpins aus und hängt eine CSV-Zeile mit Zeitstempel an eine einzelne Logdatei auf der Micro-SD-Karte an. Datum und Uhrzeit stammen aus dem DS3231-RTC-Modul, sodass jeder Datensatz genaue Uhrzeitinformationen enthält, die das Log auch lange nach der Erfassung für Analysen nützlich machen. Der Einfachheit halber werden Analogpin-Werte als Beispieldaten verwendet – dasselbe Muster gilt für jeden Sensor, den Sie in die Schaltung einbauen.

ESP32 S3 Code

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS 10 // The ESP32 S3 pin connected to the CS pin of SD card module #define FILE_NAME "/log.txt" RTC_DS3231 rtc; File myFile; void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // SETUP RTC MODULE if (!rtc.begin()) { while (1) { Serial.println(F("RTC module is NOT found")); delay(1000); } } if (!SD.begin(PIN_SPI_CS)) { while (1) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); delay(1000); } } Serial.println(F("SD CARD INITIALIZED.")); Serial.println(F("--------------------")); } void loop() { // open file for writing myFile = SD.open(FILE_NAME, FILE_WRITE); if (myFile) { Serial.println(F("Writing log to SD Card")); // write timestamp DateTime now = rtc.now(); myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data // read data int analog_1 = analogRead(A0); int analog_2 = analogRead(A1); // write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file ")); Serial.println(FILE_NAME); } delay(2000); // delay 2 seconds }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. SD-Karte vorbereiten: Formatieren Sie die Micro-SD-Karte als FAT16 oder FAT32 und stecken Sie sie in das SD-Kartenmodul
  3. Schaltung verdrahten: Verbinden Sie das Micro-SD-Kartenmodul und das DS3231-RTC-Modul gemäß dem obigen Schaltplan mit dem ESP32 S3
  4. ESP32 S3 anschließen: Verbinden Sie den ESP32 S3 über das USB-Type-C-Kabel mit Ihrem PC
  5. Arduino IDE öffnen: Starten Sie die Arduino IDE auf Ihrem Computer
  6. Board auswählen: Wählen Sie im Board-Menü den ESP32 S3 aus
  7. Port auswählen: Wählen Sie den richtigen COM-Port für Ihren ESP32 S3
  8. Serial Monitor öffnen: Öffnen Sie den Serial Monitor vor dem Hochladen (Werkzeuge > Serieller Monitor)
  9. Code kopieren: Kopieren Sie den oben bereitgestellten Code
  10. Code einfügen: Fügen Sie ihn in einen neuen Sketch in der Arduino IDE ein
  11. Hochladen: Klicken Sie auf die Schaltfläche Upload, um den Code auf Ihren ESP32 S3 zu flashen
  12. Ergebnisse ansehen: Prüfen Sie im Serial Monitor, ob das Log geschrieben wird
  13. Log lesen: Entnehmen Sie die Micro-SD-Karte, stecken Sie sie in einen USB-SD-Kartenleser, verbinden Sie diesen mit Ihrem PC und öffnen Sie log.txt, um die aufgezeichneten Einträge anzusehen
  14. Profi-Tipp: Öffnen Sie den Serial Monitor immer vor dem Hochladen, damit Sie jede Initialisierungsmeldung ab dem allerersten Start sehen.

Ausgabe im Serial Monitor

Erwartete Ausgabe:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
SD CARD INITIALIZED. -------------------- Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Das Log auf Ihrem PC ansehen:

  • Entnehmen Sie die Micro-SD-Karte aus dem Micro-SD-Kartenmodul
  • Stecken Sie die Micro-SD-Karte in einen USB-SD-Kartenleser
  • Verbinden Sie den USB-SD-Kartenleser mit Ihrem PC
  • Öffnen Sie die Datei log.txt – sie sieht ähnlich aus wie im folgenden Bild
ESP32 S3 Daten mit Zeitstempel auf Micro-SD-Karte protokollieren

Wenn Sie keinen USB-SD-Kartenleser haben, können Sie den Inhalt der Logdatei direkt auslesen, indem Sie den folgenden ESP32 S3 Code hochladen.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-log-data-with-timestamp-to-sd-card */ #include <SD.h> #define PIN_SPI_CS 10 // The ESP32 S3 pin connected to the CS pin of SD card module #define FILE_NAME "/log.txt" File myFile; void setup() { Serial.begin(9600); if (!SD.begin(PIN_SPI_CS)) { while (1) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); delay(1000); } } Serial.println(F("SD CARD INITIALIZED.")); // open file for reading myFile = SD.open(FILE_NAME, FILE_READ); if (myFile) { while (myFile.available()) { char ch = myFile.read(); // read characters one by one from Micro SD Card Serial.print(ch); // print the character to Serial Monitor } myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file ")); Serial.println(FILE_NAME); } } void loop() { }

ESP32 S3 - Daten in mehreren Dateien protokollieren

Wenn alle Logeinträge in eine einzige Datei geschrieben werden, wächst diese unbegrenzt, und es wird schwierig, Einträge eines bestimmten Datums zu finden. Der folgende Code löst dieses Problem, indem er pro Tag eine Logdatei anlegt, deren Dateiname das Datum im Format YYYYMMDD.txt trägt, sodass die Dateien leicht zu erkennen und zu sortieren sind.

Code-Übersicht

Der folgende Code fragt in jedem Schleifendurchlauf das DS3231-RTC-Modul ab, um das aktuelle Datum zu ermitteln, öffnet oder erstellt dann die passende Tages-Logdatei und hängt einen Datensatz mit Zeitstempel an. Wenn Mitternacht vorbei ist und sich das Datum ändert, wechselt der Code automatisch zu einer neuen Datei – so bleiben Ihre Logs ohne manuellen Eingriff sauber aufgeteilt.

ESP32 S3 Code

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS 10 // The ESP32 S3 pin connected to the CS pin of SD card module RTC_DS3231 rtc; File myFile; char filename[] = "/yyyymmdd.txt"; // filename (without extension) should not exceed 8 chars void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // SETUP RTC MODULE if (!rtc.begin()) { while (1) { Serial.println(F("RTC module is NOT found")); delay(1000); } } if (!SD.begin(PIN_SPI_CS)) { while (1) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); delay(1000); } } Serial.println(F("SD CARD INITIALIZED.")); Serial.println(F("--------------------")); } void loop() { DateTime now = rtc.now(); int year = now.year(); int month = now.month(); int day = now.day(); // update filename filename[1] = (year / 1000) + '0'; filename[2] = ((year % 1000) / 100) + '0'; filename[3] = ((year % 100) / 10) + '0'; filename[4] = (year % 10) + '0'; filename[5] = (month / 10) + '0'; filename[6] = (month % 10) + '0'; filename[7] = (day / 10) + '0'; filename[8] = (day % 10) + '0'; // open file for writing myFile = SD.open(filename, FILE_WRITE); if (myFile) { Serial.println(F("Writing log to SD Card")); // write timestamp myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data // read data int analog_1 = analogRead(A0); int analog_2 = analogRead(A1); // write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file ")); Serial.println(filename); } delay(2000); // delay 2 seconds }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. SD-Karte vorbereiten: Formatieren Sie die Micro-SD-Karte als FAT16 oder FAT32 und stecken Sie sie in das SD-Kartenmodul
  3. Schaltung verdrahten: Verbinden Sie das Micro-SD-Kartenmodul und das DS3231-RTC-Modul gemäß dem obigen Schaltplan mit dem ESP32 S3
  4. ESP32 S3 anschließen: Verbinden Sie den ESP32 S3 über das USB-Type-C-Kabel mit Ihrem PC
  5. Code hochladen: Kopieren Sie den obigen Code zur Protokollierung in mehrere Dateien, fügen Sie ihn ein und laden Sie ihn hoch
  6. Über Nacht laufen lassen: Lassen Sie den ESP32 S3 über Mitternacht hinaus laufen, um den automatischen täglichen Dateiwechsel zu beobachten
  7. Dateien lesen: Entnehmen Sie nach einer längeren Laufzeit die Micro-SD-Karte, stecken Sie sie in einen USB-SD-Kartenleser und verbinden Sie diesen mit Ihrem PC – Sie sehen dann eine Datei pro Tag, wie unten gezeigt
ESP32 S3 Daten mit Zeitstempel in mehreren Dateien protokollieren
  1. Profi-Tipp: Stellen Sie das RTC-Modul vor Ihrem ersten langen Protokollierungslauf auf die richtige Uhrzeit, damit jeder Zeitstempel von Anfang an korrekt ist.

Ausgabe im Serial Monitor

Erwartete Ausgabe während des Betriebs:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
SD CARD INITIALIZED. -------------------- Writing log to 20260616.txt Writing log to 20260616.txt Writing log to 20260616.txt Writing log to 20260617.txt Writing log to 20260617.txt
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Anwendungsideen

Die Rechenleistung und die eingebaute Funkverbindung des ESP32 S3 machen ihn zu einer idealen Plattform für langlaufende Datenprotokollierungssysteme mit Zeitstempel in realen Umgebungen.

  1. Umweltmonitor: Protokollieren Sie Temperatur, Luftfeuchtigkeit und Luftqualität in regelmäßigen Abständen für Klimastudien in Innenräumen oder im Freien.
  2. Zutrittskontroll-Log: Zeichnen Sie jedes Türschloss-Ereignis mit genauem Zeitstempel auf, um ein manipulationssicheres Sicherheitsprotokoll zu führen.
  3. Landwirtschaftlicher Datenlogger: Verfolgen Sie Bodenfeuchte, Lichtintensität und Temperatur über ganze Anbausaisons, um die Wachstumsbedingungen zu optimieren.
  4. Industrieller Sensorrekorder: Erfassen Sie Vibrations-, Druck- oder Stromwerte von Maschinen zur Unterstützung vorausschauender Wartung.
  5. Energieverbrauchs-Tracker: Speichern Sie tägliche Stromverbrauchsstatistiken von einem Smart Meter oder Stromsensor zur Rechnungsprüfung und Effizienzanalyse.
  6. Wetterstation: Protokollieren Sie Luftdruck, Windgeschwindigkeit und Niederschlag mit Zeitstempel zur Analyse lokaler Wettermuster.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3 Projekt an.

Fordern Sie sich heraus

Die obigen Grundlagen der Protokollierung lassen sich leicht erweitern – probieren Sie diese zunehmend anspruchsvollen Übungen aus, um Ihre Fähigkeiten zu vertiefen.

  1. Anfänger: Ändern Sie den Einzeldatei-Logger so, dass er als allererste Zeile eine Kopfzeile schreibt (z. B. Timestamp,Value1,Value2), damit sich die CSV-Datei korrekt in einer Tabellenkalkulation öffnen lässt.
  2. Anfänger: Fügen Sie dem Log eine dritte Datenspalte hinzu, indem Sie statt eines Analogpins einen echten Sensor (z. B. einen DHT11-Temperatursensor) auslesen.
  3. Fortgeschritten: Implementieren Sie eine Prüfung der maximalen Dateigröße, sodass der Logger automatisch eine neue Datei anlegt (z. B. log_001.txt, log_002.txt), wenn die aktuelle Datei 1 MB überschreitet.
  4. Fortgeschritten: Fügen Sie einen WiFi-Upload-Schritt hinzu, der einmal pro Stunde die aktuelle Logdatei liest und ihren Inhalt per POST an einen entfernten Server oder Cloud-Speicher sendet.
  5. Experte: Bauen Sie einen selbstheilenden Logger, der Initialisierungsfehler der SD-Karte erkennt, es mehrmals mit zunehmenden Wartezeiten erneut versucht und über den Serial Monitor eine Warnung ausgibt, wenn die Karte nicht erreichbar ist.
  6. Experte: Kombinieren Sie den täglichen Mehrdatei-Logger mit einem Webserver, damit Sie die einzelnen Tagesdateien in Ihrem lokalen Netzwerk im Browser ansehen und herunterladen können, ohne die SD-Karte zu entnehmen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!