ESP8266 Ghi dữ liệu có dấu thời gian vào thẻ SD

Hướng dẫn này cung cấp đầy đủ các hướng dẫn về việc ghi dữ liệu có dấu thời gian vào thẻ nhớ microSD sử dụng ESP8266. Các thành phần chính được đề cập bao gồm:

Dấu thời gian được lấy từ một mô-đun RTC và được lưu trên thẻ Micro SD cùng với dữ liệu tương ứng. Thông tin được lưu trên thẻ Micro SD có thể khác nhau, bao gồm các giá trị đo từ bất kỳ cảm biến nào hoặc nhật ký truy cập khóa cửa.

Để minh họa quá trình này, hướng dẫn này sử dụng các giá trị đọc từ hai chân analog. Tuy nhiên, mã được cung cấp có thể dễ dàng điều chỉnh để phù hợp với nhiều loại dữ liệu khác nhau.

ESP8266 NodeMCU ghi log vào thẻ micro sd

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×Micro SD Card
1×Micro SD Card Module
1×(Tùy chọn) MicroSD to SD Memory Card Adapter
1×Real-Time Clock DS3231 Module
1×CR2032 battery
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về mô-đun thẻ nhớ microSD và mô-đun RTC

Nếu bạn chưa quen với mô-đun thẻ nhớ Micro SD và mô-đun RTC (bao gồm sơ đồ chân, cách hoạt động và cách lập trình), vui lòng tham khảo các hướng dẫn sau:

Sơ đồ đấu dây

sơ đồ nối dây của module thẻ micro sd ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

※ Lưu ý:

Nếu bạn đang sử dụng một Ethernet shield hoặc bất kỳ shield nào khác có ngăn đựng thẻ Micro SD, bạn không cần sử dụng Mô-đun Thẻ Micro SD. Tất cả những gì bạn cần làm là chèn thẻ Micro SD vào ngăn đựng thẻ Micro SD trên shield.

ESP8266 - Ghi dữ liệu có dấu thời gian vào thẻ Micro SD

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/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; void setup() { Serial.begin(9600); // SETUP RTC MODULE if (!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("--------------------")); } 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: error on opening file ")); Serial.println(FILE_NAME); } delay(2000); // delay 2 seconds }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Nối các thành phần như được thể hiện trong sơ đồ.
  • Kết nối bảng ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bảng ESP8266 phù hợp, ví dụ NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
  • Đảm bảo thẻ Micro SD được định dạng dưới dạng FAT16 hoặc FAT32 (bạn có thể tìm thêm thông tin về điều này trên mạng).
  • Sao chép mã và mở nó trong Arduino IDE.
  • Nhấp vào nút Tải lên trong Arduino IDE để biên dịch và tải mã lên ESP8266.
  • Cuối cùng, xem kết quả trên Serial Monitor.
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  
  • Rút thẻ Micro SD khỏi mô-đun thẻ Micro SD.
  • Lắp thẻ Micro SD vào đầu đọc thẻ SD USB.
  • Kết nối đầu đọc thẻ SD USB với máy tính.
  • Mở tệp log.txt trên máy tính của bạn; nó sẽ xuất hiện như sau.
ghi log ESP8266 NodeMCU vào thẻ micro sd kèm thông tin thời gian.

Nếu bạn không có đầu đọc thẻ SD USB, bạn có thể xem nội dung của tệp nhật ký bằng cách thực thi mã ESP8266 dưới đây.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/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; void setup() { 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 Card Serial.print(ch); // print the character to Serial Monitor } myFile.close(); } else { Serial.print(F("SD Card: error on opening file ")); Serial.println(FILE_NAME); } } void loop() { }

ESP8266 - Ghi dữ liệu nhật ký vào nhiều tệp tin

Ghi log vào một tệp duy nhất có thể khiến kích thước tăng lên theo thời gian, khiến việc xem lại trở nên khó khăn. Đoạn mã dưới đây sẽ tạo ra nhiều tệp, mỗi ngày một tệp, với tên tệp chứa thông tin ngày ở định dạng YYYYMMDD.txt.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS D8 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()) { 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("--------------------")); } void loop() { DateTime now = rtc.now(); int year = now.year(); int month = now.month(); int day = 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 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: error on opening file ")); Serial.println(filename); } delay(2000); // delay 2 seconds }

Một khi bạn đã hoàn thành một cuộc chạy dài, nếu bạn:

  • Rút thẻ Micro SD khỏi mô-đun thẻ Micro SD
  • Đặt thẻ Micro SD vào đầu đọc thẻ SD USB
  • Kết nối đầu đọc thẻ SD USB với máy tính
  • Bạn sẽ có thể xem các tập tin như sau:
ESP8266 NodeMCU ghi log vào thẻ nhớ microsd thành nhiều tệp tin

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.