ESP32 S3 基于Arduino验证NVS持久性存储-综合

358 阅读2分钟

1 NVS持久性存储1

#include <Preferences.h>

/*
    prefs.begin("mynamespace");       // 打开命名空间mynamespace, 默认参数是false的,也就是说具有写入和删除功能的。
    prefs.begin("mynamespace",true);  // 设置成true,命名空间是没有移除和写入权限的
    在给命名空间初始化函数参数给true:是没有移除和写入权限的,只有读取数据的权限,而参数false,则相反。
    如果使用prefs.begin("test"), 默认参数是false的,也就是说具有写入和删除功能的。
*/

void setup() {
    USBSerial.begin(115200);
    USBSerial.println();
    delay(2000);

    Preferences prefs; // 声明Preferences对象
    prefs.begin("mynamespace"); // 打开命名空间mynamespace
    uint32_t count = prefs.getUInt("count", 0); // 获取当前命名空间中的键名为"count"的值
                                                // 如果没有该元素则返回默认值0
    count++; // 累加计数
    USBSerial.printf("这是系统第 %u 次启动\n", count);
    prefs.putUInt("count", count); // 将数据保存到当前命名空间的"count"键中
    prefs.end(); // 关闭当前命名空间

    delay(5000);
    ESP.restart(); // 重启系统
}

void loop() {}

2 NVS持久性存储2

#include <Preferences.h>

// 键值查询
void setup() {
    USBSerial.begin(115200);
    USBSerial.println();
    delay(2000);

    Preferences prefs;

    prefs.begin("mynamespace");
    //prefs.clear(); // 删除当前命名空间中的所有元素
    //prefs.remove("naisu"); // 删除当前命名空间中键名为"naisu"的元素
    if(prefs.isKey("naisu")) { // 如果当前命名空间中有键名为"naisu"的元素
        USBSerial.printf("naisu: %s\n\n", prefs.getString("naisu"));
        while (1) {}     
    } else {
        String naisu = prefs.getString("naisu", "555"); // 获取当前命名空间中的键名为"naisu"的值
                                                        // 如果没有该元素则返回默认值"555"
        USBSerial.printf("naisu: %s\n\n", naisu);
        prefs.putString("naisu", "233");
        prefs.end();
        delay(5000);
        ESP.restart();
    }
}

void loop() {}

3 NVS持久性存储3

#include <Preferences.h>

void setup() {
    USBSerial.begin(115200);
    USBSerial.println();
    delay(2000);

    Preferences prefs;
    prefs.begin("mynamespace");

    prefs.putString("naisu", "233");
    USBSerial.printf("naisu: %s\n\n", prefs.getString("naisu", "not found"));
    prefs.remove("naisu"); // 删除当前命名空间中键名为"naisu"的元素
    USBSerial.printf("naisu: %s\n\n", prefs.getString("naisu", "not found"));

    prefs.putString("naisu", "233");
    USBSerial.printf("naisu: %s\n\n", prefs.getString("naisu", "not found"));
    prefs.clear(); // 删除当前命名空间中的所有元素
    USBSerial.printf("naisu: %s\n\n", prefs.getString("naisu", "not found"));

    prefs.end();
}
void loop() {}

4 NVS持久性存储4

#include <Preferences.h>
Preferences prefs;
uint32_t count;

void setup() {
    USBSerial.begin(115200);
    USBSerial.println();
    delay(2000);
}

void loop() {
    
    USBSerial.println("总大小:");
    USBSerial.println(prefs.freeEntries());
    delay(5000);

    for(int i=0;i<=10;i++){
        count++;
        prefs.begin("kaixin");
        prefs.putString("string"+count, "22333");
        prefs.putInt("int"+count, 1234567890);
        uint8_t buf[5] = {1, 2, 3, 4, 5};
        prefs.putBytes("byte"+count, buf, 5);
        delay(5000);
        USBSerial.println("剩余大小:");
        USBSerial.println(prefs.freeEntries());

        if(i==10){
            prefs.clear(); // 删除当前命名空间中的所有元素
        }
        prefs.end();
    }
    
}