esp32 nvs存储 idf完整代码
时间: 2024-03-22 11:16:27 浏览: 139
以下是一个简单的示例代码,演示如何在ESP32 IDF中使用非易失性存储(NVS)来存储和读取数据。
首先,需要在头文件中包含NVS库:
```
#include "nvs_flash.h"
```
在主函数中,需要初始化NVS库:
```
// 初始化NVS
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
```
然后,可以使用以下代码块来读取和写入NVS中的数据:
```
// 打开NVS命名空间
nvs_handle_t my_handle;
esp_err_t err = nvs_open("storage", NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
printf("Error opening NVS handle!\n");
} else {
// 读取数据
int32_t my_value;
err = nvs_get_i32(my_handle, "my_value", &my_value);
switch (err) {
case ESP_OK:
printf("my_value = %d\n", my_value);
break;
case ESP_ERR_NVS_NOT_FOUND:
printf("The value is not initialized yet!\n");
break;
default :
printf("Error reading value!\n");
}
// 写入数据
my_value++;
err = nvs_set_i32(my_handle, "my_value", my_value);
printf((err != ESP_OK) ? "Failed!\n" : "Done\n");
// 关闭NVS命名空间
nvs_close(my_handle);
}
```
完整的代码示例如下:
```
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
void app_main()
{
// 初始化NVS
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
// 打开NVS命名空间
nvs_handle_t my_handle;
err = nvs_open("storage", NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
printf("Error opening NVS handle!\n");
} else {
// 读取数据
int32_t my_value;
err = nvs_get_i32(my_handle, "my_value", &my_value);
switch (err) {
case ESP_OK:
printf("my_value = %d\n", my_value);
break;
case ESP_ERR_NVS_NOT_FOUND:
printf("The value is not initialized yet!\n");
break;
default :
printf("Error reading value!\n");
}
// 写入数据
my_value++;
err = nvs_set_i32(my_handle, "my_value", my_value);
printf((err != ESP_OK) ? "Failed!\n" : "Done\n");
// 关闭NVS命名空间
nvs_close(my_handle);
}
}
```
注意,这只是一个简单的示例代码,可以根据需要进行修改和扩展。
阅读全文