ESP32教程40/55 - 读写Micro SD卡 | SunFounder的ESP32物联网学习套件
在本教程中,我们将学习如何使用ESP32和SunFounder ESP32扩展板读取和写入micro SD卡。这将使我们能够存储数据并在之后检索数据,这对于许多物联网应用至关重要。在本教程结束时,您将拥有一个可以创建、写入和读取micro SD卡文件的工作设置。
首先,请确保您的micro SD卡已正确格式化为FAT32,因为这是ESP32与卡交互所需的文件系统。我们将使用SD_MMC库,它简化了访问micro SD卡上文件的过程。需要注意的是,micro SD卡的最大容量不应超过32 GB。
硬件说明
本项目的主要组件包括ESP32微控制器和micro SD卡模块。ESP32是一款功能多样的微控制器,内置Wi-Fi和蓝牙功能,非常适合物联网应用。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 在PC上查看写入的文件
#include "SD_MMC.h"
void setup() {
Serial.begin(115200); // 初始化串行通信
if (!SD_MMC.begin()) { // 检查SD卡是否成功挂载
Serial.println("Failed to mount SD card"); // 如果SD卡无法挂载,则打印错误消息。
return;
}
// 在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(); // 关闭文件
File root = SD_MMC.open("/"); // 打开SD卡的根目录
if (!root) {
Serial.println("Failed to open directory"); // 如果目录打开失败,打印错误信息。
return;
}
Serial.println("Files found in root directory:"); // 打印根目录中找到的文件列表
while (File file = root.openNextFile()) { // 遍历根目录中的所有文件
Serial.print(" ");
Serial.print(file.name()); // 打印文件名
Serial.print("\t");
Serial.println(file.size()); // 打印文件大小
file.close(); // 关闭文件
}
}
void loop() {} // 空循环函数,不执行任何操作
Common Course Links
Common Course Files
|||您可能需要的东西
-
全球速卖通Purchase a microSD card module from AliExpresss.click.aliexpress.com
-
BanggoodPurchase a microSD card module from Banggoodbanggood.com
资源与参考
-
文档ESP32 教程 40/55 - SunFounder MicroSD 卡文档页面docs.sunfounder.com
-
外部Purchase a microSD card module from AliExpresss.click.aliexpress.com
-
外部Purchase a microSD card module from Banggoodbanggood.com
文件📁
没有可用的文件。