ESP32 S3 - Enregistrer des données horodatées sur une carte SD

Apprenez à construire un enregistreur de données horodatées avec l'ESP32 S3 et un module carte Micro SD. Ce tutoriel vous montre comment capturer des données réelles et les associer à des informations précises de date et d'heure provenant d'un module RTC, avant de les écrire de façon persistante sur la carte.

Ce que vous allez construire :

  1. Un circuit connectant l'ESP32 S3 à un module carte Micro SD et à un module RTC DS3231
  2. Un croquis qui enregistre des entrées de données horodatées dans un seul fichier sur la carte Micro SD
  3. Un deuxième croquis qui répartit la sortie du journal dans des fichiers quotidiens nommés par date
  4. Une base pour des applications de journalisation de données et de surveillance IoT s'exécutant sur le long terme
ESP32 S3 Log Data with Timestamp to Micro SD Card

À propos du module carte Micro SD et du module RTC

Le module carte Micro SD se connecte à l'ESP32 S3 via le bus SPI et fournit un accès fiable au système de fichiers FAT16/FAT32 pour stocker des fichiers journaux qui peuvent grandir sur des jours ou des semaines. Le module RTC DS3231 maintient une heure très précise indépendamment de l'état d'alimentation de l'ESP32 S3, garantissant que chaque entrée de journal porte une date et une heure significatives même après une réinitialisation de la carte ou une coupure d'alimentation. Ensemble, ces deux modules forment l'épine dorsale d'une solution de journalisation de données robuste et autonome.

Spécifications clés

Pas familier avec le module carte Micro SD ou le module RTC, y compris leur brochage, leur fonctionnement, et leur programmation ? Explorez les tutoriels complets sur ces sujets ci-dessous :

Schéma de câblage

Connectez le module carte Micro SD et le module RTC DS3231 à l'ESP32 S3 en suivant le schéma ci-dessous, en gardant les fils courts pour minimiser le bruit sur le bus SPI. Vérifiez bien chaque connexion avant de mettre la carte sous tension pour éviter des erreurs d'initialisation.

ESP32 S3 Micro SD Card Module RTC Wiring Diagram

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Notes de sécurité

Assurez-vous toujours que la carte Micro SD est bien insérée dans le module et que la carte est formatée en FAT16 ou FAT32 avant d'exécuter tout code de journalisation, car une carte non formatée ou mal insérée empêchera l'initialisation. Ne retirez jamais la carte pendant que l'ESP32 S3 écrit activement des données, car cela peut corrompre le système de fichiers et détruire les entrées de journal précédemment enregistrées.

Broche du module Micro SD Broche ESP32 S3
VCC 5V
GND GND
MISO GPIO13 (MISO)
MOSI GPIO11 (MOSI)
SCK GPIO12 (SCK)
SS GPIO10 (CS)
Broche DS3231 Broche ESP32 S3
VCC 3,3V
GND GND
SDA GPIO8 (SDA)
SCL GPIO9 (SCL)

ESP32 S3 - Enregistrer des données horodatées sur une carte Micro SD

Aperçu du code

Le code suivant lit les valeurs de deux broches analogiques à chaque itération de boucle et ajoute une ligne CSV horodatée à un seul fichier journal sur la carte Micro SD. La date et l'heure sont récupérées depuis le module RTC DS3231, de sorte que chaque enregistrement porte une information d'horloge réelle précise qui rend le journal utile pour l'analyse longtemps après la collecte. Pour simplifier, les lectures de broches analogiques sont utilisées comme jeu de données d'exemple — le même modèle s'applique à n'importe quel capteur que vous câblez dans le circuit.

Code ESP32 S3

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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 }

Étapes rapides

  1. Nouveau sur ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Préparez la carte SD : formatez la carte Micro SD en FAT16 ou FAT32, puis insérez-la dans le module carte SD
  3. Câblez le circuit : connectez le module carte Micro SD et le module RTC DS3231 à l'ESP32 S3 en suivant le schéma de câblage ci-dessus
  4. Connectez l'ESP32 S3 : branchez l'ESP32 S3 à votre PC avec le câble USB Type-C
  5. Ouvrez Arduino IDE : lancez Arduino IDE sur votre ordinateur
  6. Sélectionnez la carte : choisissez ESP32 S3 dans le menu de carte
  7. Sélectionnez le port : choisissez le bon port COM pour votre ESP32 S3
  8. Ouvrez le Serial Monitor : ouvrez le Serial Monitor avant le téléversement (Tools > Serial Monitor)
  9. Copiez le code : copiez le code fourni ci-dessus
  10. Collez le code : collez-le dans un nouveau croquis Arduino IDE
  11. Téléversez : cliquez sur le bouton Upload pour flasher le code sur votre ESP32 S3
  12. Consultez les résultats : vérifiez le Serial Monitor pour confirmer que le journal est bien écrit
  13. Lisez le journal : détachez la carte Micro SD, insérez-la dans un lecteur de carte SD USB, connectez-le à votre PC, et ouvrez log.txt pour consulter les entrées enregistrées
  14. Astuce pro : ouvrez toujours le Serial Monitor avant de téléverser afin de capturer chaque message d'initialisation depuis le tout premier démarrage.

Sortie du Serial Monitor

Sortie attendue :

∞
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

Consulter le journal sur votre PC :

  • Détachez la carte Micro SD du module carte Micro SD
  • Insérez la carte Micro SD dans un lecteur de carte SD USB
  • Connectez le lecteur de carte SD USB à votre PC
  • Ouvrez le fichier log.txt — il ressemblera à l'image ci-dessous
ESP32 S3 Log Data with Timestamp to Micro SD Card

Si vous n'avez pas de lecteur de carte SD USB, vous pouvez lire le contenu du fichier journal directement en téléversant le code ESP32 S3 suivant.

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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 - Enregistrer des données dans plusieurs fichiers

Écrire toutes les entrées de journal dans un seul fichier fait grandir ce fichier indéfiniment et rend difficile la recherche d'entrées d'une date spécifique. Le code suivant résout ce problème en créant un fichier journal par jour, chaque nom de fichier étant réglé sur la date au format YYYYMMDD.txt, ce qui les rend faciles à identifier et à trier.

Aperçu du code

Le code suivant interroge le module RTC DS3231 à chaque itération de boucle pour déterminer la date actuelle, puis ouvre ou crée le fichier journal quotidien correspondant et y ajoute un enregistrement horodaté. Quand minuit passe et que la date change, le code bascule automatiquement vers un nouveau fichier — gardant vos journaux proprement répartis sans aucune intervention manuelle.

Code ESP32 S3

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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 }

Étapes rapides

  1. Nouveau sur ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Préparez la carte SD : formatez la carte Micro SD en FAT16 ou FAT32, puis insérez-la dans le module carte SD
  3. Câblez le circuit : connectez le module carte Micro SD et le module RTC DS3231 à l'ESP32 S3 en suivant le schéma de câblage ci-dessus
  4. Connectez l'ESP32 S3 : branchez l'ESP32 S3 à votre PC avec le câble USB Type-C
  5. Téléversez le code : copiez, collez, et téléversez le code de journalisation multi-fichiers ci-dessus
  6. Exécutez pendant la nuit : laissez l'ESP32 S3 fonctionner à travers minuit pour observer la rotation automatique des fichiers quotidiens
  7. Lisez les fichiers : après une longue exécution, retirez la carte Micro SD, insérez-la dans un lecteur de carte SD USB, et connectez-le à votre PC — vous verrez un fichier par jour comme indiqué ci-dessous
ESP32 S3 Log Data with Timestamp to Multiple Files
  1. Astuce pro : réglez le module RTC à la bonne heure avant votre première longue session de journalisation afin que chaque horodatage soit précis dès le début.

Sortie du Serial Monitor

Sortie attendue pendant l'exécution :

∞
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

Idées d'applications

La puissance de traitement de l'ESP32 S3 et sa connectivité sans fil intégrée en font une plateforme idéale pour construire des systèmes de journalisation de données horodatées s'exécutant sur le long terme dans des environnements réels.

  1. Moniteur environnemental : enregistrez les relevés de température, d'humidité, et de qualité de l'air à intervalles réguliers pour des études climatiques intérieures ou extérieures.
  2. Journal de contrôle d'accès : enregistrez chaque événement de verrouillage de porte avec un horodatage précis pour maintenir une piste d'audit de sécurité résistante à la falsification.
  3. Enregistreur de données agricoles : suivez l'humidité du sol, l'intensité lumineuse, et la température au fil des saisons de culture pour optimiser les conditions des cultures.
  4. Enregistreur de capteurs industriels : capturez les relevés de vibration, de pression, ou de courant provenant de machines pour soutenir des programmes de maintenance prédictive.
  5. Suivi de consommation d'énergie : stockez les statistiques quotidiennes d'utilisation d'électricité provenant d'un compteur intelligent ou d'un capteur de courant, pour la vérification de facturation et l'analyse d'efficacité.
  6. Station météo : enregistrez la pression barométrique, la vitesse du vent, et les données de précipitations avec horodatage pour l'analyse des tendances météo locales.

Vidéo

Regardez la vidéo pas à pas de ce projet ESP32 S3 ci-dessous.

Mettez-vous au défi

Les bases de journalisation ci-dessus sont prêtes à être étendues — essayez ces exercices progressivement plus exigeants pour approfondir vos compétences.

  1. Débutant : modifiez l'enregistreur à fichier unique pour écrire une ligne d'en-tête (par exemple, Timestamp,Value1,Value2) comme toute première ligne, afin que le fichier CSV s'ouvre correctement dans un logiciel de tableur.
  2. Débutant : ajoutez une troisième colonne de données au journal en lisant un capteur réel (comme un capteur de température DHT11) au lieu d'une broche analogique.
  3. Intermédiaire : implémentez une vérification de taille de fichier maximale afin que l'enregistreur crée automatiquement un nouveau fichier (par exemple, log_001.txt, log_002.txt) lorsque le fichier actuel dépasse 1 Mo.
  4. Intermédiaire : ajoutez une étape de téléversement WiFi qui, une fois par heure, lit le fichier journal actuel et l'envoie par POST à un serveur distant ou un espace de stockage cloud.
  5. Avancé : construisez un enregistreur auto-réparant qui détecte les échecs d'initialisation de la carte SD, réessaie plusieurs fois avec des délais croissants, et envoie une alerte via le Serial Monitor quand la carte ne peut pas être atteinte.
  6. Avancé : combinez l'enregistreur quotidien multi-fichiers avec un serveur web afin de pouvoir parcourir et télécharger les fichiers de jours individuels depuis un navigateur sur votre réseau local, sans retirer la carte SD.

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !