搜索代码

ESP32教程40/55 - 读写Micro SD卡 | SunFounder的ESP32物联网学习套件

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通信,该接口支持高效的文件读写。此设置可用于记录数据、保存图像或任何需要数据持久化的应用。

接线说明

ESP32-40-micro-sd-card-1

要将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上查看写入的文件

图像

ESP32-40-micro-sd-card-1
ESP32-40-micro-sd-card-1
ESP32-40-micro-sd-card-2
ESP32-40-micro-sd-card-2
841-ESP32 Tutorial 40/55- Arduino code for micro SD card
语言: C++
#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() {} // 空循环函数,不执行任何操作

|||您可能需要的东西

文件📁

没有可用的文件。