ESP32-S3的非易失性存储(NVS)BLOB类型存储 📚
在ESP32-S3的非易失性存储(NVS)库中,BLOB(Binary Large OBject,二进制大对象)是一种特殊的数据类型,用于存储可变长度的二进制数据。💾
什么是BLOB? 🤔
BLOB是一种用于存储二进制数据的数据类型。与其他数据类型(如整数和字符串)不同,BLOB可以存储💾可变长度的数据,这使得它非常适合存储诸如图像、音频或任何其他类型的大型数据。🎵🖼️
在ESP32-S3的NVS库中,BLOB值的上限为508,000字节或分区大小的97.6%减去4000字节,以较小的值为准。虽然NVS最适合存储许多小值,但是如果需要存储大的BLOB或字符串,可以考虑使用基于磨损均衡库的FAT文件系统。
如何在NVS中存储BLOB? 📝
在NVS中存储BLOB的过程与存储其他数据类型的过程类似。✨首先,你需要打开一个NVS句柄,然后使用nvs_set_blob()
函数将数据写入NVS。最后,🔮别忘了调用nvs_commit()
函数来确保更改被写入闪存。💫
// 定义BLOB数据
int count = 0;
const int max_ip=2;
typedef struct{
char ssid[50];
char password[50];
} ap_t;
ap_t aps_set[max_ip]; //存储数据的容器
// 初始化BLOB数据
for(int i=0;i<max_ip;i++){
strcpy(aps_set[i].ssid,"bilibili");
strcpy(aps_set[i].password,"1234567");
}
// 存储BLOB数据
nvs_handle_t WIFI_ID_handle;
esp_err_t err = nvs_open("WIFI_ID", NVS_READWRITE, &WIFI_ID_handle);
if (err == ESP_OK) {
err = nvs_set_blob(WIFI_ID_handle,"aps",aps_set,sizeof aps_set);
if (err == ESP_OK) {
err = nvs_commit(WIFI_ID_handle);
}
nvs_close(WIFI_ID_handle);
}
如何从NVS中检索BLOB? 🔍
从NVS中检索BLOB的过程也与检索其他数据类型的过程类似。首先,你需要打开一个NVS句柄,然后使用nvs_get_blob()
函数从NVS中读取数据。最后,别忘了关闭NVS句柄。🔐
// 检索BLOB数据
nvs_handle_t WIFI_ID_handle;
esp_err_t err = nvs_open("WIFI_ID", NVS_READWRITE, &WIFI_ID_handle);
if (err == ESP_OK) {
ap_t aps_get[max_ip];
size_t length=sizeof aps_get;
err = nvs_get_blob(WIFI_ID_handle, "aps", aps_get, &required_size);
if(err == ESP_OK){
//处理数据
for(int i=0;i<max_ip;i++){
ESP_LOGE("nvs","ssid:password %s:%s",aps_set[i].ssid,aps_set[i].password);
}
}
nvs_close(WIFI_ID_handle); //关闭当前名称空间
nvs_flash_deinit(); //关闭NVS
}
总结😉
这篇博客讲解了很多关于ESP32-S3的NVS和BLOB的知识。希望你觉得这个旅程既有趣又有益!🎉
有关更多的内容,推荐你看看乐鑫官方的文档,我也是通过阅读文档来学习的,乐鑫的官方文档提供了大量有关ESP32-S3和NVS等主题的详细信息,我相信这对其他正在学习你也会很有帮助的!😊