ESP32与SD卡数据存储实战教程

2025-06发布4次浏览

ESP32是一款功能强大的物联网微控制器,支持Wi-Fi和蓝牙通信。结合SD卡模块,它可以轻松实现数据的存储与读取功能,非常适合用于日志记录、数据采集等场景。本文将详细介绍如何使用ESP32与SD卡模块进行数据存储,并通过代码示例展示具体操作步骤。


一、硬件准备

在开始之前,请确保你已经准备好以下硬件:

  1. ESP32开发板:如乐鑫ESP32-WROOM-32。
  2. SD卡模块:通常使用SPI接口的SD卡模块。
  3. Micro SD卡:建议使用FAT32格式化的SD卡。
  4. 面包板和跳线:用于连接ESP32与SD卡模块。

硬件连接

ESP32与SD卡模块的连接如下表所示:

ESP32 PinSD Card Module Pin
5VVCC
GNDGND
GPIO13MOSI
GPIO12MISO
GPIO14SCLK
GPIO15CS

注意:部分ESP32型号可能需要调整引脚配置,请根据实际硬件参考手册确认。


二、软件环境搭建

  1. 安装Arduino IDE:下载并安装最新版本的Arduino IDE。
  2. 添加ESP32支持
    • 打开Arduino IDE,进入文件 -> 偏好设置
    • 在“附加开发板管理器网址”中添加以下URL:https://dl.espressif.com/dl/package_esp32_index.json
    • 打开工具 -> 开发板 -> 开发板管理器,搜索并安装“ESP32”。
  3. 安装SD库
    • Arduino IDE默认包含SD库,无需额外安装。
    • 如果需要更高级的功能,可以考虑安装SDFSFatFS库。

三、代码实现

1. 初始化SD卡

首先编写代码初始化SD卡模块,并检查是否成功挂载。

#include <SPI.h>
#include <SD.h>

// 定义CS引脚
const int chipSelect = 15;

void setup() {
  Serial.begin(115200);

  // 初始化SD卡
  if (!SD.begin(chipSelect)) {
    Serial.println("SD卡初始化失败!");
    return;
  }
  Serial.println("SD卡初始化成功!");
}

void loop() {
  // 循环空运行
}

2. 写入数据到SD卡

接下来,我们尝试将数据写入SD卡中的一个文本文件。

#include <SPI.h>
#include <SD.h>

const int chipSelect = 15;

void setup() {
  Serial.begin(115200);

  if (!SD.begin(chipSelect)) {
    Serial.println("SD卡初始化失败!");
    return;
  }
  Serial.println("SD卡初始化成功!");

  // 创建或打开文件
  File dataFile = SD.open("data.txt", FILE_WRITE);

  if (dataFile) {
    // 写入数据
    dataFile.println("Hello, SD Card!");
    dataFile.println("This is a test.");
    dataFile.close();
    Serial.println("数据写入成功!");
  } else {
    Serial.println("无法创建或打开文件!");
  }
}

void loop() {
  // 循环空运行
}

3. 从SD卡读取数据

为了验证数据存储是否成功,我们可以从SD卡中读取文件内容。

#include <SPI.h>
#include <SD.h>

const int chipSelect = 15;

void setup() {
  Serial.begin(115200);

  if (!SD.begin(chipSelect)) {
    Serial.println("SD卡初始化失败!");
    return;
  }
  Serial.println("SD卡初始化成功!");

  // 打开文件
  File dataFile = SD.open("data.txt");

  if (dataFile) {
    Serial.println("文件内容:");
    while (dataFile.available()) {
      Serial.write(dataFile.read());
    }
    dataFile.close();
  } else {
    Serial.println("无法打开文件!");
  }
}

void loop() {
  // 循环空运行
}

四、流程图解析

以下是ESP32与SD卡交互的整体逻辑流程图:

graph TD
    A[启动] --> B{初始化SD卡};
    B --成功--> C[创建/打开文件];
    B --失败--> E[输出错误信息];
    C --> D{写入数据};
    D --成功--> F[关闭文件];
    D --失败--> G[输出错误信息];
    F --> H[完成];

五、扩展讨论

  1. 数据格式优化:除了简单的文本文件,还可以使用JSON、CSV等结构化格式存储数据,便于后续分析。
  2. 定时存储机制:结合RTC模块,可以实现按时间间隔存储数据的功能。
  3. 异常处理:在实际应用中,需要考虑SD卡损坏、文件系统错误等情况,并设计相应的容错机制。