Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。
在ESP32开发中,数据持久化存储是一个常见需求。Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。

Preferences库利用ESP32芯片内置的NVS(Non-Volatile Storage)存储机制,能够在设备重启或断电后保留数据。与EEPROM相比,它提供了更好的性能、更大的存储空间和更灵活的数据管理方式。

核心概念

命名空间与键值对
Preferences采用命名空间(namespace)和键值对(key-value)的组织方式:
命名空间:相当于一个独立的存储区域,每个命名空间必须具有唯一名称
键值对:每个命名空间内包含多个键值对,键名在命名空间内必须唯一
命名空间和键名都区分大小写,且长度限制为最多15个字符。

数据类型支持

Preferences支持多种数据类型存储,包括:
类型名称 对应C/C++类型 大小(字节)
Bool bool 1
Char int8_t 1
UChar uint8_t 1
Short int16_t 2
UShort uint16_t 2
Int int32_t 4
UInt uint32_t 4
Long int32_t 4
ULong uint32_t 4
Float float_t 4
Long64 int64_t 8
ULong64 uint64_t 8
Double double_t 8
String const char*/String 可变长度
Bytes uint8_t 可变长度

基本使用流程

1. 初始化Preferences对象
首先需要创建Preferences对象:

Preferences prefs;  // 创建Preferences对象
2. 打开/创建命名空间
使用begin()方法打开或创建命名空间:
prefs.begin("myNamespace", false);  
// 参数1: 命名空间名称 
// 参数2: false表示读写模式,true表示只读模式 
3. 检查键是否存在
在首次运行时,通常需要检查键是否存在以确定是否需要初始化:
if(!prefs.isKey("initialized")) {
    // 首次运行,进行初始化
} 
4. 存储数据
使用putX系列方法存储数据:
prefs.putInt("counter", 0);      // 存储整型
prefs.putString("name", "ESP32");// 存储字符串
prefs.putFloat("temp", 25.5);    // 存储浮点数 
5. 读取数据
使用getX系列方法读取数据:
int counter = prefs.getInt("counter");
String name = prefs.getString("name"); 
float temp = prefs.getFloat("temp"); 
6. 关闭命名空间
完成操作后关闭命名空间:
prefs.end();
高级功能
批量数据存储
对于较大的数据块,可以使用Bytes类型:
uint8_t data[100] = {...};  // 要存储的数据
prefs.putBytes("dataKey", data, sizeof(data)); 
// 读取时
uint8_t buffer[100];
size_t len = prefs.getBytesLength("dataKey"); // 获取数据长度
prefs.getBytes("dataKey", buffer, len); 
数据管理
prefs.remove("keyName");  // 删除指定键
prefs.clear();            // 清空当前命名空间 
实用功能
size_t freeEntries = prefs.freeEntries(); // 获取剩余可用键数量 
PreferenceType type = prefs.getType("key"); // 获取键的数据类型 

存储限制

尽管 Preferences API 设计用来存储少量的数据,但它确实有一些存储限制,这些限制主要与底层存储技术以及 ESP32 的硬件特性有关:

  • 空间:默认情况下,ESP32 的 Preferences 存储空间大约是 4KB。这意味着你可以存储大约 3000 个键值对(每个键值对大约占用 1 个字节的键名长度和 4 个字节的值长度)。
  • 键名:键名必须是字符串,并且在整个 Preferences 命名空间中必须是唯一的。每个键名的最大长度是 15 个字符。
  • 值:对于字符串,最大长度是约 1020 个字符(考虑到内部元数据)。

实际应用示例

以下是一个完整的配置管理示例:
#include <Preferences.h>
 
Preferences prefs;
 
void setup() {
    Serial.begin(115200);
    
    // 打开配置命名空间
    prefs.begin("config", true);
    
    // 读取配置
    String ssid = prefs.getString("ssid");
    String passwd = prefs.getString("passwd");
    
    Serial.printf("SSID: %s\n", ssid.c_str());
    Serial.printf("Passwd: %s\n", passwd.c_str());
    
    prefs.end();
}
 
void updateConfig() {

    // 打开配置命名空间
    prefs.begin("config", false);

    // 设置默认值
    prefs.putString("ssid", "ssid");
    prefs.putString("passwd", "********");
    
    prefs.end();
}

void loop() {

}
- 本文内容来自网络,如有侵权,请联系本站处理。

06-30   阅读(69)   评论(0)
 标签: 创客 Arduino ESP32 Preferences

涨知识
AMR

AMR是Autonomous Mobile Robot的缩写,即自主移动机器人,是集环境感知,动态决策规划,行为控制与执行等多功能于一体的综合系统。

评论:
相关文章
Arduino-ESP32与ESP-IDF的版本对应表

Arduino-ESP32与ESP-IDF的版本对应表。


Arduino-ESP32文件系统全解析:SPIFFS、LittleFS、SD卡操作

Arduino-ESP32提供了多种文件系统解决方案,本文将深入解析SPIFFS、LittleFS和SD卡三种主流存储方案,帮助你做出最佳选择。


ESP32-P4-WIFI6开发板

ESP32-P4-WIFI6-DEV-KIT是一款微雪(Waveshare)设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。


ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。