ESP32-C3入门教程 基础篇⑪——Non-Volatile Storage (NVS) 非易失性存储参数的读写

81 篇文章 551 订阅 ¥59.90 ¥99.00

一、前言

本文基于VS Code IDE进行编程、编译、下载、运行等操作
基础入门章节请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World
教程目录大纲请查阅:ESP32-C3入门教程——导读

二、NVS介绍

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

NVS 库通过调用 esp_partitionAPI 使用主 flash 的部分空间,即类型为 data 且子类型为 nvs 的所有分区。

应用程序可调用 nvs_open()选择使用带有 nvs 标签的分区,也可以通过调用 nvs_open_from_partition()选择使用指定名称的任意分区。

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

  • 整数型:uint8_tint8_tuint16_tint16_tuint32_tint32_tuint64
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,使用 NVS 库也可以实现将 WiFi 和 TCP 服务器的参数保存在 Flash 存储中。相比于 EEPROM 库,NVS 库更加灵活,支持更多类型的数据。以下是一个示例代码: ```c #include <Preferences.h> // 定义结构体 struct WifiTcpParams { char ssid[32]; // WiFi SSID char password[64]; // WiFi 密码 char server[64]; // TCP 服务器地址 int port; // TCP 服务器端口 }; // 定义 Preferences 对象 Preferences prefs; // 定义结构体变量 WifiTcpParams params; void saveParams() { // 将结构体写入 NVS prefs.putBytes("params", &params, sizeof(params)); prefs.end(); } void loadParams() { // 从 NVS 中读取结构体 prefs.begin("my-app", false); prefs.getBytes("params", &params, sizeof(params)); prefs.end(); } void setup() { // 初始化 NVS prefs.begin("my-app", false); // 读取参数 loadParams(); // 连接 WiFi WiFi.begin(params.ssid, params.password); while (WiFi.status() != WL_CONNECTED) { delay(1000); } // 连接 TCP 服务器 WiFiClient client; while (!client.connect(params.server, params.port)) { delay(1000); } } void loop() { // 主循环 } ``` 首先,我们需要定义一个结构体来保存 WiFi 和 TCP 服务器的参数。然后,我们使用 Preferences 类来将这个结构体保存在 NVS 中。在 setup 函数中,我们先初始化 Preferences 对象,然后读取参数并连接网络。需要注意的是,在保存参数之前,我们需要先连接上 WiFi,并确保 TCP 服务器可用。否则,保存的参数可能是错误的,无法正常连接网络。 相比于 EEPROM 库,NVS 库有以下优势: - 支持更多类型的数据,如字符串、数组等; - 可以在程序运行时随时读写 NVS,而不需要在 setup 函数中初始化; - 写入 NVS 的数据不会影响程序的运行速度,因为它是异步写入的。 因此,如果你需要更灵活的数据存储方案,可以考虑使用 NVS 库。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值