Hướng dẫn ESP32 40/55 - Đọc và ghi vào thẻ Micro SD | Bộ học IoT ESP32 của SunFounder
Trong hướng dẫn này, chúng ta sẽ học cách đọc và ghi vào thẻ micro SD bằng ESP32 và bo mạch mở rộng ESP32 của SunFounder. Điều này sẽ cho phép chúng ta lưu trữ dữ liệu và truy xuất lại sau này, điều này rất cần thiết cho nhiều ứng dụng IoT. Đến cuối hướng dẫn này, bạn sẽ có một thiết lập hoạt động có thể tạo, ghi và đọc tệp từ thẻ micro SD.
Để bắt đầu, hãy đảm bảo rằng thẻ micro SD của bạn được định dạng đúng chuẩn FAT32, vì đây là hệ thống tệp bắt buộc để ESP32 tương tác với thẻ. Chúng ta sẽ sử dụng thư viện SD_MMC, giúp đơn giản hóa quá trình truy cập tệp trên thẻ micro SD. Điều quan trọng cần lưu ý là dung lượng tối đa của thẻ micro SD không được vượt quá 32 GB.
Giải thích về Phần cứng
Các thành phần chính trong dự án này bao gồm vi điều khiển ESP32 và mô-đun thẻ micro SD. ESP32 là một vi điều khiển đa năng có tích hợp Wi-Fi và Bluetooth, lý tưởng cho các ứng dụng IoT. Mô-đun thẻ micro SD cho phép ESP32 đọc và ghi vào thẻ, cho phép lưu trữ dữ liệu cho nhiều ứng dụng khác nhau.
Thẻ micro SD hoạt động bằng cách sử dụng hệ thống tệp để lưu trữ dữ liệu một cách có cấu trúc. Nó giao tiếp với ESP32 thông qua giao diện SD_MMC, cho phép đọc và ghi tệp hiệu quả. Thiết lập này có thể được sử dụng để ghi nhật ký dữ liệu, lưu hình ảnh hoặc bất kỳ ứng dụng nào khác yêu cầu lưu trữ dữ liệu lâu dài.
Hướng dẫn Đấu dây

Để đấu dây thẻ micro SD với ESP32, hãy làm theo các bước sau:
Đầu tiên, kết nối các chân nguồn và chân đất. Kết nối chân VCC của mô-đun thẻ micro SD với chân 3.3V trên ESP32 và kết nối chân GND với một trong các chân GND trên ESP32. Tiếp theo, kết nối các chân dữ liệu: kết nối chân CS (Chip Select) của mô-đun thẻ micro SD với chân 5 trên ESP32, chân MOSI (Master Out Slave In) với chân 23, chân MISO (Master In Slave Out) với chân 19 và chân SCK (Serial Clock) với chân 18. Đảm bảo các kết nối này chắc chắn để tránh các sự cố giao tiếp.
Nếu bạn đang sử dụng một bo mạch mở rộng khác, số chân có thể khác, vì vậy hãy tham khảo tài liệu cụ thể cho bo mạch của bạn. Việc đấu dây là rất quan trọng để vận hành thành công việc đọc và ghi tệp vào thẻ micro SD.
Ví dụ Mã & Giải thích
Bây giờ, chúng ta hãy xem các phần chính của mã tương tác với thẻ micro SD. Quá trình thiết lập bắt đầu bằng việc khởi tạo giao tiếp nối tiếp và kiểm tra xem thẻ micro SD có được gắn kết thành công hay không.
Serial.begin(115200); // Khởi tạo giao tiếp nối tiếp
if (!SD_MMC.begin()) { // Kiểm tra xem thẻ SD có được gắn kết thành công không
Serial.println("Không thể gắn kết thẻ SD"); // In thông báo lỗi nếu thẻ SD không gắn kết được
return;
}
Trong đoạn mã này, giao tiếp nối tiếp được đặt ở tốc độ baud 115200, điều này quan trọng để theo dõi đầu ra. Hàm SD_MMC.begin() cố gắng gắn kết thẻ SD; nếu thất bại, một thông báo lỗi sẽ được in ra màn hình nối tiếp.
Phần tiếp theo của mã tạo một tệp mới trên thẻ micro SD và ghi một dòng văn bản vào đó.
File file = SD_MMC.open("/test.txt", FILE_WRITE);
if (!file) {
Serial.println("Không thể mở tệp để ghi"); // In thông báo lỗi nếu không mở được tệp
return;
}
if (file.println("Ghi tệp kiểm tra")) { // Ghi một dòng văn bản vào tệp
Serial.println("Ghi tệp thành công"); // In thông báo thành công nếu thao tác ghi thành công
} else {
Serial.println("Ghi tệp thất bại"); // In thông báo lỗi nếu thao tác ghi thất bại
}
file.close(); // Đóng tệp
Ở đây, một tệp có tên test.txt được mở ở chế độ ghi. Nếu tệp được mở thành công, nó sẽ ghi một dòng văn bản và in thông báo thành công. Nếu thao tác ghi thất bại, một thông báo lỗi sẽ được in ra thay thế. Cuối cùng, tệp được đóng lại để đảm bảo các thay đổi được lưu.
Mã cũng đọc các tệp từ thư mục gốc của thẻ micro SD và in tên cũng như kích thước của chúng.
File root = SD_MMC.open("/"); // Mở thư mục gốc của thẻ SD
while (File file = root.openNextFile()) { // Lặp qua tất cả các tệp trong thư mục gốc
Serial.print(file.name()); // In tên tệp
Serial.print("\t");
Serial.println(file.size()); // In kích thước tệp
file.close(); // Đóng tệp
}
Đoạn mã này mở thư mục gốc và duyệt qua tất cả các tệp, in tên và kích thước của chúng ra màn hình nối tiếp. Điều này hữu ích để xác minh rằng dữ liệu đã được ghi thành công và xem nội dung của thẻ SD.
Để biết thêm chi tiết, hãy tham khảo mã đầy đủ được tải bên dưới bài viết.
Trình diễn / Điều gì sẽ xảy ra
Sau khi tải mã lên và đặt lại ESP32, bạn sẽ thấy các thông báo trong màn hình nối tiếp cho biết thẻ SD có được gắn kết thành công hay không và các thao tác tệp có thành công hay không. Bạn cũng sẽ thấy danh sách các tệp trong thư mục gốc, xác nhận rằng dữ liệu đã được ghi chính xác (trong video ở phút 13:45).
Các lỗi thường gặp bao gồm đảm bảo thẻ micro SD được định dạng và kết nối đúng cách, cũng như kiểm tra màn hình nối tiếp được đặt đúng tốc độ baud. Nếu có bất kỳ sự cố nào xảy ra, hãy kiểm tra lại dây và các kết nối của bạn.
Mốc thời gian Video
- 00:00 Bắt đầu
- 1:45 Giới thiệu về thẻ Micro SD trên ESP32
- 3:46 Trang tài liệu
- 4:43 Mã Arduino
- 8:09 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
- 9:51 Trình diễn ghi thẻ MicroSD
- 11:12 Xem các tệp đã ghi trên PC
#include "SD_MMC.h"
void setup() {
Serial.begin(115200); // Initialize serial communication
if (!SD_MMC.begin()) { // Check if SD card is mounted successfully
Serial.println("Failed to mount SD card"); // Print error message if SD card failed to mount
return;
}
// Create a file in the root directory of SD card and open it in write mode.
File file = SD_MMC.open("/test.txt", FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing"); // Print error message if file failed to open
return;
}
if (file.println("Test file write")) { // Write a line of text to the file
Serial.println("File write successful"); // Print success message if write operation is successful
} else {
Serial.println("File write failed"); // Print error message if write operation failed
}
file.close(); // Close the file
File root = SD_MMC.open("/"); // Open the root directory of SD card
if (!root) {
Serial.println("Failed to open directory"); // Print error message if directory failed to open
return;
}
Serial.println("Files found in root directory:"); // Print the list of files found in the root directory
while (File file = root.openNextFile()) { // Loop through all the files in the root directory
Serial.print(" ");
Serial.print(file.name()); // Print the filename
Serial.print("\t");
Serial.println(file.size()); // Print the filesize
file.close(); // Close the file
}
}
void loop() {} // Empty loop function, does nothing
Common Course Links
Common Course Files
Nghĩ bạn có thể cần
-
AliExpressPurchase a microSD card module from AliExpresss.click.aliexpress.com
-
BanggoodPurchase a microSD card module from Banggoodbanggood.com
Tài nguyên & tài liệu tham khảo
-
Tài liệuESP32 Tutorial 40/55- SunFounder doc page for MicroSD carddocs.sunfounder.com
-
Bên ngoàiPurchase a microSD card module from AliExpresss.click.aliexpress.com
-
Bên ngoài
-
Bên ngoài
-
Bên ngoàiPurchase a microSD card module from Banggoodbanggood.com
Tập tin📁
Không có tệp nào khả dụng.