【Esp32S3 | Arduino】在Arduino中使用SD卡读写以及解决loop无法读写问题


前言

ESP32-S3 是一款功能强大的 Wi-Fi + 蓝牙双模微控制器,广泛应用于物联网 (IoT) 项目。许多项目需要存储数据,例如传感器读数、日志文件、配置文件等。SD 卡是一种常见的、廉价的、大容量的存储解决方案。

在 Arduino 环境下使用 ESP32-S3 操作 SD 卡非常方便,Arduino 提供了 SD 库,可以轻松实现 SD 卡的读写操作。然而,在实际开发中,有时会遇到在 loop() 函数中无法正常读写 SD 卡的问题。这通常是由于 SD 卡操作的阻塞特性、文件系统未正确关闭、或者硬件连接问题导致的。

本文将详细介绍如何在 Arduino 环境下使用 ESP32-S3 进行 SD 卡的读写操作,并重点解决 loop() 函数中无法读写 SD 卡的问题。通过本文的学习,您将能够:

  • 了解 ESP32-S3 的 SDMMC 接口。
  • 掌握 Arduino SD 库的基本用法。
  • 学会如何在 ESP32-S3 上初始化 SD 卡。
  • 实现文件的创建、写入、读取和删除操作。
  • 理解 loop() 函数中 SD 卡读写失败的常见原因。
  • 掌握解决 loop() 函数中 SD 卡读写问题的技巧。

在setup里面初始化了SD,但是在loop中使用SD的时候未能正常使用,经检查是loop中SD未初始化。

在论坛寻找大神的解决方案未果后(大佬们都不知道这个问题,而且还说是不是内存卡有问题,就离谱),只能自己着手看代码,解决这个问题了。


一、 硬件准备

  • ESP32-S3 开发板: 确保您的 ESP32-S3 开发板支持 SD 卡接口。
  • SD 卡: 建议使用 Class 10 或更高速度等级的 SD 卡,容量根据您的需求选择。
  • SD 卡模块(如果开发板没有内置): 如果您的开发板没有内置 SD 卡插槽,您需要一个 SD 卡模块。
  • 杜邦线: 用于连接 SD 卡模块和 ESP32-S3 开发板。

二、 硬件连接

ESP32-S3 支持两种 SD 卡接口:

  • SDMMC: 使用 ESP32-S3 的 SDMMC 控制器,速度更快,推荐使用。
  • SPI: 使用 SPI 接口,速度较慢,但兼容性更好。

本文只讨论SPI的方式,因为我就是这么用的,后面也许会跟进SDMMC的方式

**

参考接线

**

去esp32-arduino的仓库下找到示例代码,就能找到这段连接方式,虽然芯片差不多的时候连接方式是差不多的,但是也有细微差异,比如esp32c3就有差异,所以按照你的方式去连接电路。

引脚 功能 ESP32-S3 引脚 (示例)
CS 片选 GPIO5
MOSI 主出从入 GPIO23
MISO 主入从出 GPIO19
SCK 时钟 GPIO18

三、软件设置

1. 安装库

在 Arduino IDE 中,打开“工具”->“管理库…”,搜索“SD”,安装由“Arduino”提供的 SD 库。

2. 包含头文件

在您的 Arduino 代码中,包含 SD.h 头文件:

#include <SD.h>

四、 初始化 SD 卡

setup() 函数中初始化 SD 卡。直接参考代码即可。

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

#define SD_CS_PIN 5 // 定义 CS 引脚

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

    // 初始化 SD 卡 (SPI)
    if (!SD.begin(SD_CS_PIN)) {
   
        Serial.println("Card Mount Failed");
        return;
    }
  // 其余和SDMMC类似
}

void loop() {
   
  // ...
}

五、SD 卡读写操作

1. 创建文件

// 创建一个新文件 (如果文件已存在,则会被覆盖)
File file = SD.open("/test.txt", FILE_WRITE);
if (!file) {
   
  Serial.println("Failed to open file for writing");
  return;
}
file.close(); // 关闭文件

2. 写入文件

File file = SD.open("/test.txt", FILE_WRITE); // 以写入模式打开文件
if (!file) {
   
  Serial.println("Failed to open file for writing");
  return;
}

// 写入文本
if (file.println("Hello, SD Card!")) {
   
  Serial.println("File w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广龙宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值