【自学嵌入式(10)ESP8266闪存文件系统概述】

上一篇文章,我们已系统学习了ESP8266在网络服务器方面的学习,本文将围绕该开发板内部的闪存文件系统展开。

闪存文件系统

闪存文件系统(通常是 SPIFFS)是一种轻量级的文件系统,用于在闪存中存储和管理文件

优点

轻量级: 占用资源少,适合 ESP8266 等资源有限的设备。
磨损均衡: 通过均衡写入操作,延长闪存寿命。
断电保护: 确保文件系统在意外断电时的完整性。
支持文件和目录: 虽然 SPIFFS 是一个扁平文件系统,但可以通过路径模拟目录结构。

用途

存储网页文件: 用于 Web 服务器,存储 HTML、CSS、JavaScript 等文件。
存储配置文件: 保存设备的配置参数(如 Wi-Fi 密码、传感器校准数据等)。
存储日志文件: 记录设备运行日志。
存储其他数据: 如图片、音频等小型文件。

结构

扁平文件系统: SPIFFS 是一个扁平文件系统,所有文件都存储在一个列表中,路径中的 / 只是文件名的一部分。
路径模拟目录: SPIFFS 不支持真正的目录结构,但可以通过路径分隔符 / 模拟目录。例如,/data/config.txt 表示一个文件。

注意事项

闪存寿命: 闪存的写入次数有限(通常为 10 万次),频繁写入会缩短闪存寿命。建议优化写入操作,避免频繁写入。
文件系统损坏: 意外断电可能导致文件系统损坏。建议定期备份重要数据。
空间管理: SPIFFS 的空间有限(通常为 1MB~3MB),需合理管理文件大小和数量。
④ 在 Arduino IDE 中,需要通过选择开发板型号和 Flash 大小来配置 SPIFFS 分区,否则会无法上传文件,如下图所示:
设置 Flash 大小为 4MB (FS:3MB OTA:~512KB)
在这里插入图片描述

FS库

FS.h 是 ESP8266 中用于操作文件系统的一个头文件,它提供了对 SPIFFS(Serial Peripheral Interface Flash File System)文件系统的支持。通过 FS.h,开发者可以方便地在 ESP8266 的闪存中创建、读取、写入和删除文件。

① FS

FS 类是文件系统的基类,提供了文件系统的通用操作,SPIFFS是该类配置的一个全局对象,编写程序时可以直接使用该对象操作。

重要方法:

  • begin(): 初始化文件系统
  • format(): 格式化文件系统,清除内部已有的所有文件
  • open(const char* path, const char* mode): 打开一个文件,分为"r"只读、"w"只写、"a"追加等
  • exists(const char* path): 检查文件或目录是否存在
  • remove(const char* path): 删除指定文件。
  • mkdir(const char* path): 在指定目录下创建目录(SPIFFS 不支持真正的目录,此方法仅用于兼容性)
  • rmdir(const char* path): 删除目录(SPIFFS 不支持真正的目录,此方法仅用于兼容性)
  • openDir(const String& path): 用于遍历以path开头的文件,返回以这些组成的Dir对象

② File

File类是一个文件类,用于表示一个文件或目录。

  • available(): 检查文件中是否还有可读取的数据,若有则返回可读字节数
  • read(): 读取文件中的一个字节,读取失败返回-1
  • write(uint8_t data): 向文件中写入一个字节
  • print() / println(const String &data): 向文件中写入字符串或数据
  • close(): 关闭文件,通常在操作文件后使用
  • name(): 获取文件名
  • size(): 获取文件大小

③ Dir

Dir是一个目录类,用于遍历目录中的文件

  • next(): 移动到下一个文件
  • fileName(): 获取当前文件的名称,返回文件名称
  • fileSize(): 获取当前文件的大小
  • isDirectory(): 判断当前文件是否为目录

闪存文件系统实例

① 写入信息(w)

#include <FS.h>  

String file_name = "notes.txt"; //被读取的文件位置和名称

void setup() {
   
   
  Serial.begin(9600);
  Serial.println("");
  // 先格式化再写入信息
  Serial.println("SPIFFS format start");
  SPIFFS.format();    // 格式化SPIFFS
  Serial.println("SPIFFS format finish");
  
  if(SPIFFS.begin()){
   
    // 启动SPIFFS
    Serial.println("SPIFFS Started.");
  } else {
   
   
    Serial.println("SPIFFS Failed to Start.");
  }
  
  File dat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值