玩转 ESP32 + Arduino (二十一) SPIFFS文件系统

本文介绍了ESP32如何使用SPIFFS文件系统,包括SPIFFS的相关函数,如SPIFFS.begin(), SPIFFS.open, SPIFFS.format(), SPIFFS.exists(), SPIFFS.remove(), SPIFFS.rename()等。此外,还详细阐述了File类的函数,如file.print(), file.println(), file.find(), file.findUntil(), file.close()等,并通过简单测试展示了FILE_WRITE和FILE_APPEND模式的区别。" 112993346,10537146,使用Electron进行Chrome远程调试,"['Electron开发', '前端调试', 'Chrome DevTools']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 文件系统 SPIFFS

ESP32 自带SPIFFS.h库用来管理文件系统
注意: 此文件系统是没用文件层次的 比如你建立一个 /doc/test.txt 那这个txt的名字就是 doc/test, 而不是在doc目录下有个 test.txt

#include "SPIFFS.h"

二. SPIFFS相关函数

1. SPIFFS.begin(); //开启SPIFFS

参数:
- formatOnFail : 打开失败就格式化 (bool)
- *basePath :  根目录 
- maxOpenFiles  : 最大可打开文件数量

返回值: 打开成功或者失败

bool fs::SPIFFSFS::begin(bool formatOnFail = false, const char *basePath = "/spiffs", uint8_t maxOpenFiles = (uint8_t)'\n')
SPIFFS.begin();

2. SPIFFS.open //创建或打开文件

参数:
- path : 文件路径
- mode : 打开方式, 可选:
                       FILE_READ (读文件) 
                       FILE_WRITE (写文件) 
                       FILE_APPEND (添加内容)
返回值: 一个File类型的对象, 其实就是打开的文件对象

File FS::open(const char* path, const char* mode){}

我们可以看到 SPIFFS.open其实是继承自 FS类的

File file = SPIFFS.open("/test.txt", FILE_WRITE);
注意:

File重载了 Boolean运算符, 如果文件打开了 file就为true

if(!file){
     Serial.println("There was an error opening the file for writing");
     return;
}

关于File类型的函数放在下一节

3. SPIFFS.format() //文件系统格式化

SPIFFS.format();

4. SPIFFS.exists("/test.txt") //判断有没有某个文件

SPIFFS.exists("/test.txt"
### 使用ESP32实现云相框的功能 #### 1. 环境准备 为了使用ESP32实现云相框功能,首先需要搭建Arduino开发环境。这一步骤已经在之前的文档中有详细介绍[^1]。确保安装了必要的工具链以及ESP32的核心库。 #### 2. 功能需求分析 云相框的主要功能是从云端获取图片并显示在屏幕上。因此,方案设计需考虑以下几个方面: - **网络连接**:通过Wi-Fi模块接入互联网。 - **数据传输**:从指定服务器下载图片文件。 - **图像处理与显示**:将接收到的图片解码并在显示屏上渲染。 对于屏幕部分,可以选择TFT LCD屏或其他适合嵌入式系统的显示器。如果希望进一步增强用户体验,还可以引入触摸屏支持交互操作。 #### 3. 软件架构概述 整个项目的软件结构大致分为三个层次: - **底层驱动层**:负责管理硬件资源,比如SPI通信接口配置、GPIO初始化等。 - **中间件层**:提供通用服务函数,例如HTTP请求封装、JPEG解析算法调用等功能模块。 - **应用层逻辑**:定义具体业务流程,包括定时刷新照片列表、切换展示模式等内容。 #### 4. 关键技术点说明 ##### (1) 图像加载与显示 由于大多数情况下存储于远程位置的照片都是压缩格式(如JPEG),所以需要用到专门用于此类任务的第三方类库。这里推荐采用`esp-jpeg-decoder`或者类似的高效解决方案来进行本地转换工作[^2]。 另外,在实际部署过程中可能还会遇到内存不足的问题,这时可以通过分块读取的方式来缓解压力;即每次只把一小部分内容载入RAM后再传递给图形引擎绘制出来即可完成最终效果呈现。 ##### (2) 定时更新机制 为了让设备能够持续不断地轮播最新上传至个人账户下的作品集锦,则有必要设置好周期性的同步动作计划表单。可以借助RTOS自带的任务调度器创建独立线程执行此职责,并且配合NTP时间校准保持精准度。 以下是简单的伪代码表示方法: ```cpp void setup() { Serial.begin(115200); WiFi.begin(ssid, password); // 连接到WiFi网络 while (WiFi.status() != WL_CONNECTED){ delay(1000); Serial.println("Connecting to WiFi..."); } } void loop(){ HTTPClient http; String url = "http://example.com/image.jpg"; http.begin(url); int httpResponseCode = http.GET(); if(httpResponseCode>0){ File fsFile = SPIFFS.open("/image.jpg", FILE_WRITE); if(!fsFile){ Serial.println("- failed to create file"); }else{ size_t bytesWritten = fsFile.write((uint8_t*)http.getStreamPtr(), http.getSize()); if(bytesWritten == http.getSize()){ Serial.printf("File was written successfully with %u bytes\n",bytesWritten); displayImage(); // 显示图片 }else{ Serial.printf("Only %u of %u were written\n",bytesWritten,http.getSize()); } fsFile.close(); } http.end(); }else{ Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpResponseCode).c_str()); } delay(5000); // 每隔五秒重新拉取一次新图 } ``` 上述片段展示了基本的数据抓取过程及其后续保存步骤。其中涉及到几个重要概念——`HTTPClient`对象代表发起GET请求的操作实体;而`SPIFFS`则是一种轻量级文件系统允许我们在闪存区域内部署临时资产副本供离线状态下访问之用。 #### 5. 结论 综上所述,利用ESP32构建一款具备联网能力的小型数码画廊并非难事。只要按照既定框架逐步推进各项工作环节便能顺利达成目标。当然除了基础版之外还有很多扩展方向值得探索尝试,譬如增加语音播报解说词、手势识别翻页控制等等特色玩法均能让成品更加丰富多彩! ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值