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 + 网页加载。你想想看,一个典型的场景:

  1. ESP32作为Web服务器
  2. 所有网页文件(index.html, style.css, app.js)都放在SPIFFS里
  3. 浏览器访问ESP32的IP地址时,直接从SPIFFS读取文件返回
  4. 用户通过网页控制设备,配置参数也存回SPIFFS

这样做的好处是:程序代码和网页资源分离。你改网页样式,不需要重新编译固件,直接上传新文件到SPIFFS就行。

1.5 一张图看懂SPIFFS

下面这张图,帮你理清SPIFFS在ESP32系统中的位置:

ESP32存储体系结构 ESP32 主芯片 板载 Flash 存储器(4MB~16MB) 程序代码区(固件) SPIFFS 网页文件(HTML/CSS/JS) 配置文件(JSON/INI) SPIFFS 是 Flash 中划分出的文件系统区域,与程序代码区相互独立

1.6 什么时候不该用SPIFFS?

说实话,SPIFFS不是万能的。我遇到过几个场景,它就不太合适:

  • 高频写入——每秒写一次数据,Flash很快报废
  • 大文件存储——超过2MB的文件,SPIFFS空间不够
  • 需要目录树——SPIFFS的目录支持很弱,嵌套太深会出问题
  • 多任务并发访问——SPIFFS不是线程安全的,需要加锁

我的建议:SPIFFS最适合做“一次写入,多次读取”的场景。比如网页资源、设备配置、固件版本信息。如果你需要频繁记录数据,考虑用SD卡或者外挂EEPROM。

1.7 本章小结

咱们这一章,把SPIFFS的来龙去脉讲清楚了。你记住三点:

  1. SPIFFS是ESP32板载Flash上的文件系统
  2. 它适合存网页、配置、日志这类文件
  3. 和SD卡、EEPROM各有分工,别混用