ESP8266:闪存文件系统基本操作
本帖最后由 划句顾 于 2021-9-2 09:38 编辑1.通过程序向闪存文件系统写入信息
代码如下:
/*
*Purpose:此程序用于演示如何向NodeMCU的SPIFFS中建立名为
notes.txt的文件,程序还将向该文件写入信息。
*Author :LAOGU
*Time :2021/8/16
*/
#include <FS.h>
String file_name = "/arduino-esp8266 code/notes.txt"; //被读取的文件位置和名称这是一串字符串,是ESP8266的目录。
void setup() {
Serial.begin(9600);
Serial.println("");
Serial.println("SPIFFS format start"); //SPIFFS 全称是:Serial Peripheral Interface Flash File System
SPIFFS.format(); //格式化SPIFFS
Serial.println("SPIFFS format finish");
if (SPIFFS.begin())//启动SPIFFS
{
Serial.println("SPIFFS Started.");
}
else
{
Serial.println("SPIFFS Failed to start.");
}
File dataFile = SPIFFS.open(file_name,"w"); //建立File对象--dataFile,如果文件系统没有/arduino-esp8266 code/notes.txt文件,此操作将会在文件系统中建立该文件。如果文件系统有该文件,
则程序将会重新建立该文件,即原有文件信息将会被覆盖。
dataFile.println("Welcome to IOT World."); //向dataFile文件写入信息 ,欢迎来到物联网世界
dataFile.close(); //关闭文件
Serial.println("Finished Writing data to SPIFFS");
}
void loop() {
}
static/image/hrline/5.gif
static/image/hrline/5.gif
注意:
SPIFFS.begin()用于启动闪存文件系统。在每次使用闪存文件系统以前都需要执行这一操作。如果闪存文件系统成功启动,该函数的返回值为布尔型,如果成功启动闪存文件形同,则返回真。否则将返回假。
static/image/hrline/5.gif
2.通过程序从闪存文件系统读取信息
代码如下:
/*
*Purpose:此程序用于演示如何从NodeMCU的内置SPIFFS中存储的文件notes.txt读取数据。
notes.txt 文件内容将会通过串口监视器显示出来供用户确认。
注意在使用本程序以前需要先将notes.txt 文件上传到NodeMCU开发板的SPIFFS中
*
*Author :LAOGU
*Time :2021/8/16
*/
#include<FS.h>
String file_name="/arduino-esp8266 code/notes.txt";
void setup() {
Serial.begin(9600);
Serial.println("");
if(SPIFFS.begin()){
Serial.println("SPIFFS Started.");
}
else{
Serial.println("SPIFFS Failed to Start.");
}
if(SPIFFS.exists(file_name)) {
Serial.println(file_name);
Serial.println("FOUND.");
}
else{
Serial.println(file_name);
Serial.println("NOT FOUND.");
}
File dataFile = SPIFFS.open(file_name,"r");
for(int i = 0;i<dataFile.size();i++){
Serial.print((char)dataFile.read());
}
dataFile.close(); //读取后关闭文件
}
void loop() {
}
static/image/hrline/5.gif
static/image/hrline/5.gif
注意:dataFile.read()将会读取dataFile文件内容。dataFile.read()返回的是字符的ASCII码,所以dataFile.read()前面要加char这样每调用一次都会返回dataFile文件中一个字符。再次调用,将会返回下一个字符。以此类推,直到dataFile结尾。通过for循环语句,程序将会依次读取dataFile文件内容,并且将文件内容逐字符输出于串口监视器中。
static/image/hrline/5.gif
3.通过程序向闪存文件系统文件添加信息
代码如下:
/*
*Purpose:此程序用于演示如何向NodeMCU的内置SPIFFS中存储的文件
notes.txt添加数据。
*Author :LAOGU
*Time :2021/8/17
*/
#include <FS.h>
String file_name = "/arduino-esp8266 code/notes.txt"; //被读取的文件位置和名称
void setup() {
Serial.begin(9600);
Serial.println("");
if (SPIFFS.begin())//启动SPIFFS
{
Serial.println("SPIFFS Started.");
}
else{
Serial.println("SPIFFS Failed to start.");
}
if(SPIFFS.exists(file_name)) {
Serial.print(file_name);
Serial.println("FOUND.");
File dataFile = SPIFFS.open(file_name,"a"); //建立File对象--dataFile
dataFile.println("This is a text.");
dataFile.close(); //关闭文件
Serial.println("Finished Appending data to SPIFFS");
}
else{
Serial.print(file_name);
Serial.println("NOT FOUND.");
}
}
void loop() {
}
static/image/hrline/5.gif
static/image/hrline/5.gif
运行第二个代码,得到下图:
static/image/hrline/5.gif
4.通过程序读取目录内容
/*
*Purpose:此程序用于演示如何从NodeMCU的内置SPIFFS中文件夹里读取文件信息
文件夹内容将会通过串口监视器显示出来。
*Author :LAOGU
*Time :2021/8/17
*/
#include <FS.h>
String file_name = "/ESPCode-TEXT/notes.txt"; //被读取的文件位置和名称
String folder_name = "/ESPCode-TEXT";//被读取的文件夹
void setup() {
Serial.begin(9600);
Serial.println("");
if (SPIFFS.begin())//启动闪存文件
{
Serial.println("SPIFFS Started.");
}
else{
Serial.println("SPIFFS Failed to start.");
}
File dataFile = SPIFFS.open(file_name,"w"); //建立File对象--dataFile
dataFile.println("Hello ESP8266-Code.");
dataFile.close(); //关闭文件
Serial.println("Finished Writing data to SPIFFS");
//显示目录中文件内容以及文件大小
Dir dir = SPIFFS.openDir(folder_name);//建立“目录对象”
//dir.next()用于检查目录中是否还有“下一个文件”
while(dir.next()){
Serial.println(dir.fileName());
}
}
void loop() {
}
static/image/hrline/5.gif
static/image/hrline/5.gif
运行第二个代码,读取信息,信息如下图:
static/image/hrline/5.gif
5. 从闪存文件系统中删除文件
/*
*Purpose:此程序用于演示如何删除SPIFFS中存储的文件
*Author :LAOGU
*Time :2021/8/17
*/
#include <FS.h>
String file_name = "/ESPCode-TEXT/notes.txt"; //被读取的文件位置和名称
void setup() {
Serial.begin(9600);
Serial.println("");
if (SPIFFS.begin())//启动闪存文件
{
Serial.println("SPIFFS Started.");
}
else{
Serial.println("SPIFFS Failed to start.");
}
if(SPIFFS.remove(file_name)){
Serial.print(file_name);
Serial.println("remove success");
}else{
Serial.print(file_name);
Serial.println("remove fail");
}
}
void loop() {
}
static/image/hrline/5.gif
static/image/hrline/5.gif
6. 显示闪存文件系统信息
/*
*Purpose:此程序用于演示如何使用FSInfo对象来显示闪存文件系统状态
*Author :LAOGU
*Time :2021/8/17
*/
#include<FS.h>
FSInfo fs_info;
void setup() {
Serial.begin(9600);
SPIFFS.begin();
Serial.println("");
Serial.println("SPIFFS Started.");
//闪存文件系统信息
SPIFFS.info(fs_info);
//可用空间总和(单位:字节)
Serial.print("totalBytes: ");
Serial.print(fs_info.totalBytes);
Serial.println(" Bytes");
//已用空间(单位:字节)
Serial.print("usedBytes: ");
Serial.print(fs_info.usedBytes);
Serial.println(" Bytes");
//最大文件名字符限制(含路径和'\0')
Serial.print("maxPathLength: ");
Serial.println(fs_info.maxPathLength);
// 最多允许打开文件数量
Serial.print("maxOpenFiles: ");
Serial.println(fs_info.maxOpenFiles);
//存储块大小
Serial.print("blockSize: ");
Serial.println(fs_info.blockSize);
//存储页大小
Serial.print("pagaSize: ");
Serial.println(fs_info.pageSize);
}
void loop() {
}
static/image/hrline/5.gif
页:
[1]