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 :
Enregistrement de données avec horodatages dans un fichier unique sur une carte Micro SD à l'aide d'un ESP32.
Enregistrement de données avec horodatages dans plusieurs fichiers sur une carte Micro SD, un fichier étant dédié à chaque jour.
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 :
Relevés de données de n'importe quel capteur.
Un journal d'accès à une serrure de porte.
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.
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 :
Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, consultez les instructions dans le tutoriel suivant : Comment alimenter l'ESP32..
※ Note:
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;voidsetup() {Serial.begin(9600);// set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db);// SETUP RTC MODULEif (!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("--------------------"));}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: Issue encountered while attempting to open the file "));Serial.println(FILE_NAME); }delay(2000); // delay 2 seconds}
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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 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
ESP32 Dev Module on COM15
2
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
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;voidsetup() {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 CardSerial.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); }}voidloop() {}
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 GPIO5RTC_DS3231 rtc;File myFile;char filename[] = "/yyyymmdd.txt"; // filename (without extension) should not exceed 8 charsvoidsetup() {Serial.begin(9600);// set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db);// SETUP RTC MODULEif (!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("--------------------"));}voidloop() {DateTimenow = rtc.now();intyear = now.year();intmonth = now.month();intday = 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 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: 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
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 !