ESP32 - Registrar Dados com Data e Hora no Cartão SD
Neste guia, vamos explorar o processo de registrar dados com data e hora (timestamp) em um Cartão Micro SD usando o ESP32. Mais especificamente, vamos abordar os seguintes tópicos:
Registrar dados com timestamp em um único arquivo no Cartão Micro SD usando o ESP32.
Registrar dados com timestamp em vários arquivos no Cartão Micro SD, com um arquivo dedicado a cada dia.
A informação de tempo é obtida de um módulo RTC e depois é gravada no Cartão Micro SD junto com os dados coletados.
Os dados registrados no Cartão Micro SD podem incluir vários tipos de informação, como:
Leituras de dados de qualquer sensor.
Um registro de acessos a uma fechadura de porta.
Para simplificar, este tutorial vai demonstrar o processo lendo valores de dois pinos analógicos, usados como um conjunto de dados de exemplo. O código fornecido pode ser facilmente adaptado para outros tipos de dados, conforme necessário.
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Sobre o Módulo de Cartão Micro SD e o Módulo RTC
Não conhece o Módulo de Cartão Micro SD e o módulo RTC, incluindo sua pinagem, funcionamento e programação? Explore os tutoriais completos sobre esses temas abaixo:
This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
※ Nota:
Se você usar um shield Ethernet ou qualquer shield que tenha um slot para Cartão Micro SD, não precisa usar o Módulo de Cartão Micro SD. Basta inserir o Cartão Micro SD no slot de Cartão Micro SD do shield.
ESP32 - Registrar Dados com Data e Hora no Cartão Micro SD
/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/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}
Conecte a placa ESP32 ao seu PC usando um cabo USB Type-C
Abra a Arduino IDE no seu PC.
Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
Verifique se o Cartão Micro SD está formatado em FAT16 ou FAT32 (pesquise no Google)
Copie o código acima e abra-o na Arduino IDE
Clique no botão Upload na Arduino IDE para carregar o código no ESP32
Veja o resultado no Serial Monitor.
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
Remova o Cartão Micro SD do módulo de Cartão Micro SD
Insira o Cartão Micro SD em um leitor de Cartão SD USB
Conecte o leitor de Cartão SD USB ao PC
Abra o arquivo log.txt no seu PC; ele fica como abaixo
Se você não tiver um leitor de Cartão SD USB, pode verificar o conteúdo do arquivo de log executando o Código ESP32 abaixo.
/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/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 - Registrar Dados em Vários Arquivos
Gravar o log em um único arquivo faz com que ele fique muito grande com o tempo e difícil de verificar. O código abaixo vai gravar o log em vários arquivos:
Um arquivo por dia
O nome do arquivo é a informação da data: YYYYMMDD.txt
/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/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}
Depois de um longo tempo de execução, se você:
Remover o Cartão Micro SD do módulo de Cartão Micro SD
Inserir o Cartão Micro SD em um leitor de Cartão SD USB
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!