【MicroPython ESP32】NVS数据非易失性存储示例讲解说明

【MicroPython ESP32】NVS数据非易失性存储示例讲解说明


  • ✨本案例基于Thonny平台开发。✨

📖NVS非易失性存储

🌿非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据。本文档将利用esp32模块中的 NVS 里面的函数对数据进行存储、读写、删除操作示例讲解。
  • 📍引用:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/storage/nvs_flash.html

📝 NVS类函数解读

📌通过Thonny软件平台,在Shell调试窗口使用help命令查询NVS类的的相关参数:

在这里插入图片描述

  • 🎄Mciropython ESP32 NVS官方介绍文档::https://docs.micropython.org/en/latest/library/esp32.html?highlight=nvs#esp32.NVS
  • ⛳NVS类的成员对象
  • 📑NVS.set_i32(key, value):在实例化的命名空间中存入一个键值对,值必须为32位有正负的整数。
  • 📑 NVS.get_i32(key):#在实例化的空间中获取key(所有键名都为字符串类型)的值,返回指定键的带符号整数值。如果键不存在或具有不同类型,则引发OSError
  • 📑 NVS.get_blob(key, buffer):将指定键的blob的值读入缓冲区,缓冲区必须是一个bytearray。返回实际读取的长度。如果键不存在,具有不同的类型,或缓冲区太小,将引发OSError
  • 📑 NVS.set_blob(key, value):设置指定键的二进制blob值。传入的值必须支持缓冲区协议,例如bytes, bytearray, str(注意esp-idf区分blob和string,这个方法总是写入blob,即使字符串作为值传入。)记得最后使用 NVS.commit()提交保存
  • 📑NVS.erase_key(key):删除键值对。
  • 📑 NVS.commit():提交并保存。

⛳示例

from  esp32 import NVS
value=NVS('spacename') # spacename是命名空间,也就是实例化的开辟了一个叫spacename的存储空间
value.set_i32('ID',9527) # 在实例化的命名空间中存入一个键值对,值必须为32位有正负的整数  {'ID':9527}

value.set_blob('name','perseverance') #存入一个字符串型的键值对

value.commit() # 把存好的数据刷入实例化的命名空间,提交并保存。

if __name__=='__main__':
    ID_value=value.get_i32('ID') #在实例化的空间中取出'ID'的值
    print(ID_value)
    buf = bytearray(12) #准备缓冲区,大小为12(长度一定要大于后等于要接收的数据长度)
    len=value.get_blob('name',buf)
    print(len)
    print(buf)# 打印bytearray
    print(buf.decode('utf-8'))#bytearray转string
#     value.erase_key('name') #删除这个键值
  • Shell调试窗口信息

在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,演示如何在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); } } ``` 注意,这只是一个简单的示例代码,可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值