ESP32 - Enregistrer des données avec horodatage sur une carte SD

Dans ce guide, nous explorerons le processus d'enregistrement de données avec des horodatages sur une carte Micro SD en utilisant ESP32. Plus précisément, nous aborderons les sujets suivants :

Les informations temporelles sont extraites d'un module RTC puis enregistrées sur la carte Micro SD en même temps que les données collectées.

Les données enregistrées sur la carte Micro SD peuvent englober une variété d'informations, telles que :

Pour simplifier, ce tutoriel va montrer le processus en lisant les valeurs provenant de deux broches analogiques, servant d'exemple de jeu de données. Le code fourni peut être facilement adapté pour accueillir différents types de données selon les besoins.

Enregistrement ESP32 sur carte Micro SD

Préparation du matériel

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×Micro SD Card
1×Micro SD Card Module
1×USB 3.0 SD Card Reader
1×Real-Time Clock DS3231 Module
1×CR2032 battery
1×Jumper Wires
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du module de carte Micro SD et du module RTC

Non familiarisé avec le module de carte Micro SD et le module RTC, y compris leurs brochages, leurs fonctionnalités et leur programmation ? Explorez des tutoriels complets sur ces sujets ci-dessous :

Diagramme de câblage

Schéma de câblage du module de carte SD ESP32

This image is created using Fritzing. Click to enlarge image

Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.

※ NOTE THAT:

Si vous utilisez un shield Ethernet ou tout autre shield disposant d'un support de carte Micro SD, vous n'avez pas besoin d'utiliser le module de carte Micro SD. Vous devez simplement insérer la carte Micro SD dans le support de carte Micro SD du shield.

ESP32 - Enregistrer des données avec horodatage sur une carte micro SD

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 #define FILE_NAME "/log.txt" RTC_DS3231 rtc; File myFile; void setup() { Serial.begin(9600); // 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 }

Étapes rapides

  • Si vous utilisez l'ESP32 pour la première fois, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
  • Réalisez le câblage comme sur l'image ci-dessus.
  • Connectez la carte ESP32 à votre PC via un câble micro USB
  • Ouvrez Arduino IDE sur votre PC.
  • Sélectionnez la bonne carte ESP32 (par exemple, ESP32 Dev Module) et le port COM.
  • Assurez-vous que la carte Micro SD est formatée en FAT16 ou FAT32 (cherchez sur Google)
  • Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
  • Cliquez sur le bouton Upload sur Arduino IDE pour charger le code sur l'ESP32
  • Vérifiez le résultat sur le moniteur série.
COM6
Send
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
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Détachez la carte Micro SD du module de carte Micro SD
  • Insérez la carte Micro SD dans un lecteur de carte SD USB
  • Connectez le lecteur de carte SD USB au PC
  • Ouvrez le fichier log.txt sur votre PC, il ressemble à ce qui suit
Enregistrement des données de l'ESP32 sur une carte Micro SD avec informations horaires

Si vous n'avez pas de lecteur de carte SD USB, vous pouvez vérifier le contenu du fichier journal en exécutant le code ESP32 ci-dessous.

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-log-data-with-timestamp-to-sd-card */ #include <SD.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 #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 - Enregistrer des données dans plusieurs fichiers

Écrire des logs dans un fichier unique entraîne avec le temps un fichier de grande taille et rend difficile la vérification. Le code ci-dessous permettra d'écrire le fichier de log en plusieurs parties :

  • Un fichier par jour
  • Le nom du fichier est la date au format : AAAAMMJJ.txt
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 RTC_DS3231 rtc; File myFile; char filename[] = "/yyyymmdd.txt"; // filename (without extension) should not exceed 8 chars void setup() { Serial.begin(9600); // 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 }

Après une longue course, si vous :

  • Détachez la carte Micro SD du module de carte Micro SD
  • Insérez la carte Micro SD dans un lecteur de carte SD USB
  • Connectez le lecteur de carte SD USB au PC
  • Vous verrez les fichiers comme suit :
Journalisation ESP32 sur plusieurs fichiers de carte Micro SD

Vidéo

Références de fonction

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!