基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发

一、文件系统LittleFS的介绍

LittleFS是一个为微控制器设计的轻量级、可靠且高性能的文件系统。它专为嵌入式设备打造,拥有占用空间小、对硬件要求低的特点,同时保证在断电情况下数据的完整性和稳定性。

1.设计与特点

LittleFS的设计旨在提供嵌入式系统所需的高效、可靠的文件存储解决方案。它采用日志结构的文件系统设计,确保在突然断电或系统崩溃时数据不会损坏。同时,LittleFS通过磨损均衡算法来延长闪存的使用寿命,这对于使用有限次写入周期的闪存设备来说尤为重要。

2.性能

LittleFS在写入性能方面表现出色,特别是在处理大量小文件时。它的写入速度通常优于许多其他嵌入式文件系统,这使得它成为需要频繁写入操作的嵌入式应用的理想选择。

  1. 灵活性

LittleFS非常灵活,可以配置为使用设备的任何部分作为存储。这意味着你可以根据项目的需求选择使用内部闪存、外部SD卡或其他存储设备来存储文件。

  1. 兼容性

LittleFS与多种嵌入式开发环境和平台兼容,包括Arduino IDE。这使得它易于集成到各种嵌入式项目中,无论是使用ESP8266还是其他微控制器。

5.使用与集成

使用LittleFS库,你可以通过简单的API调用进行文件的创建、打开、读取、写入和删除等操作。这些API函数提供了直观且易于使用的接口,使得文件操作变得简单而高效。

6.安全性与稳定性

LittleFS注重数据的完整性和安全性。它采用了一系列措施来确保数据的完整性和稳定性,即使在恶劣的嵌入式环境中也能保持可靠的性能。

总的来说,LittleFS是一个强大、可靠且高效的嵌入式文件系统解决方案。它提供了易于使用的API、出色的性能和灵活的配置选项,使得在嵌入式设备上管理文件变得更加简单和高效。无论是用于数据存储、日志记录还是其他文件操作,LittleFS都是一个值得考虑的优秀选择。

二、库文件

需要Arduino IDE中已经安装LittleFS库。

三、代码

初始化LittleFS,代码如下

复制代码
#include <LittleFS.h>  

void setup() {  
  Serial.begin(115200);  
  if (!LittleFS.begin()) {  
    Serial.println("LittleFS Mount Failed");  
    return;  
  }  
  Serial.println("LittleFS Mounted");  
  // ... 其他初始化代码 ...  
}

一旦LittleFS被成功挂载,就可以使用它提供的API来创建、读取、写入和删除文件了。
写入文件,代码如下:

复制代码
void writeToFile(const char *filename, const char *data) {  
  File file = LittleFS.open(filename, FILE_WRITE);  
  if (!file) {  
    Serial.println("Failed to open file for writing");  
    return;  
  }  
  if (file.print(data)) {  
    Serial.println("File written");  
  } else {  
    Serial.println("Write failed");  
  }  
  file.close();  
}

读取文件

复制代码
void readFromFile(const char *filename) {  
  File file = LittleFS.open(filename, FILE_READ);  
  if (!file) {  
    Serial.println("Failed to open file for reading");  
    return;  
  }  
  Serial.println("Reading file:");  
  while (file.available()) {  
    Serial.write(file.read());  
  }  
  file.close();  
}

清理和卸载LittleFS

代码结束时,可以选择清理LittleFS占用的资源。在loop()函数的末尾或setup()函数中的某个错误处理路径中完成。

复制代码
void loop() {  
  // ... 代码 ...  
}  

void shutdown() {  
  LittleFS.end();  
}

处理存储空间

由于ESP8266的存储空间有限,需要确保不会超出其限制。LittleFS提供了一些API来检查和管理存储空间,比如LittleFS.space() 可以获取剩余空间。

注意事项

1.确保ESP8266有足够的闪存空间来支持LittleFS。

2.注意文件路径和名称的长度,因为嵌入式系统的资源有限。

3.频繁地创建和删除文件可能会降低闪存的使用寿命,所以尽量优化文件操作。

4.如果ESP8266断电或重启,LittleFS通常会保留其状态,建议在关键数据上进行额外的持久性保护。

完整代码如下

复制代码
#include <LittleFS.h>  
//#include "FS.h"

const char* testPath ="/log.txt";
const char* testInfo ="this is log";

void setup() {  
  Serial.begin(115200);  
  Serial.println();
  if (!LittleFS.begin()) {  
    Serial.println("LittleFS Mount Failed");  
    return;  
  }  
  Serial.println("LittleFS Mounted");  
  // ... 其他初始化代码 ...  
  writeToFile(testPath,testInfo);
  readFromFile(testPath);
  shutdown();
}

void writeToFile(const char *filename, const char *data) {  
  File file = LittleFS.open(filename, "w");  
  if (!file) {  
    Serial.println("Failed to open file for writing");  
    return;  
  }  
  if (file.print(data)) {  
    Serial.println("File written");  
  } else {  
    Serial.println("Write failed");  
  }  
  file.close();  
}

void readFromFile(const char *filename) {  
  File file = LittleFS.open(filename, "r");  
  if (!file) {  
    Serial.println("Failed to open file for reading");  
    return;  
  }  
  Serial.println("Reading file:");  
  while (file.available()) {  
    Serial.write(file.read());  
  }  
  file.close();  
}

void shutdown() {  
  LittleFS.end();  
}

void loop() {  
  // ... 代码 ...  
}  

运行效果,如下:

四、综合实验

LittleFS和JSON数据处理

复制代码
// Example: storing JSON configuration file in flash file system
//
// Uses ArduinoJson library by Benoit Blanchon.
// https://github.com/bblanchon/ArduinoJson
//
// Created Aug 10, 2015 by Ivan Grokhotkov.
//
// This example code is in the public domain.

#include <ArduinoJson.h>
#include "FS.h"
#include <LittleFS.h>

// more and possibly updated information can be found at:
// https://arduinojson.org/v6/example/config/

bool loadConfig() {
  File configFile = LittleFS.open("/config.json", "r");
  if (!configFile) {
    Serial.println("Failed to open config file");
    return false;
  }

  StaticJsonDocument<200> doc;
  auto error = deserializeJson(doc, configFile);
  if (error) {
    Serial.println("Failed to parse config file");
    return false;
  }

  const char* serverName = doc["serverName"];
  const char* accessToken = doc["accessToken"];

  // Real world application would store these values in some variables for
  // later use.

  Serial.print("Loaded serverName: ");
  Serial.println(serverName);
  Serial.print("Loaded accessToken: ");
  Serial.println(accessToken);
  return true;
}

bool saveConfig() {
  StaticJsonDocument<200> doc;
  doc["serverName"] = "api.example.com";
  doc["accessToken"] = "128du9as8du12eoue8da98h123ueh9h98";

  File configFile = LittleFS.open("/config.json", "w");
  if (!configFile) {
    Serial.println("Failed to open config file for writing");
    return false;
  }

  serializeJson(doc, configFile);
  return true;
}

void setup() {
  Serial.begin(115200);
  Serial.println("");
  delay(1000);
  Serial.println("Mounting FS...");

  if (!LittleFS.begin()) {
    Serial.println("Failed to mount file system");
    return;
  }


  if (!saveConfig()) {
    Serial.println("Failed to save config");
  } else {
    Serial.println("Config saved");
  }

  if (!loadConfig()) {
    Serial.println("Failed to load config");
  } else {
    Serial.println("Config loaded");
  }
}

void loop() {}

运行效果:

相关推荐
霸气十足+拼命+追梦少年3 小时前
vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法
服务器·ide·vscode
QL.ql8 小时前
(一)vscode搭建espidf环境
ide·vscode·编辑器
cxylay13 小时前
LaTeX(排版系统)Texlive(环境)Vscode(编辑器)环境配置与安装
ide·vscode·编辑器·latex·texlive
羊仔AI探索17 小时前
Windows也能用!Claude Code硬核指南
ide·人工智能·windows·ai·aigc
zzc92119 小时前
Pycharm选好的env有包,但是IDE环境显示无包
ide·python·pycharm·异常·import·
心灵宝贝21 小时前
PyCharm Community 2024.2.3.exe 安装教程(详细步骤,附安装包下载)
ide·python·pycharm
里昆1 天前
【AI】Pycharm中要注意Python程序文件的位置
ide·python·学习·pycharm
时光の尘1 天前
ESP32入门开发·VScode空白项目搭建·点亮一颗LED灯
c语言·ide·vscode·freertos·led·esp32-s3·esp32-idf
一枚小小程序员哈2 天前
基于Android的音乐播放器/基于android studio的音乐系统/音乐管理系统
android·ide·android studio
fananchong22 天前
制作 VSCode 插件
ide·vscode·编辑器·ai辅助编程·vscode 插件