ESP32-C3模组上跑通NVS(5)

2024-06-08 06:44
文章标签 esp32 c3 nvs 模组

本文主要是介绍ESP32-C3模组上跑通NVS(5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接前一篇文章:ESP32-C3模组上跑通NVS(4)

本文内容参考:

非易失性存储库 - ESP32 - — ESP-IDF 编程指南 latest 文档

ESP32-C3入门教程 基础篇(八、NVS — 非易失性存储库的使用)_esp入门教学-CSDN博客

【ESP-IDF】介绍NVS_esp-idf是什么-CSDN博客

《ESP-IDF入门指南》----->nvs_flash(非易失性存储库)_esp nvs flash-CSDN博客

12-ESP32-S3 的 NVS(Non-Volatile Storage)_esp32-s3 nvs-CSDN博客

特此致谢!

二、NVS常用函数

14. nvs_set_i8函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_i8 (nvs_handle_t handle, const char* key, int8_t value);
  • 函数功能

为给定键设置int8_t值。

根据键的名称设置键的值。注意,在调用nvs_commit之前,不会更新实际存储。不管键值对是被创建还是被更新。函数总是需要至少一个nvs可用条目。参见nvs_get_stats。

创建操作类型后,可用条目的数量将减少一个;更新操作类型后,可用条目的数量保持不变。

  • 函数参数

handle:从nvs_open函数获得的句柄。无法使用以只读方式打开的句柄。

key:键名。最大长度为(NVS_KEY_NAME_MAX_SIZE-1)(15)个字符。不应该是空的。

value:要设置的值。

  • 函数返回值

ESP_OK —— 值设置成功。

ESP_FAIL —— 存在内部错误;很可能是由于NVS分区损坏(仅当NVS断言检查被禁用时)。

ESP_ERR_NVS_INVALID_HANDLE —— 句柄已关闭或为NULL。

ESP_ERR_NVS_READ_ONLY —— 存储句柄以只读方式打开。

ESP_ERR_NVS_INVALID_NAME —— 键名称不满足约束。

ESP_ERR_NVS_NOT_ENOUGH_SPACE —— 底层存储中没有足够的空间来保存值。

ESP_ERR_NVS_REMOVE_FAILED —— 值未更新,因为闪存写入操作失败。然而,该值已写入,并且更新将在重新初始化nvs后完成,前提是闪存操作不会再次失败。

15. nvs_set_u8 函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_u8 (nvs_handle_t handle, const char* key, uint8_t value);
  • 函数功能

为给定的键设置uint8_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

16. nvs_set_i16函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_i16 (nvs_handle_t handle, const char* key, int16_t value);
  • 函数功能

为给定的键设置int16_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

17. nvs_set_u16函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_u16 (nvs_handle_t handle, const char* key, uint16_t value);
  • 函数功能

为给定的键设置uint16_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

18. nvs_set_i32函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_i32 (nvs_handle_t handle, const char* key, int32_t value);
  • 函数功能

为给定的键设置int32_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

19. nvs_set_u32函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_u32 (nvs_handle_t handle, const char* key, uint32_t value);
  • 函数功能

为给定的键设置uint32_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

20. nvs_set_i64函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_i64 (nvs_handle_t handle, const char* key, int64_t value);
  • 函数功能

为给定的键设置int64_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

21. nvs_set_u64函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_u64 (nvs_handle_t handle, const char* key, uint64_t value);
  • 函数功能

为给定的键设置uint64_t值。

除了数据类型之外,此函数与nvs_set_i8相同。

22. nvs_set_str函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_str (nvs_handle_t handle, const char* key, const char* value);
  • 函数功能

为给定键设置字符串。

设置键的字符串值。函数需要整个空间,以便新数据可以作为同一nvs页面中的连续条目使用。操作消耗1个开销条目,并且每32个新字符串(包括要设置的零字符)消耗1个条目。

在对现有键进行值更新的情况下,由以前的值和开销条目占用的条目将返回到可用条目的池中。

注意:

1)长字符串值的存储可能会由于nvs页面的碎片而失败,即使nvs_get_stats返回的available_entries表明有足够的总体可用空间。

2)在调用nvs_commit之前,不会更新基础存储。

  • 函数参数

handle:从nvs_open函数获得的句柄。无法使用以只读方式打开的句柄。

key:键名。最大长度为(NVS_KEY_NAME_MAX_SIZE-1)(15)个字符。不应该是空的。

value:要设置的值。对于字符串,如果有一个完整的页面可供写入,则最大长度(包括空字符)为4000字节。然而,如果自由空间是碎片化的,此最大长度会减少。

  • 函数返回值

ESP_OK —— 值设置成功。

ESP_FAIL —— 存在内部错误;很可能是由于NVS分区损坏(仅当NVS断言检查被禁用时)。

ESP_ERR_NVS_INVALID_HANDLE —— 句柄已关闭或为NULL。

ESP_ERR_NVS_READ_ONLY —— 存储句柄以只读方式打开。

ESP_ERR_NVS_INVALID_NAME —— 键名称不满足约束。

ESP_ERR_NVS_NOT_ENOUGH_SPACE —— 底层存储中没有足够的空间来保存值。

ESP_ERR_NVS_REMOVE_FAILED —— 值未更新,因为闪存写入操作失败。然而,该值已写入,并且更新将在重新初始化nvs后完成,前提是闪存操作不会再次失败。

ESP_ERR_NVS_VALUE_TOO_LONG —— 字符串值太长。

23. nvs_set_blob函数

  • 函数原型

components\components\nvs_flash\include\nvs.h中:

esp_err_t nvs_set_blob(nvs_handle_t handle, const char* key, const void* value, size_t length);
  • 函数功能

为给定键设置可变长度二进制值。

设置键的可变长度二进制值。函数使用2个开销和1个条目,每个条目来自可用条目池中的32字节新数据。参见nvs_get_stats。

在现存密钥的值更新的情况下,现有值和2个开销项所占用的空间将返回到可用项的池中。

注意:在调用nvs_commit之前,不会更新基础存储。

  • 函数参数

handle:从nvs_open函数获得的句柄。无法使用以只读方式打开的句柄。

key:键名。最大长度为(NVS_KEY_NAME_MAX_SIZE-1)(15)个字符。不应该是空的。

value:要设置的值。

length:要设置的二进制值的长度,以字节为单位;最大长度为508000字节或(分区大小的97.6%-4000)字节,以较低者为准。

  • 函数返回值

ESP_OK —— 值设置成功。

ESP_FAIL —— 存在内部错误;很可能是由于NVS分区损坏(仅当NVS断言检查被禁用时)。

ESP_ERR_NVS_INVALID_HANDLE —— 句柄已关闭或为NULL。

ESP_ERR_NVS_READ_ONLY —— 存储句柄以只读方式打开。

ESP_ERR_NVS_INVALID_NAME —— 键名称不满足约束。

ESP_ERR_NVS_NOT_ENOUGH_SPACE —— 底层存储中没有足够的空间来保存值。

ESP_ERR_NVS_REMOVE_FAILED —— 值未更新,因为闪存写入操作失败。然而,该值已写入,并且更新将在重新初始化nvs后完成,前提是闪存操作不会再次失败。

ESP_ERR_NVS_VALUE_TOO_LONG —— 值太长。

本文中的各函数对应于前文(ESP32-C3模组上跑通NVS(1)-CSDN博客)提到的如下内容:

 更多函数介绍请看下回。

这篇关于ESP32-C3模组上跑通NVS(5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041445

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

lvgl_micropython development for esp32

​​​​​​上一篇博客已经编译源码生成了ESP32C3的固件lvgl_micropy_ESP32_GENERIC_C3-4.bin,这篇博客开发一个界面。 一、开发环境 1、安装开发工具 Windows安装Thonny工具,官网链接:Thonny, Python IDE for beginners。 参考博客:用MicroPython开发ESP32- 用Thonny写程序_esp32用什么

ESP32通过I2C驱动PCA9557IO扩展芯片

前言 ESP32自带的IO管脚比较有限,这个时候我们就需要使用一些IO扩展芯片扩展我们的IO,今天就介绍一款使用I2C接口扩展8个IO的芯片 PCA9557 PCA 9557芯片介绍 PCA9557是一款硅CMOS电路,为SMBus和I²C总线应用提供并行输入/输出扩展。PCA9557由8位输入端口寄存器、8位输出端口寄存器和I²C总线/SMBus接口组成。具有低电流消耗和高阻抗开漏输出引脚

ESP32使用MQTT_TCP连接阿里云

ESP32-IDF中MQTT函数的介绍 esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config) 函数功能:mqtt 客户端初始化 函数形参: mqtt 客户端的配置 函数返回值:正确则返回根据配置创建的 mqtt 客户端句柄;异常则返回 NULL。 其中函数形参 esp_mqtt

ESP32作为ModbusRTU主机读取从机数据

简介 ESP32 作为 ModbusRTU主机读取从机的数据,使用ESP32的串口2实现 代码改造 在 mb_master 的例程上修改 修改工程配置,将modbus模式修改成 RTU 模式,其他设置保持默认. demo工程解析 程序运行时读取以下寄存器: 保持寄存器 从寄存器0开始 读取6个寄存器保持寄存器 从寄存器10开始 读取58个寄存器,如果寄存器的内容不是0xAAAA,则将0x

ESP32使用按键配网并通过LED指示网络状态

前言 上面我们已经可以通过 ESPTOUCH 和 Airkiss 给模块配网,并且存储在 nvs 中,重启后仍然可以联网,只是这样仍然不能满足我们实际的应用,这次我们增加按键作为输入,LED作为输出,实现长按按键配网,并可以通过LED指示网络状态。 添加自己的组件 为了让程序结构更加清晰,所以我们在smart_config例程的基础上做了修改,在main文件夹里新建了main.c 、smar

ESP32使用Smartconfig和Airkiss配网方式连接无线路由器

1. ESP32的配网方式 1.1 前言 ESP32模块在实际使用时,可能需要连接不同的网络,如果将无线的 ssid 和 key 预先固定好,就回存在很大的局限性;所以我们引入了“空中配网技术”,比如smartconfig,airkiss,蓝牙辅助配网等等。 Smartconfig与Airkiss 是目前使用比较广泛的空中配网技术,smartconfig 需要专用的 app 才能实现,air

通过ESP32读取I2C温湿度传感器项目:协议与代码实例

简介 在本项目中,我们将使用ESP32开发板读取I2C温湿度传感器的数据。我们将详细介绍I2C协议,并提供图文并茂的代码实例,帮助你快速上手。 项目流程 选择硬件:ESP32开发板、I2C温湿度传感器(如DHT12、HTU21D、SHT30等)、连接线和面包板。了解I2C协议:I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,适用于短距离通信。硬

03_ESP32+MicroPython 连接WIFI

注意事项: 1.WIFI 名字写错会报错“OSError: Wifi Internal Error” 2.WIFI不要使用5G频率,否则运行报错,要使用2.4G频率。 3.运行代码前,请将WiFi连接信息替换为你自己的WiFi配置。 from machine import Pin, SPIimport timeimport networkimport machinedef do_co