ESP32 教學 40/55 - 讀寫 Micro SD 卡 | SunFounder 嘅 ESP32 IoT 學習套件
喺呢個教學入面,我哋會學吓點樣用ESP32同SunFounder ESP32擴展板去讀同寫micro SD卡。咁樣我哋就可以儲存數據同之後攞返出嚟,呢樣嘢對好多IoT應用嚟講好重要。到呢個教學結束嘅時候,你就會有一個可以喺micro SD卡上面建立、寫入同讀取檔案嘅可用設定。
開始之前,確保你嘅micro SD卡已經正確格式化做FAT32,因為呢個係ESP32同張卡互動所需要嘅檔案系統。我哋會用SD_MMC函式庫,佢可以簡化存取micro SD卡上檔案嘅過程。要注意嘅係,micro SD卡嘅最大容量唔應該超過32 GB。
硬件講解
呢個項目嘅主要組件包括ESP32微控制器同micro SD卡模組。ESP32係一個多功能嘅微控制器,內置Wi-Fi同藍牙功能,好適合IoT應用。micro SD卡模組令到ESP32可以讀取同寫入張卡,為各種應用提供數據儲存。
Micro SD卡透過使用檔案系統以結構化方式儲存數據。佢透過SD_MMC介面同ESP32通訊,令到讀寫檔案更加有效率。呢個設定可以用嚟記錄數據、儲存圖片,或者任何需要數據持久保存嘅應用。
接線說明

要將micro SD卡接到ESP32,跟住以下步驟:
首先,連接電源同接地引腳。將micro SD卡模組嘅VCC引腳連接到ESP32上嘅3.3V引腳,然後將GND引腳連接到ESP32上其中一個GND引腳。跟住,連接數據引腳:將micro SD卡模組嘅CS(晶片選擇)引腳連接到ESP32上嘅引腳5,MOSI(主出從入)引腳連接到引腳23,MISO(主入從出)引腳連接到引腳19,而SCK(串行時鐘)引腳連接到引腳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 ESP32上Micro SD卡嘅介紹
- 3:46 文檔頁面
- 4:43 Arduino代碼
- 8:09 喺Arduino IDE度選擇ESP32板同COM端口
- 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
文件📁
冇文件可用。