当前位置:网站首页>Esp8266的Flash读写操作以及Flash上传文件
Esp8266的Flash读写操作以及Flash上传文件
2022-07-25 09:22:00 【F l e】
1、Flash的读写操作
Esp8266的Flash为4M,其中1M用于存储程序,其他的空间有一部分用于系统,3M中剩下的大部分空间可以用来存放文件。
#include <FS.h>
String file_name = "/Fle/note.txt"; //被读取的文件位置和名称,放在/Fle文件夹下
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_write(file_name, "1111");
file_read(file_name);
file_add(file_name, "2222");
file_read(file_name);
}
void loop() {
}
//写操作
void file_write(String file_name, String content)
{
/*****************************************写入闪存文件内容*************************************************/
File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
dataFile.println(content); // 向dataFile写入字符串信息
dataFile.close(); // 完成文件写入后关闭文件
Serial.print("已写入闪存文件内容:");
Serial.println(content);
}
//读操作
void file_read(String file_name)
{
//确认闪存中是否有file_name文件
File dataFile;
if (SPIFFS.exists(file_name))
{
//建立File对象用于从SPIFFS中读取文件
dataFile = SPIFFS.open(file_name, "r");
//读取文件内容并且通过串口监视器输出文件信息
Serial.println("读取的文件内容:");
for (int i = 0; i < dataFile.size(); i++)
{
Serial.print((char)dataFile.read());
}
}
else
{
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}
//完成文件读取后关闭文件
dataFile.close();
}
//追加操作
void file_add(String file_name, String content)
{
if (SPIFFS.exists(file_name))
{
File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
dataFile.println(content); // 向dataFile添加字符串信息
dataFile.close(); // 完成文件操作后关闭文件
Serial.println("已经增添内容:");
Serial.println(content);
}
else
{
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}
}

2、Flash上传文件并读取显示,以此来验证是否真的上传了
这里为了完成上传到Flash的任务,需要下载一个基于esp8266和Arduino的Flash文件上传插件
下面是安装Flash文件上传插件的具体步骤:
tools文件夹是要自己新建的,放在tools文件夹下的ESP8266FS文件夹是解压后的文件夹。记得设置完后要重启Arduino IDE软件才能生效。
下面采用这个插件进行Flash文件上传并验证:
首先在工程文件夹下新建一个data文件夹,把要上传的文件放在data文件夹下。打开Arduino IDE后点击工具-----ESP8266 Sketch Data Upload,点击之后会看到Esp8266的蓝灯在闪烁。烧录完成之后文件就已经保存在Esp8266的Flash里了。
现在利用以下程序来验证:
#include <FS.h>
String file_name = "/note.txt"; //被读取的文件位置和名称,放在根目录
void setup() {
Serial.begin(9600);
Serial.println("");
if (SPIFFS.begin()) {
// 启动SPIFFS
Serial.println("SPIFFS Started.");
} else {
Serial.println("SPIFFS Failed to Start.");
}
file_read(file_name);
file_add(file_name, "\n2222");
file_read(file_name);
}
void loop() {
}
void file_write(String file_name, String content)
{
/*****************************************写入闪存文件内容*************************************************/
File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
dataFile.println(content); // 向dataFile写入字符串信息
dataFile.close(); // 完成文件写入后关闭文件
Serial.print("已写入闪存文件内容:");
Serial.println(content);
}
void file_read(String file_name)
{
//确认闪存中是否有file_name文件
File dataFile;
if (SPIFFS.exists(file_name))
{
//建立File对象用于从SPIFFS中读取文件
dataFile = SPIFFS.open(file_name, "r");
//读取文件内容并且通过串口监视器输出文件信息
Serial.println("读取的文件内容:");
for (int i = 0; i < dataFile.size(); i++)
{
Serial.print((char)dataFile.read());
}
}
else
{
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}
//完成文件读取后关闭文件
dataFile.close();
}
void file_add(String file_name, String content)
{
if (SPIFFS.exists(file_name))
{
File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
dataFile.println(content); // 向dataFile添加字符串信息
dataFile.close(); // 完成文件操作后关闭文件
Serial.println("已经增添内容:");
Serial.println(content);
}
else
{
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}
}
上面程序中不能再进行SPIFFS.format()格式化操作了,否则会把刚保存进去的文件清除掉,并且注意到放在data文件夹下的文件均是放在esp8266的Flash的根目录下的,所以程序中的文件目录也应该用/note.txt。同时也要注意不能在程序中再对/note.txt文件进行写操作,否则也会覆盖掉123456789这个信息。
运行结果:
从上面可以看出,除了123456789,后面还有两个2222,这是因为在下载完成后会运行一遍程序,为了让串口显示数据我按了一次复位键,所以程序运行了两遍,追加了两次2222。
边栏推荐
- main函数的一些操作
- [De1CTF 2019]SSRF Me
- @5-1 CCF 2019-12-1 报数
- OC--类别 扩展 协议与委托
- @2-1 CCF 2020-12-01 期末预测之安全指数
- [code source] daily question simple fields and
- How to deploy the jar package to the server? Note: whether the startup command has nohup or not has a lot to do with it
- Why use json.stringify() and json.parse()
- Redis string structure command
- 语音聊天app源码-钠斯网络源码出品
猜你喜欢

~1 ccf 2022-06-2 寻宝!大冒险!

【代码源】每日一题 算的我头都大啦

@4-1 CCF 2020-06-1 线性分类器

如何将Jar包部署到服务器,注:启动命令有无nohup有很大关系

Prim minimum spanning tree (diagram)

The shortest path problem Bellman Ford (single source shortest path) (illustration)

作业7.21 约瑟夫环问题与进制转换

微信小程序实现轮播图(自动切换&手动切换)

Data preprocessing

Student management system (summary)
随机推荐
pdf2Image Pdf文件存为jpg NodeJs实现
Redis string 结构命令
关于C和OC
Object initialization
基于stm32的恒功率无线充电
Prim 最小生成树(图解)
【cf】Round 128 C. Binary String
How to customize the title content of uni app applet (how to solve the problem that the title of applet is not centered)
@1-1 CCF 2021-04-1 灰度直方图
打造个人极限写作流程 -转载
本地存储待办事项(在待办事项上进行改进)
How to deploy the jar package to the server? Note: whether the startup command has nohup or not has a lot to do with it
【代码源】每日一题 简单字段和
laravel 调用第三方 发送邮件 (php)
Data control language (DCL)
[code source] daily question tree
Laravel calls a third party to send mail (PHP)
@3-2 CCF 2020-12-2 期末预测之最佳阈值
【代码源】每日一题 分割(nlogn&n解法)
@5-1 CCF 2019-12-1 报数