通过 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;
}
posted on 2025-09-27 14:26  星辰河岳  阅读(15)  评论(0)    收藏  举报