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

2024-06-04 10:12
文章标签 esp32 模组 c3 nvs

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

本文内容参考:

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

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

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

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

特此致谢!

一、认识NVS

1. 简介

NVS的英文全称为Non-Volatile Storage,中文译为非易失性存储(库)。通俗地来讲,NVS就是在Flash上分配的一块内存空间,提供给用户保存掉电不丢失的数据。NVS主要用于在Flash中存储键值格式的数据。

NVS是一种用于在嵌入式系统中保存持久化数据的键值存储库。在ESP-IDF中,NVS提供了一种简单且有效的方法来在ESP32芯片上保存和读取配置信息、状态数据、用户设置等应用程序数据,以便在设备重新启动或断电后能够恢复状态。

NVS在ESP-IDF中具有以下特点和优点:

  • 非易失性

NVS中的数据在芯片断电或重新启动后仍然保持不变、不会丢失,适合保存需要长期存储的数据。

  • 键值对存储

NVS使用简单的键值对(Key-Value)结构来保存数据,方便进行读取和写入操作。

  • 分区管理

NVS将数据存储在不同的分区中,可以根据需要创建多个独立的NVS分区,用于不同的数据类型或应用场景,实现数据隔离和管理。

  • API丰富

ESP-IDF提供了丰富的NVS API,包括读取、写入、删除、遍历等操作,方便开发者进行数据的处理和管理。使用NVS的API不仅可以对NVS分区进行操作,也可以对任意的分区进行操作

学习和使用ESP-IDF中的NVS可以带来以下好处:

  • 持久化数据存储

NVS允许开发者将配置信息、状态数据等持久化保存在芯片中,即使设备断电或重新启动,数据也能够得到保留,从而避免了数据丢失的情况。

  • 简单高效的数据管理

NVS提供了简单易用的API,可以方便地进行数据的读取、写入、删除等操作,减少了开发复杂性和提高了代码效率。

  • 数据隔离和管理

NVS支持多个分区的管理,可以将不同类型的数据存储在不同的分区中,实现数据隔离和管理,便于维护和升级。

  • 节省存储空间

NVS采用了紧凑的键值对结构,可以高效地利用芯片内部的存储空间,避免了使用外部存储器的成本和复杂性。

2. 键值对

NVS是ESP32-C3 Flash(Flash就是板子上的一个存储芯片,对于ESP32-C3来说是SPI Flash)中的一个存储分区,我们可以在其中存储键值对(Key-Value pairs)。每个键值对都有一个唯一的键名(key name)和一个对应的值(value)。这种组合类似于哈希表的(key-value)对应结构,或可以将其类比理解成电脑上的文件名和内容的对应关系。

NVS的操作对象为键值对,其中键是ASCII字符串,当前支持的最大键长为15个字符。值可以为以下几种类型:

  • 整数型:uint8_tint8_tuint16_tint16_tuint32_tint32_tuint64_t 和 int64_t

  • 以 0 结尾的字符串;

  • 可变长度的二进制数据(BLOB)。

当前支持的最大值长为:字符串值上限为4000字节,其中包括空终止符;BLOB值上限为508000 字节或分区大小的97.6%减去4000 字节,以较低值为准。

后续可能会增加对 float 和 double 等其他类型数据的支持。

注:

(1)键必须唯一。为现有的键写入新值时,会将旧的值及数据类型更新为写入操作指定的值和数据类型。

(2)读取值时会执行数据类型检查。如果读取操作预期的数据类型与对应键的数据类型不匹配,则返回错误。

更多内容请看下回。

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



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

相关文章

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