这个库提供了一个简化的接口来操作 ESP32 的非易失性存储(NVS),并包含一个管理器来高效管理多个命名空间的访问。它封装了 ESP-IDF 的 NVS API,提供了更易用且线程安全的接口。
Cpp
#include "my_nvs.hpp"
void app_main() {
// 初始化 NVS 分区
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// 创建命名空间对象(默认使用 "nvs" 分区)
MyNVS my_namespace("my_app_data", NVS_READWRITE);
// 写入数据
my_namespace.write("counter", 42);
my_namespace.write("device_name", "ESP32_Device");
// 读取数据
int32_t counter;
my_namespace.read("counter", &counter);
std::string device_name;
my_namespace.read("device_name", device_name);
ESP_LOGI(TAG, "Counter: %d, Device: %s", counter, device_name.c_str());
}
Cpp
// 写入二进制数据
uint8_t config_data[128] = {...};
my_namespace.write("config_blob", config_data, sizeof(config_data));
// 读取二进制数据
size_t blob_size = sizeof(config_data);
uint8_t read_data[128];
my_namespace.read("config_blob", read_data, &blob_size);
Cpp
// 检查键是否存在
if (my_namespace.find("setting") == ESP_OK) {
// 键存在
}
// 删除键
my_namespace.erase_key("obsolete_setting");
// 清空整个命名空间
my_namespace.erase_all();
// 手动提交更改
my_namespace.commit();
Plaintext
Component config -> MyNVS Configuration ->
[*] Enable MyNVS Manager
(8) Max number of namespaces
idf.py add-dependency "smallin/my_nvs^1.0.2"