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"); // 获取键的数据类型 

实际应用示例

以下是一个完整的配置管理示例:
#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() {

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

17:20   阅读(2)   评论(0)
 标签: maker Arduino ESP32 Preferences

涨知识
UART

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信。

评论:
相关文章
esp32cam开发板烧录micropython固件

‌ESP32-CAM与MicroPython结合可实现摄像头图像采集、视频流传输等功能,不过Micropython官方没有支持ESP32-CAM的固件,需要烧录第三方的专有固件。


小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。


MicroPython 开发ESP32应用之线程介绍及实例分析

MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。


盛思发布掌控板3.0

掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。


ESP32 MicroPython采集模拟传感器数值

使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。




Arduino 驱动 8×8 LED点阵屏

LED点阵屏由LED发光二极管组成,通过控制LED亮灭来显示文字、图片、动画、视频等,被广泛应用于公共场合做信息展示,如广告屏、公告牌等。


ESP32 使用DAC模拟输出完成两路呼吸灯

ESP32的DAC函数可以实现真正的模拟输出。


在 ESP32 上使用 LEDC (PWM)

ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。