文件系统概述
ESP32支持SPIFFS(SPI Flash File System)和LittleFS两种文件系统,用于在闪存中存储和管理文件。本课程将介绍如何使用这些文件系统来存储网页HTML文件和读写JSON格式的配置文件。
注意: SPIFFS是ESP32默认支持的文件系统,而LittleFS需要额外安装库,但性能更好,特别是在频繁写入场景。
1. 存储网页HTML文件
将网页文件存储在ESP32的文件系统中,可以方便地通过Web服务器提供网页服务。
1.1 准备工作
在Arduino IDE中安装ESP32 Filesystem Uploader插件
创建data文件夹,放入HTML文件
使用插件将文件上传到ESP32闪存
1.2 示例HTML文件
<!DOCTYPE html>
<html>
<head>
<title>ESP32控制面板</title>
<style>
body { font-family: Arial; text-align: center; }
button { padding: 10px 20px; font-size: 16px; }
</style>
</head>
<body>
<h1>ESP32控制面板</h1>
<button id="ledOn">打开LED</button>
<button id="ledOff">关闭LED</button>
</body>
</html>
1.3 在代码中读取HTML文件
#include <SPIFFS.h>
#include <WebServer.h>
WebServer server(80);
void setup() {
Serial.begin(115200);
// 初始化SPIFFS
if(!SPIFFS.begin(true)){
Serial.println("SPIFFS初始化失败");
return;
}
// 提供HTML文件
server.on("/", HTTP_GET, [](){
File file = SPIFFS.open("/index.html", "r");
if(!file){
server.send(404, "text/plain", "File not found");
return;
}
server.streamFile(file, "text/html");
file.close();
});
server.begin();
}
void loop() {
server.handleClient();
}
2. 配置文件读写(JSON解析)
JSON是常用的配置文件格式,ESP32可以方便地读写和解析JSON格式的配置文件。
2.1 安装必要的库
// 在Arduino IDE中安装以下库:
// - ArduinoJson (用于JSON解析)
// - LittleFS (如果需要使用LittleFS)
2.2 写入JSON配置文件
#include <SPIFFS.h>
#include <ArduinoJson.h>
void saveConfig() {
// 创建JSON文档
StaticJsonDocument<256> doc;
doc["ssid"] = "my_wifi";
doc["password"] = "12345678";
doc["server"] = "api.example.com";
doc["port"] = 8080;
// 打开文件写入
File file = SPIFFS.open("/config.json", "w");
if(!file){
Serial.println("无法打开文件写入");
return;
}
// 序列化JSON到文件
serializeJson(doc, file);
file.close();
Serial.println("配置已保存");
}
2.3 读取JSON配置文件
void loadConfig() {
// 打开文件读取
File file = SPIFFS.open("/config.json", "r");
if(!file){
Serial.println("无法打开文件读取");
return;
}
// 解析JSON
StaticJsonDocument<256> doc;
DeserializationError error = deserializeJson(doc, file);
if(error){
Serial.print("JSON解析失败: ");
Serial.println(error.c_str());
return;
}
// 获取配置值
const char* ssid = doc["ssid"];
const char* password = doc["password"];
const char* server = doc["server"];
int port = doc["port"];
Serial.println("配置加载成功:");
Serial.print("SSID: "); Serial.println(ssid);
Serial.print("服务器: "); Serial.print(server);
Serial.print(":"); Serial.println(port);
file.close();
}
重要提示: 在使用文件系统时,务必检查文件操作是否成功,并处理可能的错误情况。频繁写入会缩短闪存寿命,建议尽量减少写入次数。
SPIFFS与LittleFS比较
| 特性 | SPIFFS | LittleFS |
|---|---|---|
| 默认支持 | 是 | 需要额外安装 |
| 写入性能 | 较慢 | 更快 |
| 写入寿命 | 较短 | 更长 |
| 目录支持 | 有限 | 更好 |