1. ESP32与SPIFFS初探:什么是SPIFFS?为什么在ESP32上要用它?
各位同学,咱们今天聊点实在的。你手里这块ESP32,跑Wi-Fi、连蓝牙、控制GPIO,样样都行。但有个问题——它怎么存东西?
我说的不是程序代码,而是那些网页文件、配置文件、传感器日志。这些东西,你总不能每次都写到代码里重新编译吧?
嗯,这就是SPIFFS要解决的问题。
1.1 什么是SPIFFS?
SPIFFS,全称SPI Flash File System。说白了,它就是一个专门给SPI闪存用的文件系统。
ESP32芯片内部集成了Flash存储器,通常有4MB到16MB不等。SPIFFS就是在这块Flash上划出一片区域,让你像操作电脑硬盘一样,读写文件。
我刚开始接触ESP32时,也觉得奇怪:单片机搞什么文件系统?后来做项目才明白,没有文件系统,你连个网页都传不上去。
核心概念:SPIFFS = 在Flash上实现的一个轻量级文件系统,支持目录、文件读写、空间管理。它不需要外部存储芯片,直接用ESP32板载的Flash。
1.2 为什么在ESP32上要用SPIFFS?
这个问题,我当年也问过自己。咱们来对比一下常见的存储方案:
| 特性 | SPIFFS | SD卡 | EEPROM |
|---|---|---|---|
| 存储介质 | 板载Flash | 外部SD卡 | 内部EEPROM |
| 容量 | 几百KB~几MB | 几GB~几十GB | 几十字节~几KB |
| 读写速度 | 中等 | 快 | 慢 |
| 文件系统 | 支持(SPIFFS) | 支持(FAT32等) | 不支持 |
| 硬件成本 | 0元(板载) | 需要读卡器+卡 | 0元(板载) |
| 适用场景 | 网页、配置、日志 | 大文件、多媒体 | 少量配置参数 |
你看,SPIFFS的优势很明显:
- 零硬件成本——ESP32板载Flash本来就闲着,不用白不用
- 文件操作方便——你可以直接上传HTML、CSS、JS文件,程序里用路径访问
- 掉电不丢失——Flash是非易失性存储,断电后数据还在
- 适合网页应用——ESP32做Web服务器时,所有静态资源都放SPIFFS里
我的经验:做智能家居控制面板时,我把整个Web界面(包括图表库、字体文件)都塞进SPIFFS。ESP32启动后直接当Web服务器用,手机浏览器就能访问控制页面。省掉了外挂SD卡的麻烦。
1.3 SPIFFS vs SD卡 vs EEPROM
这三个东西,各有各的脾气。我踩过的坑,今天一并告诉你。
SPIFFS
- 优点:无需额外硬件,文件操作简单,适合存储网页、配置文件
- 缺点:容量有限(通常1~2MB),频繁写入会磨损Flash
- 我建议:放只读的静态资源,或者偶尔更新的配置
SD卡
- 优点:容量大,速度快,支持大文件
- 缺点:需要额外硬件(读卡器模块),占用GPIO,功耗高
- 我建议:记录大量日志、存储图片或音频时用
EEPROM
- 优点:字节级读写,寿命长(约100万次擦写)
- 缺点:容量极小(通常512字节),不能存文件
- 我建议:存Wi-Fi密码、设备ID这类少量关键参数
避坑指南:我曾经在一个项目里,用SPIFFS频繁记录传感器数据(每秒一次)。结果一个月后,Flash就坏了。后来才明白,SPIFFS的磨损均衡机制有限,高频写入会加速Flash老化。从那以后,高频数据我都用SD卡或外挂EEPROM。
1.4 SPIFFS在ESP32中的典型应用
咱们这门课的核心,就是SPIFFS + 网页加载。你想想看,一个典型的场景:
- ESP32作为Web服务器
- 所有网页文件(index.html, style.css, app.js)都放在SPIFFS里
- 浏览器访问ESP32的IP地址时,直接从SPIFFS读取文件返回
- 用户通过网页控制设备,配置参数也存回SPIFFS
这样做的好处是:程序代码和网页资源分离。你改网页样式,不需要重新编译固件,直接上传新文件到SPIFFS就行。
1.5 一张图看懂SPIFFS
下面这张图,帮你理清SPIFFS在ESP32系统中的位置:
1.6 什么时候不该用SPIFFS?
说实话,SPIFFS不是万能的。我遇到过几个场景,它就不太合适:
- 高频写入——每秒写一次数据,Flash很快报废
- 大文件存储——超过2MB的文件,SPIFFS空间不够
- 需要目录树——SPIFFS的目录支持很弱,嵌套太深会出问题
- 多任务并发访问——SPIFFS不是线程安全的,需要加锁
我的建议:SPIFFS最适合做“一次写入,多次读取”的场景。比如网页资源、设备配置、固件版本信息。如果你需要频繁记录数据,考虑用SD卡或者外挂EEPROM。
1.7 本章小结
咱们这一章,把SPIFFS的来龙去脉讲清楚了。你记住三点:
- SPIFFS是ESP32板载Flash上的文件系统
- 它适合存网页、配置、日志这类文件
- 和SD卡、EEPROM各有分工,别混用