Arduino - Daten mit Zeitstempel auf SD-Karte protokollieren
In diesem Tutorial lernen wir, wie man ein Log mit Zeitstempel auf die Micro-SD-Karte mit Arduino schreibt. Im Detail werden wir lernen:
Arduino - Wie man Daten mit Zeitstempel in eine Datei auf einer MicroSD-Karte protokolliert
Arduino - Wie man Daten mit Zeitstempel in mehrere Dateien auf einer MicroSD-Karte protokolliert, eine Datei pro Tag
Die Zeitinformationen werden von einem RTC-Modul abgerufen und zusammen mit den Daten auf die Micro-SD-Karte geschrieben.
Die Daten, die auf der Micro-SD-Karte protokolliert werden, können alles Mögliche sein. Zum Beispiel:
Daten, die von jedem Sensor gelesen werden
Historie des Zugriffs auf das Türschloss
Um es einfach zu halten, liest dieses Tutorial Werte von zwei analogen Eingängen als Beispiel für Daten. Sie können den Code leicht an jede Art von Daten anpassen.
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.
Über Micro-SD-Kartenmodul und RTC-Modul
Wenn Sie nichts über das Micro-SD-Kartenmodul und das RTC-Modul wissen (Pinbelegung, wie es funktioniert, wie man es programmiert ...), lernen Sie in den folgenden Tutorials mehr darüber:
Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
※ Notiz:
Wenn Sie ein Ethernet-Shield oder ein Shield verwenden, das einen Micro-SD-Kartenhalter besitzt, benötigen Sie kein Micro-SD-Kartenmodul. Sie müssen die Micro-SD-Karte einfach in den Micro-SD-Kartenhalter auf dem Shield einsetzen.
Arduino - Daten mit Zeitstempel auf Micro-SD-Karte protokollieren
/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino/arduino-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS 4#define FILE_NAME "log.txt"RTC_DS3231 rtc;File myFile;voidsetup() {Serial.begin(9600);// SETUP RTC MODULEif (!rtc.begin()) {Serial.println(F("Couldn't find RTC"));while (1); }if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));Serial.println(F("--------------------"));}voidloop() {// open file for writing myFile = SD.open(FILE_NAME, FILE_WRITE);if (myFile) {Serial.println(F("Writing log to SD Card"));// write timestampDateTimenow = 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 dataint 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: error on opening file "));Serial.println(FILE_NAME); }delay(2000); // delay 2 seconds}
Schnelle Schritte
Stellen Sie sicher, dass die Micro-SD-Karte im FAT16- oder FAT32-Format formatiert ist (dazu googeln).
Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
Klicken Sie in der Arduino IDE auf die Schaltfläche Hochladen, um den Code auf den Arduino hochzuladen.
Sehen Sie das Ergebnis im seriellen Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' 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
Arduino Uno on COM15
2
Trennen Sie die Micro-SD-Karte vom Micro-SD-Kartenmodul.
Stecken Sie die Micro-SD-Karte in einen USB-SD-Kartenleser.
Schließen Sie den USB-SD-Kartenleser an den PC an.
Öffnen Sie die log.txt-Datei auf Ihrem PC. So sieht sie aus:
Wenn Sie keinen USB-SD-Kartenleser haben, können Sie den Inhalt der Logdatei prüfen, indem Sie den untenstehenden Arduino-Code ausführen.
/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino/arduino-log-data-with-timestamp-to-sd-card*/#include <SD.h>#define PIN_SPI_CS 4#define FILE_NAME "log.txt"File myFile;voidsetup() {Serial.begin(9600);if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }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 CardSerial.print(ch); // print the character to Serial Monitor } myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(FILE_NAME); }}voidloop() {}
Arduino - Logdaten in mehreren Dateien
Das Schreiben von Logs in eine einzige Datei führt im Laufe der Zeit zu einer sehr großen Dateigröße und erschwert die Überprüfung. Der folgende Code schreibt Log-Dateien in mehrere Dateien:
Eine Datei pro Tag
Der Dateiname ist die Datumsangabe YYYYMMDD.txt
/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino/arduino-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS 4RTC_DS3231 rtc;File myFile;char filename[] = "yyyymmdd.txt"; // filename (without extension) should not exceed 8 charsvoidsetup() {Serial.begin(9600);// SETUP RTC MODULEif (!rtc.begin()) {Serial.println(F("Couldn't find RTC"));while (1); }if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));Serial.println(F("--------------------"));}voidloop() {DateTimenow = rtc.now();intyear = now.year();intmonth = now.month();intday = now.day();// update filename filename[0] = (year / 1000) + '0'; filename[1] = ((year % 1000) / 100) + '0'; filename[2] = ((year % 100) / 10) + '0'; filename[3] = (year % 10) + '0'; filename[4] = (month / 10) + '0'; filename[5] = (month % 10) + '0'; filename[6] = (day / 10) + '0'; filename[7] = (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 dataint 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: error on opening file "));Serial.println(filename); }delay(2000); // delay 2 seconds}
Nach einem langen Lauf, wenn du:
Entfernen Sie die Micro-SD-Karte vom Micro-SD-Kartenmodul
Stecken Sie die Micro-SD-Karte in einen USB-SD-Kartenleser
Schließen Sie den USB-SD-Kartenleser an den PC an
Sie sehen die Dateien wie folgt:
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.
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!