ESP8266-Arduino编程实例-SPIFFS及数据上传(Arduino IDE和PlatformIO IDE)

SPIFFS及数据上传(Arduino IDE和PlatformIO IDE)

1、SPIFFS介绍

ESP8266 包含一个串行外设接口闪存文件系统 (SPIFFS)。 SPIFFS 是为带有闪存芯片的微控制器创建的轻量级文件系统。

SPIFFS 可以像在计算机中的普通文件系统中一样访问闪存芯片存储器,但更简单且更受限制。 可以读取、写入、关闭和删除文件。 SPIFFS 不支持目录,因此所有内容都保存在平面结构中。

将ESP8266与SPIFFS结合,可以方便储存数据:

  • 使用设置创建配置文件;
  • 永久保存数据;
  • 创建文件以保存少量数据,而不是使用 microSD 卡;
  • 保存 HTML 和 CSS 文件以构建 Web 服务器;
  • 保存图像、数字和图标;

在我们的大多数 Web 服务器项目中,我们直接将 Web 服务器的 HTML 代码编写为字符串。 使用 SPIFFS,可以在单独的文件中编写 HTML 和 CSS,并将它们保存在 ESP8266 文件系统中。

本文将详细介绍如何上传SPIFFS数据及如何使用SPIFFS。

2、Arduino IDE中上传SPIFFS数据

Arduino IDE默认不支持上传SPIFFS数据,需要安装插件。具体步骤如下:

**第一步:**下载插件,ESP8266FS-X.zip

**第二步:**解压,安装。

插件下载完成后,将其解压,并将ESP8266FS目录复制到Arduino IDE安装目录的tools目录:

在这里插入图片描述

**第三步:**重启Arduino IDE,即可看到安装的SPIFFS插件

在这里插入图片描述

第四步:在工程目录下创建data目录,注意:data目录必须与主程序*.ino文件同级。向data文件夹添加所需文件。

第五步:配置SPIFFS大小

在这里插入图片描述

最后,点击工具->ESP8266 Sketch Data Upload上传文件。

注意,如果不清楚工程的目录,请点击项目->显示项目文件夹,即可打开项目文件夹。

3、PlatformIO IDE中上传SPIFFS数据

**第一步:**打开工程快速访问页面

在这里插入图片描述

第二步:在工程目录下创建data文件夹。注意:data文件夹与src文件夹同级。添加需要的文件。

在这里插入图片描述

**第三步:**添加SPIFFS支持

打开platformio.ini文件,添加如下内容:

1
2
board_build.filesystem = spiffs

第四步:上传数据

在这里插入图片描述

将到得如下输出:

在这里插入图片描述

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
#include <Arduino.h>

#include <FS.h>

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

if(!SPIFFS.begin()){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}

File file = SPIFFS.open("/test.txt", "r");
if(!file){
Serial.println("Failed to open file for reading");
return;
}

Serial.println();
Serial.println("File Content:");
while(file.available()){
Serial.write(file.read());
}
file.close();
}

void loop() {

}

示例代码如何工作?

首先,在setup函数中,初始化串口

1
2
Serial.begin(115200);

接着,初始化SPIFFS

1
2
3
4
5
if(!SPIFFS.begin()){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}

接着,打开文件(文件名为添加到data文件夹的名称)

1
2
3
4
5
6
File file = SPIFFS.open("/test.txt", "r");
if(!file){
Serial.println("Failed to open file for reading");
return;
}

最后,读取文件内容并关闭

1
2
3
4
5
while(file.available()){
Serial.write(file.read());
}
file.close();

SPIFFS常用API如下:

  • begin:挂载文件系统。 必须在使用任何其他 FS API 之前调用它。 如果文件系统安装成功,则返回 true,否则返回 false。
  • end:卸载文件系统。 在使用 OTA 更新文件系统之前使用此方法。
  • format:格式化文件系统。 可以在调用begin之前或之后调用。 如果格式化成功,则返回 true。
  • **open(path,mode)**:打开文件,参数path应该为绝对路径,mode表示文件访问模式,有“r”, “w”, “a”, “r+”, “w+”, “a+”。该方法返回文件对象。
  • **exists(path)**:判断文件是否存在,如果存在,则返回true;否则返回false,参数path为绝对路径
  • **openDir(path)**:打开文件夹,参数path为绝对路径
  • **remove(path)**:删除路径,参数path为绝对路径

文件File常用API如下:

  • close:关闭文件
  • isDirectory:判断是否为目录
  • isFile:判断是否为文件
  • name:文件名称
  • seek:移动当前文件流位置,与fseek类似
  • position:当前文件流位置
  • size:文件大小。

文章来源: https://iotsmart.blog.csdn.net/article/details/126026870