基于Arduino IDE 野火ESP8266模块 文件系统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");  // ... 其他初始化代码 ...  
}

一旦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() {}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/294680.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch for training1——read data/image

blog torch.utils.data.Dataset create dataset with class torch.utils.data.Dataset automaticly import torch from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, data):self.data datadef __getitem__(self, index):# 根据索引获取样本…

数据可视化高级技术(Echarts)

目录 &#xff08;一&#xff09;数据可视化概念及Echarts基础知识 数据可视化的好处&#xff1a; 数据可视化的目标 数据可视化的基本流程 &#xff08;二&#xff09;数据图表 类别比较图表&#xff1a; 数据关系图表&#xff1a; 数据分布图表&#xff1a; 时间序列…

智能文档合规检测系统:在央企国企招标采购领域的应用

一、背景介绍 在央企国企采购过程中&#xff0c;合规性是一个不可忽视的重要方面。采购方需要确保供应商的资质、业绩、规模等条件符合采购要求&#xff0c;同时避免设置不合理的条件限制或排斥潜在供应商。为了提高采购效率和确保合规性&#xff0c;智能文档合规检测系统应运…

网页的血液——javascript

JavaScript 基础知识概述 1. JavaScript 介绍 JavaScript 是一种高级的、解释型的编程语言&#xff0c;它是一种基于对象的、事件驱动的语言&#xff0c;它允许开发者创建动态的网页。JavaScript 是一种脚本语言&#xff0c;它可以嵌入到 HTML 中&#xff0c;或者作为外部文件…

YOLOv9改进策略 :主干优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构 ,在保证性能的同时足够轻量化。 💡💡💡RIFormerBlock引入到YOLOv9,多个数…

ADS-B及雷达显示终端8.4

#更新内容# 本次软件更新内容不少&#xff0c;但可见部分不多。主要更新集中的系统后台部分。后台更新内容包括&#xff1a; #后台更新内容# 1、增加了对部分特殊雷达编码格式的支持。应甲方要求&#xff0c;对部分国产雷达及其特殊的雷达编码协议进行了支持&#xff0c;增加了…

OpenHarmony无人机MAVSDK开源库适配方案分享

MAVSDK 是 PX4 开源团队贡献的基于 MavLink 通信协议的用于无人机应用开发的 SDK&#xff0c;支持多种语言如 C/C、python、Java 等。通常用于无人机间、地面站与通信设备的消息传输。 MAVLink 是一种非常轻量级的消息传递协议&#xff0c;用于与无人机&#xff08;以及机载无…

【好书推荐4】图机器学习

【好书推荐4】图机器学习 写在最前面编辑推荐内容简介作者简介目录前言/序言本书读者内容介绍 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能…

分月饼 java题解

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in); int m sc.nextInt(); // 读取员工数量mint n sc.nextInt(); // 读取月饼数量n// 调用distribute方法并打印返回的分配方法总数//先默认每人分一个…

SmartChart的部署以及可能遇见的报错解决方案

简介 数据可视化是一种将数据转化为图形的技术&#xff0c;可以帮助人们更好地理解和分析数据。但是&#xff0c;传统的数据可视化开发往往需要编写大量的代码&#xff0c;或者使用复杂的拖拽工具&#xff0c;不仅耗时耗力&#xff0c;而且难以实现个性化的需求。有没有一种更…

SwiftUI Swift 显示隐藏系统顶部状态栏

Show me the code // // TestHideSystemTopBar.swift // pandabill // // Created by 朱洪苇 on 2024/4/1. //import SwiftUIstruct TestHideSystemTopBar: View {State private var isStatusBarHidden falsevar body: some View {Button {withAnimation {self.isStatusBa…

67、yolov8目标检测和旋转目标检测算法batchsize=1/6部署Atlas 200I DK A2开发板上

基本思想:需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwd=q2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model = YOLO("yolov8s.yaml") # buil…

VUE3——生命周期

Vue3.0中可以继续使用Vue2.x中的生命周期钩子&#xff0c;但有有两个被更名&#xff1a; beforeDestroy改名为 beforeUnmountdestroyed改名为 unmounted Vue3.0也提供了 Composition API 形式的生命周期钩子&#xff0c;与Vue2.x中钩子对应关系如下&#xff1a; beforeCreate&g…

vitess执行计划缓存 测试

打开执行计划器缓存&#xff1a; sysbench /usr/local/share/sysbench/oltp_write_only.lua --mysql-host127.0.0.1 --mysql-port15306 --mysql-userroot --mysql-password --mysql-dbcustomer --report-interval10 100s sysbench /usr/local/share/sysbench/oltp_read_only.l…

有哪些AI智能写作软件?七款自动写作神器,建议收藏

AI智能写作软件的发展&#xff0c;为广大写作者提供了便捷高效的创作工具。如今市场上涌现出了许多优秀的AI智能写作软件&#xff0c;它们各自具备独特的特点和功能&#xff0c;为写作者们带来了全新的写作体验。以下将介绍八款备受推崇的自动写作神器&#xff0c;让我们一起来…

淘宝店铺如何从1688一键铺货?官方授权接口,可满足多样化上货需求

此API目前支持以下基本接口&#xff1a; item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品&#xff08;拍立淘&#xff09;item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得…

Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 股票价格预测是一个具有挑战性的时间序列预测问题,可以使用深度学习模型如…

Google DeepMind 大语言模型中的长形态事实性

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Long-form factuality in large language models 论文链接&#xff1a;https://arxiv.org/abs/2403.18802 论文的关键信息总结如下&#xff1a; 研究问题是什么&#xff1f;论文…

Protobuf 二进制文件学习及解析

0. 简介 protobuf也叫protocol buffer是google 的一种数据交换的格式&#xff0c;它独立于语言&#xff0c;独立于平台。google 提供了多种语言的实现&#xff1a;java、c#、c、go 和 python&#xff0c;每一种实现都包含了相应语言的编译器以及库文件。 由于它是一种二进制的…

每日面经分享(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件&#xff0c;编写以下测试脚本 import pytest import requests# 测试用例1&#xff1a;验证登录成功的情况 # 第一个测试用例验证登录成功的情况&#xff0c;发送有效的用户名和密…