前面我们学了各种传感器、屏幕、音频播放,但ESP32自带的存储空间非常有限——放几个文件就满了。
如果要做数据记录仪(记录温度变化)、做音乐播放器(存几十首歌)、做摄像头(存照片),自带的存储根本不够用。这时候就需要SD卡来扩展存储空间了。
今天这节课,我们就来学习如何用ESP32读写SD卡,让ESP32拥有海量存储能力!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部 “文档”,在 “课程” → “ESP32 + MicroPython” 分类下,找到读写SD卡。

打开课件,你会看到本节课的最终效果:ESP32挂载SD卡后,成功向卡中写入1~100的数字,终端打印出挂载前后的文件列表对比。


第二步:SD卡模块与SPI通信
本节课使用的是SPI接口的SD卡模块,它通过SPI协议与ESP32通信。
SPI协议四根线:
| SCK | Serial Clock | 时钟信号,控制传输节奏 |
| MOSI | Master Out Slave In | 主机→从机,发送数据 |
| MISO | Master In Slave Out | 从机→主机,接收数据 |
| CS | Chip Select | 片选信号,选择通信对象 |

第三步:动手接线
SD卡模块有6个引脚,接线如下:
| VCC | 5V 或 3.3V | 电源正极(按模块要求) |
| GND | GND | 电源地 |
| CS | GPIO5 | 片选信号 |
| SCK | GPIO18 | SPI时钟 |
| MOSI | GPIO23 | 主机输出 |
| MISO | GPIO19 | 主机输入 |

第四步:上传SD卡驱动
在运行代码之前,需要先将SD卡驱动文件sdcard.py上传到ESP32。
操作步骤:
在MicroPython端新建sdcard.py文件,将课件中提供的完整驱动代码复制进去,然后上传到ESP32。

这个驱动文件的作用:
- 实现了SD卡的初始化、读写、挂载等底层操作
- 让MicroPython能够像操作U盘一样操作SD卡
第五步:代码——挂载SD卡并写入文件
import os
from machine import Pin, SoftSPI
from sdcard import SDCard
# 接线说明:
# MISO -> GPIO 19
# MOSI -> GPIO 23
# SCK -> GPIO 18
# CS -> GPIO 5
# 创建SPI对象
spisd = SoftSPI(–1, miso=Pin(19), mosi=Pin(23), sck=Pin(18))
# 创建SD卡对象
sd = SDCard(spisd, Pin(5))
# 挂载前,查看当前文件系统
print('未挂载SD之前:{}'.format(os.listdir()))
# 将SD卡挂载到 /sd 目录
vfs = os.VfsFat(sd)
os.mount(vfs, '/sd')
# 挂载后,查看文件系统
print('挂载SD之后:{}'.format(os.listdir()))
# 切换到SD卡目录
os.chdir('sd')
# 查看SD卡中的文件
print('SD卡中的文件:{}'.format(os.listdir()))
# 向SD卡写入文件
with open("/sd/test.txt", "w") as f:
for i in range(1, 101):
f.write(str(i) + "\\n")
print("已经将1 2 3….100写入到SD卡中的test.txt文件")
代码逻辑:
| 1 | 创建SPI对象 | 指定MISO/MOSI/SCK引脚 |
| 2 | 创建SD卡对象 | 指定CS引脚 |
| 3 | 挂载SD卡到/sd目录 | 像U盘一样插入 |
| 4 | 切换到SD卡目录 | os.chdir('sd') |
| 5 | 写入文件 | 打开test.txt,写入1~100 |
| 6 | 关闭文件 | 自动完成(with语句) |
第六步:保存运行,看效果!

点击运行按钮,终端依次打印:

验证写入是否成功:
再次运行程序(或新建一个读取代码),查看SD卡中的文件:
with open("/sd/test.txt", "r") as f:
print(f.read())
终端会打印出1到100的数字,证明文件写入成功!

SD卡能做什么?
| 数据记录仪 | 记录温度、湿度等传感器数据 |
| 音乐播放器 | 存储几十首WAV歌曲 |
| 摄像头存储 | 保存拍摄的照片 |
| 日志记录 | 记录程序运行日志 |
| 配置文件 | 保存WiFi密码等配置信息 |
| 数据备份 | 将重要数据备份到SD卡 |
SD卡与ESP32内置存储对比
| 容量 | 约4MB | 1GB~32GB |
| 可存储文件 | 少量代码和小文件 | 海量数据 |
| 读写速度 | 快 | 中等(SPI接口) |
| 是否需要额外硬件 | ❌ 不需要 | ✅ 需要SD卡模块 |
| 适合场景 | 程序代码 | 数据存储 |
常见问题
Q:SD卡识别不到怎么办?
A:检查以下几点:
Q:能同时使用多个SD卡吗?
A:可以,通过不同的CS引脚选择不同的SD卡,但需要额外的片选控制逻辑。
全程回顾
| 找到课程 | 文档→课程→ESP32+MicroPython→读写SD卡 | 了解SD卡读写 |
| 认识原理 | SPI协议 + 文件系统挂载 | 理解SD卡通信方式 |
| 上传驱动 | 上传sdcard.py到ESP32 | 驱动就绪 |
| 动手接线 | VCC→5V, GND→GND, CS→GPIO5, SCK→GPIO18, MOSI→GPIO23, MISO→GPIO19 | 硬件就位 |
| 打开代码 | 点击“打开”按钮 | 代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 挂载SD卡并写入文件! |



