当前位置:   article > 正文

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

arduino littlefs

一、文件系统LittleFS的介绍

 LittleFS是一个为微控制器设计的轻量级、可靠且高性能的文件系统。它专为嵌入式设备打造,拥有占用空间小、对硬件要求低的特点,同时保证在断电情况下数据的完整性和稳定性。
1.设计与特点
LittleFS的设计旨在提供嵌入式系统所需的高效、可靠的文件存储解决方案。它采用日志结构的文件系统设计,确保在突然断电或系统崩溃时数据不会损坏。同时,LittleFS通过磨损均衡算法来延长闪存的使用寿命,这对于使用有限次写入周期的闪存设备来说尤为重要。
2.性能
LittleFS在写入性能方面表现出色,特别是在处理大量小文件时。它的写入速度通常优于许多其他嵌入式文件系统,这使得它成为需要频繁写入操作的嵌入式应用的理想选择。
3. 灵活性
LittleFS非常灵活,可以配置为使用设备的任何部分作为存储。这意味着你可以根据项目的需求选择使用内部闪存、外部SD卡或其他存储设备来存储文件。
4. 兼容性
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");  
  // ... 其他初始化代码 ...  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

一旦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();  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

读取文件

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();  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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

void shutdown() {  
  LittleFS.end();  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

处理存储空间
由于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() {  
  // ... 代码 ...  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

运行效果,如下:
在这里插入图片描述

四、综合实验

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() {}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

运行效果:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/351552
推荐阅读
相关标签
  

闽ICP备14008679号