DFRobot提供的这款 FireBeetle 2 ESP32-S3 开发板,从官方WiKi上,可以了解到详细的硬件信息:
- 处理器:Xtensa® 双核32位LX7微处理器
- 主频:240 MHz
- SRAM:512KB
- ROM:384KB
- Flash:16MB
- PSRAM: 8MB
- RTC SRAM:16KB
- USB: USB 2.0 OTG全速接口
我要完成的下一个小项目,需要使用SPIFFS,得需要相对大一些的SPIFFS空间。而该开发板板载16MB的Flash,相当地大,得好好利用起来。
另外,本文使用的Arduino开发工具为 Arduino IDE 1.8.19,因为 Arduino IDE2.0尚不支持插件,不能使用 ESP32 Filesystem Uploader 。
一、Arduino IDE中现有的分区方案
当使用Arduino IDE作为开发工具时,选择开发板为 FireBeetle 2 ESP32-S3:
然后设置Flash Size为16MB:(后面的128Mb,是因为1B=8b)
特别提醒:PSRAM需要选择 OPI PSRAM
再从Partition Scheme中查看分区方案:
从上图中可以看到,能够使用16M Flash的,只有使用FATFS的方案。我后面的项目中,需要用到SPIFFS,而使用SPIFFS的方案,都没有充分利用起来。
关于存储分区的资料,可以查看乐鑫官方文档:存储 API - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)
既然没有,那我们可以进行自定义,使得 FireBeetle 2 ESP32-S3 开发板 能够应用更多的分区方案。
二、为 FireBeetle 2 ESP32-S3 添加分区方案
Arduino IDE安装后,通常有3个目录分别为:
-
Arduino IDE 程序目录
-
开发板支持包目录
-
扩展库目录
我使用的是macOS系统,所以以上的目录分别为:
- 开发工具目录:/Applications/Arduino.app
- 开发板支持目录:/Users/HonestQiao/Library/Arduino15
- 扩展库目录:/Users/HonestQiao/Documents/Arduino/libraries
- 扩展库目录:/Users/HonestQiao/Documents/Arduino/tools
如果是在Windows系统,通常目录如下:
- 开发工具目录:C:\Program Files (x86)\Arduino
- 开发板支持目录:C:\Users\Administrator\AppData\Local\Arduino15
- 扩展库目录:C:\Users\Administrator\Documents\Arduino\libraries
- 插件目录:C:\Users\Administrator\Documents\Arduino\tools
具体目录,需要根据实际情况确定,上面只是通常的情况。
确定上述目录后,在 开发板支持目录 下的 packages/esp32/hardware/esp32 中,找到 esp32支持的开发板定义文件 boards.txt :
使用vscode之类的编辑工具打开该文件:【最好别用记事本打开】
找到 dfrobot_firebeetle2_esp32s3.menu.CPUFreq ,在其上可以看到已有的分区方案配置,添加下面的配置:
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.default_16MB=16M with spiffs (6.25MB APP/3.43MB SPIFFS)
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.default_16MB.build.partitions=default_16MB
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.default_16MB.upload.maximum_size=6553600
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.large_spiffs_16MB=16M with large spiffs (4.5MB APP/6.93MB SPIFFS)
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.large_spiffs_16MB.build.partitions=large_spiffs_16MB
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.large_spiffs_16MB.upload.maximum_size=4718592
添加后如下:
每个 PartitionScheme 由如下三个定义组成:
- PartitionScheme.方案短名称=方案详细说明
- PartitionScheme.方案短名称.build.partitions=分区配置
- PartitionScheme.方案短名称.upload.maximum_size=最大固件大小
上面添加的两个方案,一个使用了 default_16MB 分区配置,一个使用了large_spiffs_16MB,其对应的配置文件位于如下位置:
其配置详情分别为:
上述分区配置中的spiffs,即为可用的SPIFFS区的大小。
因为默认已经提供了上述两个配置,所以直接使用了。如果还需要更详细的自定义,可以了解 存储 API - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) ,自己写分区配置文件。熟悉ESP-IDF开发的同学,应该对这一点非常熟悉了。
添加完成保存关闭 boards.txt,然后重新打开Arduino IDE,就可以看到新添加的分区配置方案了:
三、ESP32 Filesystem Uploader 工具安装和使用
ESP32 Filesystem Uploader是一个Arduino IDE专用的工具,可以帮助我们上传文件到ESP32上划分出来的用户存储区,例如上面定义的SPIFFS分区。
当我们上传了文件以后,在程序中,就可以使用这些文件。
例如我们可以上传一个文本文件,然后在程序中读取其内容输出。或者上传图片文件,在显示的时候调用。
要使用 ESP32 Filesystem Uploader,首先需要下载插件文件,下载地址为:
Releases · me-no-dev/arduino-esp32fs-plugin (github.com)
下载后解压:
将其中的ESP32FS目录放置到插件目录tools下,具体如下:
然后,重新打开Arduin IDE,在工具菜单中,就会多出一项:
然后,新建一个Arduino项目,并另存为SPIFFS_Test,再使用资源管理器打开该目录,在其中创建一个data子目录:
子目录内的文件,是我们要上传到开发板SPIFFS分区的文件,注意总的大小,不能超过分区方案中定义的大小。
放置好文件以后,使用工具菜单的“ESP32 Sketch Data Upload”,就能将这些文件上传到开发板上:
如果提示下面的错误,说明文件太大,超出分区大小:
四、使用上传到SPIFFS分区的文件
直接使用如下代码进行测试即可:
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
Serial.println("Test start:");
if (!SPIFFS.begin(true)) {
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
File root = SPIFFS.open("/");
if (!root) {
Serial.println("- failed to open directory");
return;
}
if (!root.isDirectory()) {
Serial.println(" - not a directory");
return;
}
Serial.println("Directory List:");
File file = root.openNextFile();
while (file) {
if (file.isDirectory()) {
Serial.print(" DIR : ");
Serial.println(file.name());
} else {
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print("\tSIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
delay(2000);
file = SPIFFS.open("/test.txt");
if (!file) {
Serial.println("Failed to open file for reading");
return;
}
Serial.println("File Content:");
while (file.available()) {
Serial.write(file.read());
}
file.close();
Serial.println("Test end.");
}
void loop() {
}
烧录运行后,通过串口监视器查看输出,具体如下:
从上图可以看到,已经成功列出了我们上传到SPIFFS分区的文件,并且从text.txt中,读取了其内容输出。
五、总结
现在,我们可以充分利用 FireBeetle 2 ESP32-S3 开发板 的16M Flash了,在这个SPIFFS分区上,可以提前上传文件,也可以用于记录日志。
我的后续项目中,会在此分区放置用于数据检索的sqlite文件,供程序查询调用。
六、参考资料
以上分享,参考了下面的内容,表示感谢: