ESP8266闪存文件系统

如果网页比较大,那么只用程序去储存明显是不太可能的,我们可以用esp8266闪存文件系统储存网页。

通常的闪存文件系统大小为4Mb

名称 大小
闪存文件系统 4Mb
程序储存 1Mb
用户可以文件储存(会包含一些系统文件) 3Mb

 

ESP8266闪存文件系统基本操作

ESP8266闪存文件系统基本操作

1.通过程序向闪存文件系统写入信息

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
/**********************************************************************

程序名称/Program name : esp8266-flash-write

程序目的/Purpose : 此程序用于演示如何向NodeMCU的SPIFFS中建立名为
notes.txt的文件,程序还将向该文件写入信息。
-----------------------------------------------------------------------
函数说明:
SPIFFS.open(file_name, "w");
以上函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"w" 代表写入文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)
***********************************************************************/


#include <FS.h>

String file_name = "/taichi-maker/notes.txt"; //被读取的文件位置和名称

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 dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
dataFile.println("Hello IOT World."); // 向dataFile写入字符串信息
dataFile.close(); // 完成文件写入后关闭文件
Serial.println("Finished Writing data to SPIFFS");
}

void loop() {
}

 

2.通过程序从闪存文件系统读取信息

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
/**********************************************************************

程序名称/Program name : esp8266-flash-read

程序目的/Purpose : 此程序用于演示如何从NodeMCU的内置SPIFFS中存储的文件notes.txt读取数据。
notes.txt 文件内容将会通过串口监视器显示出来供用户确认。
注意在使用本程序以前需要先将notes.txt 文件上传到NodeMCU开发板的SPIFFS中
-----------------------------------------------------------------------
函数说明:
SPIFFS.open(file_name, "r");
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"r" 代表读取文件信息。(如需了解如何写入信息,请参阅示例程序esp8266-flash-write)
***********************************************************************/

#include <FS.h>

String file_name = "/taichi-maker/notes.txt"; //被读取的文件位置和名称

void setup() {
Serial.begin(9600);
Serial.println("");

if(SPIFFS.begin()){ // 启动闪存文件系统
Serial.println("SPIFFS Started.");
} else {
Serial.println("SPIFFS Failed to Start.");
}

//确认闪存中是否有file_name文件
if (SPIFFS.exists(file_name)){
Serial.print(file_name);
Serial.println(" FOUND.");
} else {
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}

//建立File对象用于从SPIFFS中读取文件
File dataFile = SPIFFS.open(file_name, "r");

//读取文件内容并且通过串口监视器输出文件信息
for(int i=0; i<dataFile.size(); i++){
Serial.print((char)dataFile.read());
}

//完成文件读取后关闭文件
dataFile.close();
}

void loop() {
}

 

3.通过程序向闪存文件系统文件添加信息

要注意写入操作和添加操作的区别。假设闪存系统中已经有这样一文件,写入操作会对原文件进行覆盖,而添加操作会将文件最后加入新的内容。

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
/**********************************************************************

程序名称/Program name : esp8266-flash-append
=
程序目的/Purpose : 此程序用于演示如何向NodeMCU的内置SPIFFS中存储的文件
notes.txt添加数据。
-----------------------------------------------------------------------
函数说明:
SPIFFS.open(file_name, "a");
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"a" 代表添加文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)
此示例程序所演示的是向SPIFFS中的文件里添加信息。这一操作写入信息有所区别。
添加信息是不会删除文件内原有信息,而是在原有信息后面添加新的信息。
但写入操作(示例 esp8266-flash-write.ino)是将文件内容完全清除,重新写入新信息。
***********************************************************************/

#include <FS.h>

String file_name = "/taichi-maker/notes.txt"; //被读取的文件位置和名称

void setup() {
Serial.begin(9600);
Serial.println("");

if(SPIFFS.begin()){ // 启动闪存文件系统
Serial.println("SPIFFS Started.");
} else {
Serial.println("SPIFFS Failed to Start.");
}

//确认闪存中是否有file_name文件
if (SPIFFS.exists(file_name)){

Serial.print(file_name);
Serial.println(" FOUND.");

File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
dataFile.println("This is Appended Info."); // 向dataFile添加字符串信息
dataFile.close(); // 完成文件操作后关闭文件
Serial.println("Finished Appending data to SPIFFS");

} else {
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}

}

void loop() {
}

 

4.通过程序读取目录内容

读取某个文件夹中程序的内容。

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
/**********************************************************************

程序名称/Program name : esp8266-flash-folder-read

程序目的/Purpose : 此程序用于演示如何从NodeMCU的内置SPIFFS中文件夹里读取文件信息
文件夹内容将会通过串口监视器显示出来。

-----------------------------------------------------------------------

函数说明:
SPIFFS.openDir(folder_name);
以上函数打开指定目录并返回一个目录对象实例。
***********************************************************************/


#include <FS.h>

String file_name = "/taichi-maker/myFile.txt"; //被读取的文件位置和名称
String folder_name = "/taichi-maker"; //被读取的文件夹

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对象用于向SPIFFS中的file对象(即myFile.txt)写入信息
dataFile.println("Hello Taichi-Maker."); // 向dataFile写入字符串信息
dataFile.close(); // 完成文件写入后关闭文件
Serial.println(F("Finished Writing data to SPIFFS"));

// 显示目录中文件内容以及文件大小
Dir dir = SPIFFS.openDir(folder_name); // 建立“目录”对象

while (dir.next()) { // dir.next()用于检查目录中是否还有“下一个文件”
Serial.println(dir.fileName()); // 输出文件名
}
}

void loop() {
}

 

5.从闪存文件系统中删除文件

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
/**********************************************************************

程序名称/Program name : esp8266-flash-remove

日期/Date(YYYYMMDD) : 20191109
程序目的/Purpose : 此程序用于演示如何删除SPIFFS中存储的文件
***********************************************************************/

#include <FS.h>

String file_name = "/taichi-maker/notes.txt"; //被读取的文件位置和名称

void setup() {
Serial.begin(9600);
Serial.println("");

if(SPIFFS.begin()){ // 启动闪存文件系统
Serial.println("SPIFFS Started.");
} else {
Serial.println("SPIFFS Failed to Start.");
}

//从闪存中删除file_name文件
if (SPIFFS.remove(file_name)){

Serial.print(file_name);
Serial.println(" remove sucess");

} else {
Serial.print(file_name);
Serial.println(" remove fail");
}
}

void loop() {
}

 

6.显示闪存文件系统信息

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
/**********************************************************************

程序名称/Program name : esp8266-flash-info

程序目的/Purpose : 此程序用于演示如何使用FSInfo对象来显示闪存文件系统状态

***********************************************************************/


#include <FS.h>

FSInfo fs_info;

void setup() {
Serial.begin(9600);

SPIFFS.begin(); //启动SPIFFS
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(": ");
Serial.println(fs_info.pageSize);
}

void loop() {
}

 

ESP8266闪存文件应用

向esp8266上传任意的文件类型。