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() {

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

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

涨知识
AMR

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

评论:
相关文章
【ESP32 C++教程】Unit2-2 Ws2812灯珠

本小节主要介绍Ws2812灯珠的使用、对父类进行扩展实现自定义功能,和指针向下强制转换的使用。


【ESP32 C++教程】Unit2-1 RGB三色LED

本小节主要介绍RGB三色LED的使用,以及多态的具体实现。


【ESP32 C++教程】Unit1-3 ESP32 Arduino 开发框架

ESP32 Arduino Framework是专门针对ESP32开发板的Arduino应用开发框架,为用户开发IOT应用、HMI应用提供一致的开发体验。


ESPConnect:基于浏览器的ESP32管理器

ESPConnect是一个基于现代浏览器的管理器,在你需要快速验证、调试、管理文件、检查状态的时候,它能帮你省下大量打开和切换重型工具的时间。


用ESP32做一个FM收音机

本文介绍两种使用TEA5767收音机模块实现FM收音机的方案,感兴趣的朋友可在此基础上实现更丰富的功能。


GPIOViewer:让ESP32引脚状态一览无余!

GPIOViewer 是一个强大的 Arduino 库,专门为 ESP32 芯片设计,可以实时监控 ESP32 芯片上的所有 GPIO 引脚状态。它可以帮助你快速直观地了解每个引脚的当前状态,例如高电平、低电平、输入、输出、中断等等。


ESP32 I2S音频:初识I2S通信与配置基础

在音频处理领域,I2S是一种广泛使用的通信协议,它专门用于芯片之间的音频数据传输。ESP32 作为一款高性能的微控制器,不仅支持 I2S 通信,还提供了强大的硬件接口和灵活的软件库,使其成为音频项目开发的理想选择。


小鹏物联网自动浇花套件

小鹏物联网智能浇花系统是照顾植物的好帮手,支持自动控制和手动控制两种模式,可通过电脑端和手机端查看数据和控制浇水。


ESP32 Arduino 开发框架

Arduino开发环境下适用于ESP32芯片系列开发板的应用开发框架。


【ESP32 C++教程】Unit1-2 C++类基础知识

本小节主要介绍C++ 类相关的基础知识,包括类的定义、继承、多态,范围作用域等。