环境lvgl V9.3+platformio,强烈推荐使用新版本,新版本对于v8集合很多库
IDF可以类似修改库
littlefs介绍:
ESP32之前的文件系统实现通常是SPIFFS(Serial Peripheral Interface Flash File System)。在ESP32的早期版本中,SPIFFS是默认的文件系统,主要用来处理SPI Flash上的文件存储。随着时间的推移,LittleFS被提出并成为了更推荐的替代方案。
LittleFS 与 SPIFFS 的对比
1. 设计目标
-
SPIFFS:最初设计时针对低资源设备,旨在提供简单的文件存储功能。它是一种非常轻量的文件系统,但它的实现没有充分考虑到闪存的长期耐用性和性能。
-
LittleFS:比SPIFFS更加现代化,专门为闪存存储优化,支持日志式写入,能有效地减少闪存的写入次数,从而延长闪存的使用寿命。
2. 闪存友好性
-
SPIFFS:存在闪存擦写问题,特别是当频繁写入时,可能导致闪存出现坏块。SPIFFS的写入方式简单,但在高频写入的情况下并不理想。
-
LittleFS:采用了写入日志和擦除块的方式,有效避免了频繁写入同一区域的闪存,从而减少闪存损耗。它更适合于高频率的读写操作,能更好地处理闪存的磨损问题。
3. 性能
-
SPIFFS:SPIFFS相对于LittleFS来说,在小文件的处理和闪存的管理上表现稍逊。尤其在处理大量小文件或大文件时,性能可能不如LittleFS。
-
LittleFS:LittleFS设计上更适合高效处理小文件,支持更快的读取速度,同时在写入时具有更好的优化,适合在ESP32这类带有闪存的嵌入式系统上使用。
4. 数据完整性与崩溃恢复
-
SPIFFS:SPIFFS对数据完整性的保障比较有限,一旦系统崩溃或重启,可能会导致文件系统损坏。它不像LittleFS那样能够提供有效的崩溃恢复。
-
LittleFS:LittleFS支持日志式写入操作,具有更好的崩溃恢复能力,能够有效防止因为系统崩溃或断电而导致的文件损坏。
5. 兼容性
-
SPIFFS:SPIFFS在早期版本的ESP32中使用较广泛,但随着时间的推移,开发者逐渐发现其不足,尤其是在多次写入闪存时容易导致问题。
-
LittleFS:LittleFS是ESP32开发者社区推荐的新标准,虽然它的兼容性和支持程度稍微逊色于SPIFFS,但在长远来看,LittleFS的优势更加明显。它的兼容性逐渐变得更强,尤其在ESP-IDF 4.x及以上版本中,LittleFS已经成为推荐的文件系统。
6. 内存占用
-
SPIFFS:由于其较为简单的设计,SPIFFS的内存占用较低,但在高频读写和大容量存储时,内存占用会逐渐增加。
-
LittleFS:LittleFS也相对轻量,但在数据管理上进行了更多的优化,因此内存占用可能稍高于SPIFFS,但这种增加是为了提高系统的稳定性和性能。
esp32使用lvgl启动littleFS文件系统
在PlatformIo.中设置littlefs
在platformIo.ini中加入
board_build.filesystem = littlefs
board_build.partitions = default_4MB_spiffs.csv
在platformIo.ini同路径下创建default_4MB_spiffs.csv文件并写入
这里是程序固件4M,littefs也是4M
注意:8Mflash的程序最大4M
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
app, app, factory, 0x10000, 0x400000,
spiffs, data, spiffs, 0x410000, 0x3F0000,
然后在src文件夹的同级建立data文件夹,把要的文件放在data文件夹下
上传文件
点蚂蚁头后点Upload Filesystem Image
用下面代码测试是否上传成功,他会串口打印上传了什么文件
#include <Arduino.h>
#include "LittleFS.h"
void setup() {
Serial.begin(9600);
Serial.setDebugOutput(true);
Serial.println();
if(!LittleFS.begin()){
Serial.println("Still failed after format");
return;
}
Serial.println("Listing files:");
File root = LittleFS.open("/");
while(File file = root.openNextFile()){
Serial.println(file.name());
}
}
如果没有的话可以格式化一下在上传
// 格式化 LittleFS
if (LittleFS.format()) {
Serial.println("LittleFS 格式化成功");
} else {
Serial.println("LittleFS 格式化失败");
}
}
lvgl设置
只要使用lvglv9.30,配置就很简单,已经集合好了
只要在lv_conf.h里修改
/** API for Arduino LittleFs. */
#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 1 //启动esp32的LITTLEFS库已经写好了
#if LV_USE_FS_ARDUINO_ESP_LITTLEFS
#define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER 'L' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
#define LV_FS_ARDUINO_ESP_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */
#endif
如果要显示图像打开这个宏
#define LV_USE_TJPGD 1
测试
lv_fs_arduino_esp_littlefs_init();//初始化littlefs
lv_obj_t * img = lv_img_create(lv_scr_act());
lv_img_set_src(img, "L:/xx.jpg");//修改图片名称,或者使用bin文件