当前位置: 首页 > article >正文

esp32s3 NVS空间读写操作

esp32s3 NVS空间读写操作

非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据。官网介绍

我简单理解就是存放一些简单的键值对。比如账号、密码之类的简单字符。用“键”来访问,反馈回来值。
demo参考示例写的,比较简单,补充如下。

#include <stdio.h>
#include "nvs_flash.h"
#include "esp_err.h"
#include "esp_log.h"
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

#define NAME_SPACE_WIFI1 "wifi1"
#define NAME_SPACE_WIFI2 "wifi2"

#define NVS_SSID_KEY      "ssid"
#define NVS_PASSWORD_KEY  "password"

/*namespace:命名空间
    key:
    buf:内存地址
    maxlen:最大读取长度
*/
void nvs_blob_read(const char *namespace,const char *key,void *buf,int maxlen)
{
    nvs_handle_t nvs_handle;
    size_t length = 0;
    nvs_open(namespace,NVS_READONLY,&nvs_handle);
    nvs_get_blob(nvs_handle,key,NULL,&length); //outvalue参数为NULL,则只返回数据长度
    if(length>0 && length<maxlen)
    {
        nvs_get_blob(nvs_handle,key,buf,&length); //outvalue参数为NULL,则只返回数据长度
    }
    nvs_close(nvs_handle);
}

void app_main(void)
{
    nvs_handle_t nvs_handle1;
    nvs_handle_t nvs_handle2;

    esp_err_t ret = nvs_flash_init();
    if(ret != ESP_OK)
    {
        nvs_flash_erase();
        ESP_ERROR_CHECK(nvs_flash_init());
    }
    /*命名空间1操作 nvs写入*/
    nvs_open(NAME_SPACE_WIFI1,NVS_READWRITE,&nvs_handle1);
    nvs_set_blob(nvs_handle1,NVS_SSID_KEY,"mywifi_esp32",strlen("mywifi_esp32"));
    nvs_set_blob(nvs_handle1,NVS_PASSWORD_KEY,"12345678",strlen("12345678"));
    nvs_commit(nvs_handle1);    //立即写入nvs
    nvs_close(nvs_handle1);


    /*命名空间2操作 nvs写入 */
    nvs_open(NAME_SPACE_WIFI2,NVS_READWRITE,&nvs_handle2);
    nvs_set_blob(nvs_handle2,NVS_SSID_KEY,"helloworld",strlen("helloworld"));
    nvs_set_blob(nvs_handle2,NVS_PASSWORD_KEY,"87654321",strlen("87654321"));
    nvs_commit(nvs_handle2);    //立即写入nvs
    nvs_close(nvs_handle2);

    vTaskDelay(pdMS_TO_TICKS(1000)); 

    /*nvs读取*/
    char read_buffer[64];
    /*命名空间1中的键值对读取*/
    memset(read_buffer,0,sizeof(read_buffer));
    nvs_blob_read(NAME_SPACE_WIFI1,NVS_SSID_KEY,read_buffer,sizeof(read_buffer));
    ESP_LOGI("nvs","namespace:%s,key:%s -> value:%s",NAME_SPACE_WIFI1,NVS_SSID_KEY,read_buffer);

    memset(read_buffer,0,sizeof(read_buffer));
    nvs_blob_read(NAME_SPACE_WIFI1,NVS_PASSWORD_KEY,read_buffer,sizeof(read_buffer));
    ESP_LOGI("nvs","namespace:%s,key:%s -> value:%s",NAME_SPACE_WIFI1,NVS_PASSWORD_KEY,read_buffer);

    /*命名空间2中的键值对读取*/
    memset(read_buffer,0,sizeof(read_buffer));
    nvs_blob_read(NAME_SPACE_WIFI2,NVS_SSID_KEY,read_buffer,sizeof(read_buffer));
    ESP_LOGI("nvs","namespace:%s,key:%s -> value:%s",NAME_SPACE_WIFI2,NVS_SSID_KEY,read_buffer);

    memset(read_buffer,0,sizeof(read_buffer));
    nvs_blob_read(NAME_SPACE_WIFI2,NVS_PASSWORD_KEY,read_buffer,sizeof(read_buffer));
    ESP_LOGI("nvs","namespace:%s,key:%s -> value:%s",NAME_SPACE_WIFI2,NVS_PASSWORD_KEY,read_buffer);

    /*nvs读取*/
    // size_t length = 0;
    // nvs_open(NAME_SPACE_WIFI1,NVS_READONLY,&nvs_handle1);
    // nvs_get_blob(nvs_handle1,NVS_SSID_KEY,NULL,&length); //outvalue参数为NULL,则只返回数据长度
    // if(length>0)
    // {
    //     char* buffer = (char*)malloc(length + 1);
    //     nvs_get_blob(nvs_handle1,NVS_SSID_KEY,buffer,&length); //outvalue参数为NULL,则只返回数据长度
    // }
}

http://www.kler.cn/a/313033.html

相关文章:

  • 算法——移除链表元素(leetcode203)
  • python实战(八)——情感识别(多分类)
  • const限定符-C语言中指针的“可变与不可变”法则
  • 如何查看电脑关机时间
  • #渗透测试#SRC漏洞挖掘#云技术基础02之容器与云
  • 从0开始学docker (每日更新 24-11-7)
  • Java 每日一刊(第13期):this super static
  • 【Redis入门到精通三】Redis核心数据类型(List,Set)详解
  • Qt 中 `QTimer`定时器的使用方法详解
  • 蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
  • Java并发集合框架:高效多线程数据访问
  • Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)
  • ubuntu 20.04 ‘Wired Unmanaged‘ 网络无法配置解决方法
  • 政务安全运营核心能力模块
  • Stable Diffusion绘画 | ControlNet应用-instant-ID控制器:快速生成人物多角度图片
  • 大模型——LLaVA和LLaMA的介绍和区别
  • redis-shake v4全量增量同步redis数据
  • 海康VM脚本中使用opencvsharp和halcon
  • HelpLook VS GitBook,在线文档管理工具对比
  • 【工具变量】科技金融试点城市DID数据集(2000-2023年)
  • 论文阅读-《Attention is All You Need》
  • Redis 哨兵模式的选举算法是什么?
  • Python 课程12-Python 自动化应用
  • Java NIO(非阻塞IO)简介
  • 【秋招笔试-支持在线评测】8.28华为秋招(已改编)-三语言题解
  • 算法打卡 Day34(贪心算法)-分发饼干 + 摆动序列 + 最大子序和