ESP8266 - Registrar Dados com Timestamp no Cartão SD
Este tutorial oferece instruções completas sobre como registrar dados com timestamp em um cartão Micro SD usando o ESP8266. Os principais componentes abordados incluem:
ESP8266 - Como registrar dados com timestamp em um único arquivo no cartão Micro SD.
ESP8266 - Como registrar dados com timestamp em vários arquivos no cartão Micro SD, com um arquivo criado por dia.
O timestamp é obtido de um módulo RTC e é armazenado no cartão Micro SD junto com os dados correspondentes. As informações armazenadas no cartão Micro SD podem variar, abrangendo leituras de qualquer sensor ou um registro de acessos a uma fechadura de porta...
Para ilustrar o processo, este tutorial utiliza leituras de dois pinos analógicos. No entanto, o código fornecido é facilmente adaptável para acomodar diversos tipos de dados.
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
Se você não conhece o módulo de cartão Micro SD e o módulo RTC (incluindo pinagem, como funcionam e como programá-los), consulte os seguintes tutoriais:
Se você está usando um Ethernet shield ou qualquer outro shield que tenha um suporte 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 suporte de cartão Micro SD do shield.
ESP8266 - Registrar Dados com Timestamp no Cartão Micro SD
/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS D8#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}
Passos Rápidos
Para começar com o ESP8266 no Arduino IDE, siga estes passos:
Conecte a placa ESP8266 ao seu computador usando um cabo USB.
Abra o Arduino IDE no seu computador.
Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
Verifique se o cartão Micro SD está formatado como FAT16 ou FAT32 (você pode encontrar mais informações sobre isso na internet).
Copie o código e abra-o no Arduino IDE.
Clique no botão Upload no Arduino IDE para compilar e fazer o upload do código para o ESP8266.
Por fim, veja o resultado no Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E 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 aparecerá da seguinte forma.
Se você não tem um leitor de cartão SD USB, pode inspecionar o conteúdo do arquivo de log executando o código ESP8266 abaixo.
/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-log-data-with-timestamp-to-sd-card*/#include <SD.h>#define PIN_SPI_CS D8#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() {}
ESP8266 - Registrar Dados em vários arquivos
Registrar em um único arquivo pode levar a um tamanho grande com o tempo, dificultando a revisão. O código abaixo criará vários arquivos, um para cada dia, com o nome do arquivo contendo a informação da data no formato YYYYMMDD.txt.
/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS D8RTC_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}
Depois de concluir uma execução longa, se você:
Remover o cartão Micro SD do módulo de cartão Micro SD
Colocar 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!