通过 NVS(Non-Volatile Storage)非易失性存储存取LED颜色
nvs_param.h
#ifndef __NVS_PARAM_H
#define __NVS_PARAM_H
#include "nvs.h"
#include "nvs_flash.h"
#include "esp_log.h"
#include "led_strip.h"
void nvs_param_init(void);
esp_err_t get_led_color(led_color_t* color);
esp_err_t set_led_color(led_color_t* color);
#endif
nvs_param.c
#include "nvs_param.h"
#define led_namespace_name "_led_namespace"
#define led_param_key "_led_"
static const char *TAG = "NVS_PARAM";
/**
* @brief 初始化
*/
void nvs_param_init(void)
{
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
nvs_flash_erase();
nvs_flash_init();
}
}
/**
* @brief 取值
*/
esp_err_t get_led_color(led_color_t* color)
{
nvs_handle_t handle;
size_t length = sizeof(led_color_t);
esp_err_t err = nvs_open(led_namespace_name, NVS_READONLY, &handle);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "nvs_open, error: %s", esp_err_to_name(err));
return err;
}
err = nvs_get_blob(handle, led_param_key, color, &length);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "nvs_get_blob, error: %s", esp_err_to_name(err));
nvs_close(handle);
return err;
}
nvs_close(handle);
return ESP_OK;
}
/**
* @brief 存值
*/
esp_err_t set_led_color(led_color_t* color)
{
nvs_handle_t handle;
size_t length = sizeof(led_color_t);
esp_err_t err = nvs_open(led_namespace_name, NVS_READWRITE, &handle);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "nvs_open, error: %s", esp_err_to_name(err));
return err;
}
err = nvs_set_blob(handle, led_param_key, color, length);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "nvs_set_blob, error: %s", esp_err_to_name(err));
nvs_close(handle);
return err;
}
err = nvs_commit(handle);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "nvs_commit, error: %s", esp_err_to_name(err));
nvs_close(handle);
return err;
}
nvs_close(handle);
return ESP_OK;
}
浙公网安备 33010602011771号