บทเรียน ESP32 40/55 - การอ่านและเขียนลงการ์ด Micro SD | ชุดเรียนรู้ IoT ESP32 ของ SunFounder
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการอ่านและเขียนข้อมูลลงในการ์ด micro SD โดยใช้ ESP32 และบอร์ดขยาย ESP32 ของ SunFounder ซึ่งจะช่วยให้เราสามารถจัดเก็บข้อมูลและเรียกดูข้อมูลในภายหลังได้ ซึ่งเป็นสิ่งจำเป็นสำหรับแอปพลิเคชัน IoT หลายประเภท เมื่อจบบทช่วยสอนนี้ คุณจะมีการตั้งค่าที่ใช้งานได้ซึ่งสามารถสร้าง เขียน และอ่านไฟล์จากการ์ด micro SD ได้
ในการเริ่มต้น ตรวจสอบให้แน่ใจว่าการ์ด micro SD ของคุณถูกฟอร์แมตเป็น FAT32 อย่างถูกต้อง เนื่องจากเป็นระบบไฟล์ที่จำเป็นสำหรับ ESP32 ในการทำงานร่วมกับการ์ด เราจะใช้ไลบรารี SD_MMC ซึ่งช่วยให้การเข้าถึงไฟล์บนการ์ด micro SD ง่ายขึ้น สิ่งสำคัญที่ควรทราบคือ ความจุสูงสุดของการ์ด micro SD ไม่ควรเกิน 32 GB
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักในโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 และโมดูลการ์ด micro SD ESP32 เป็นไมโครคอนโทรลเลอร์ที่อเนกประสงค์ซึ่งมาพร้อมความสามารถ Wi-Fi และ Bluetooth ในตัว ทำให้เหมาะสำหรับแอปพลิเคชัน IoT โมดูลการ์ด micro SD ช่วยให้ ESP32 อ่านและเขียนข้อมูลลงในการ์ดได้ ทำให้สามารถจัดเก็บข้อมูลสำหรับแอปพลิเคชันต่างๆ ได้
การ์ด micro SD ทำงานโดยใช้ระบบไฟล์เพื่อจัดเก็บข้อมูลในรูปแบบที่มีโครงสร้าง การ์ดสื่อสารกับ ESP32 ผ่านอินเทอร์เฟซ SD_MMC ซึ่งช่วยให้การอ่านและเขียนไฟล์มีประสิทธิภาพ การตั้งค่านี้สามารถใช้สำหรับการบันทึกข้อมูล การบันทึกรูปภาพ หรือแอปพลิเคชันอื่นๆ ที่ต้องการการจัดเก็บข้อมูลถาวร
คำแนะนำการเดินสายไฟ

ในการเดินสายไฟการ์ด micro SD เข้ากับ ESP32 ให้ทำตามขั้นตอนเหล่านี้:
ขั้นแรก เชื่อมต่อพินไฟและกราวด์ เชื่อมต่อพิน VCC ของโมดูลการ์ด micro SD เข้ากับพิน 3.3V บน ESP32 และเชื่อมต่อพิน GND เข้ากับพิน GND หนึ่งในพินบน ESP32 จากนั้น เชื่อมต่อพินข้อมูล: เชื่อมต่อพิน CS (Chip Select) ของโมดูลการ์ด micro SD เข้ากับพิน 5 บน ESP32 พิน MOSI (Master Out Slave In) เข้ากับพิน 23 พิน MISO (Master In Slave Out) เข้ากับพิน 19 และพิน SCK (Serial Clock) เข้ากับพิน 18 ตรวจสอบให้แน่ใจว่าการเชื่อมต่อเหล่านี้แน่นหนาเพื่อหลีกเลี่ยงปัญหาการสื่อสาร
หากคุณใช้บอร์ดขยายอื่น หมายเลขพินอาจแตกต่างกัน ดังนั้นโปรดอ้างอิงเอกสารเฉพาะของบอร์ดของคุณ การเดินสายไฟมีความสำคัญอย่างยิ่งต่อการทำงานที่ประสบความสำเร็จในการอ่านและเขียนไฟล์ลงในการ์ด micro SD
ตัวอย่างโค้ดและคำอธิบาย
ตอนนี้ เรามาดูส่วนหลักของโค้ดที่โต้ตอบกับการ์ด micro SD กัน การตั้งค่าเริ่มต้นด้วยการเริ่มต้นการสื่อสารแบบอนุกรมและตรวจสอบว่าการ์ด micro SD ถูกเมานต์สำเร็จหรือไม่
Serial.begin(115200); // เริ่มต้นการสื่อสารแบบอนุกรม
if (!SD_MMC.begin()) { // ตรวจสอบว่าการ์ด SD ถูกเมานต์สำเร็จหรือไม่
Serial.println("Failed to mount SD card"); // พิมพ์ข้อความแสดงข้อผิดพลาดหากการ์ด SD เมานต์ไม่สำเร็จ
return;
}
ในโค้ดส่วนนี้ การสื่อสารแบบอนุกรมถูกตั้งค่าที่อัตราบอด 115200 ซึ่งสำคัญสำหรับการตรวจสอบเอาต์พุต ฟังก์ชัน SD_MMC.begin() พยายามเมานต์การ์ด SD หากล้มเหลว ข้อความแสดงข้อผิดพลาดจะถูกพิมพ์ไปยังซีเรียลมอนิเตอร์
ส่วนถัดไปของโค้ดสร้างไฟล์ใหม่บนการ์ด micro SD และเขียนข้อความหนึ่งบรรทัดลงไป
File file = SD_MMC.open("/test.txt", FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing"); // พิมพ์ข้อความแสดงข้อผิดพลาดหากเปิดไฟล์ไม่สำเร็จ
return;
}
if (file.println("Test file write")) { // เขียนข้อความหนึ่งบรรทัดลงในไฟล์
Serial.println("File write successful"); // พิมพ์ข้อความแสดงความสำเร็จหากการเขียนสำเร็จ
} else {
Serial.println("File write failed"); // พิมพ์ข้อความแสดงข้อผิดพลาดหากการเขียนล้มเหลว
}
file.close(); // ปิดไฟล์
ที่นี่ ไฟล์ชื่อ test.txt ถูกเปิดในโหมดเขียน หากเปิดไฟล์สำเร็จ จะเขียนข้อความหนึ่งบรรทัดและพิมพ์ข้อความแสดงความสำเร็จ หากการเขียนล้มเหลว จะพิมพ์ข้อความแสดงข้อผิดพลาดแทน สุดท้าย ไฟล์จะถูกปิดเพื่อให้แน่ใจว่าการเปลี่ยนแปลงถูกบันทึก
โค้ดยังอ่านไฟล์จากไดเรกทอรีรากของการ์ด micro SD และพิมพ์ชื่อและขนาดของไฟล์เหล่านั้น
File root = SD_MMC.open("/"); // เปิดไดเรกทอรีรากของการ์ด SD
while (File file = root.openNextFile()) { // วนลูปผ่านไฟล์ทั้งหมดในไดเรกทอรีราก
Serial.print(file.name()); // พิมพ์ชื่อไฟล์
Serial.print("\t");
Serial.println(file.size()); // พิมพ์ขนาดไฟล์
file.close(); // ปิดไฟล์
}
โค้ดส่วนนี้เปิดไดเรกทอรีรากและวนลูปผ่านไฟล์ทั้งหมด โดยพิมพ์ชื่อและขนาดของไฟล์ไปยังซีเรียลมอนิเตอร์ ซึ่งมีประโยชน์สำหรับการตรวจสอบว่าข้อมูลถูกเขียนสำเร็จและดูเนื้อหาของการ์ด SD
สำหรับรายละเอียดเพิ่มเติม โปรดอ้างอิงโค้ดเต็มที่โหลดไว้ด้านล่างบทความ
การสาธิต / สิ่งที่คาดหวัง
หลังจากอัปโหลดโค้ดและรีเซ็ต ESP32 คุณควรเห็นข้อความในซีเรียลมอนิเตอร์ที่ระบุว่าการ์ด SD ถูกเมานต์สำเร็จหรือไม่ และการดำเนินการไฟล์สำเร็จหรือไม่ คุณจะเห็นรายการไฟล์ที่พบในไดเรกทอรีราก ซึ่งยืนยันว่าข้อมูลถูกเขียนอย่างถูกต้อง (ในวิดีโอที่ 13:45)
ข้อผิดพลาดทั่วไป ได้แก่ การตรวจสอบให้แน่ใจว่าการ์ด micro SD ถูกฟอร์แมตและเชื่อมต่ออย่างถูกต้อง รวมถึงการตรวจสอบว่าซีเรียลมอนิเตอร์ถูกตั้งค่าที่อัตราบอดที่ถูกต้อง หากเกิดปัญหาใดๆ โปรดตรวจสอบการเดินสายไฟและการเชื่อมต่อของคุณอีกครั้ง
ไทม์สแตมป์ในวิดีโอ
- 00:00 เริ่มต้น
- 1:45 แนะนำการ์ด Micro SD บน ESP32
- 3:46 หน้าเอกสาร
- 4:43 โค้ด Arduino
- 8:09 การเลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
- 9:51 การสาธิตการเขียนการ์ด MicroSD
- 11:12 การดูไฟล์ที่เขียนบนพีซี
#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
สิ่งที่คุณอาจต้องการ
-
อาลีเอ็กซ์เพรสPurchase a microSD card module from AliExpresss.click.aliexpress.com
-
แบงกูดPurchase a microSD card module from Banggoodbanggood.com
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารESP32 Tutorial 40/55 - SunFounder doc page for MicroSD carddocs.sunfounder.com
-
ภายนอกPurchase a microSD card module from AliExpresss.click.aliexpress.com
-
ภายนอก
-
ภายนอก
-
ภายนอกPurchase a microSD card module from Banggoodbanggood.com
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน