Arduino ESP32 对NVS数据操作测试
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino ESP32 对NVS数据操作测试相关的知识,希望对你有一定的参考价值。
Arduino ESP32 对NVS数据操作测试
- 对
NVS
数据操作,所需加载的头文件Preferences.h
。
对命名空间初始化函数begin()
操作测试一
bool begin(const char * name, bool readOnly=false, const char* partition_label=NULL);
prefs.begin("test",true);
设置成true
#include <Arduino.h>
#include <Preferences.h>
void setup()
Serial.begin(115200);
Serial.println();
delay(2000);
Preferences prefs;
prefs.begin("test",true);
Serial.println(prefs.freeEntries());
if(prefs.isKey("name")) // 如果当前命名空间中有键名为"name"的元素
Serial.printf("name: %s\\n\\n", prefs.getString("name").c_str());
Serial.println("removing...");
if(prefs.remove("name"))
Serial.println("succese!");
Serial.println(prefs.freeEntries());
else
Serial.println(" 移除失败");
Serial.println(prefs.freeEntries());
prefs.end();
//ESP.restart();
else
size_t num = prefs.putString("name", "perseverance"); // 获取当前命名空间中的键名为"name"的值
// 如果没有该元素则返回默认值"555"
Serial.printf("name: %d\\n\\n", num);
Serial.println(prefs.freeEntries());
//prefs.putString("name", "233");
prefs.end();
delay(5000);
// ESP.restart();
void loop()
- 串口打印信息
对命名空间初始化函数begin()
操作测试二
修改命名空间初始参数,改为
false
。
#include <Arduino.h>
#include <Preferences.h>
void setup()
Serial.begin(115200);
Serial.println();
delay(2000);
Preferences prefs;
prefs.begin("test",false);
Serial.println(prefs.freeEntries());//获取空余nvs空间
if(prefs.isKey("name")) // 如果当前命名空间中有键名为"name"的元素
Serial.printf("name: %s\\n\\n", prefs.getString("name").c_str());
Serial.println("removing...");
if(prefs.remove("name"))
Serial.println("succese!");
Serial.println(prefs.freeEntries());
else
Serial.println(" 移除失败");
Serial.println(prefs.freeEntries());
prefs.end();
//ESP.restart();
else
size_t num = prefs.putString("name", "perseverance"); // 获取当前命名空间中的键名为"name"的值
Serial.printf("name: %d\\n\\n", num);//打印输入数据的长度
Serial.println(prefs.freeEntries());
prefs.end();
delay(5000);
// ESP.restart();
void loop()
- 串口打印输出结果
总结:在给命名空间初始化函数参数给true
:是没有移除和写入权限的,只有读取数据的权限,而参数false
,则相反。如果使用prefs.begin("test")
默认参数是false
的,也就是说具有写入和删除功能的。
测试代码(三)
如果命名空间初始化函数
prefs.begin("test",true);
将不停的重复重启。因为参数为true
,没有写入权限,写不进数据,所以下次重启后还是读不到数据。
#include <Arduino.h>
#include <Preferences.h>
void setup()
Serial.begin(115200);
Serial.println();
delay(2000);
Preferences prefs;
prefs.begin("test",false);
Serial.println(prefs.freeEntries());//获取空余nvs空间
if(prefs.isKey("name")) // 如果当前命名空间中有键名为"name"的元素
Serial.printf("name: %s\\n\\n", prefs.getString("name").c_str());
Serial.println("removing...");
if(prefs.remove("name"))
Serial.println("succese!");
Serial.println(prefs.freeEntries());
else
Serial.println(" 移除失败");
Serial.println(prefs.freeEntries());
prefs.end();
//ESP.restart();
else
Serial.println("Preferences中没有name键名。");
size_t num = prefs.putString("name", "perseverance9527"); // 获取当前命名空间中的键名为"name"的值
Serial.printf("name: %d\\n\\n", num);
Serial.println(prefs.freeEntries());
Serial.printf("name: %s\\n\\n", prefs.getString("name").c_str());
prefs.end();
delay(5000);
ESP.restart();
void loop()
测试代码四
分别
false
和true
下的读取数据。
#include <Arduino.h>
#include <Preferences.h>
void setup()
Serial.begin(115200);
Serial.println();
delay(2000);
Preferences prefs;
prefs.begin("test",false);
Serial.println(prefs.freeEntries());//获取空余nvs空间
size_t num = prefs.putString("name", "perseverance9527"); // 获取当前命名空间中的键名为"name"的值
// 如果没有该元素则返回默认值"555"
Serial.printf("name: %d\\n\\n", num);
Serial.println(prefs.freeEntries());
Serial.printf("name: %s\\n\\n", prefs.getString("name").c_str());
prefs.end();
// delay(5000);
// ESP.restart();
void loop()
Preferences prefs;
prefs.begin("test",true);
Serial.println(prefs.freeEntries());//获取空余nvs空间
Serial.printf("name: %s\\n\\n", prefs.getString("name").c_str());
prefs.end();
delay(5000);
写这篇补充的文章,主要是加深对NVS数据操作的熟悉,以及Preferences头文件中的函数的了解。
以上是关于Arduino ESP32 对NVS数据操作测试的主要内容,如果未能解决你的问题,请参考以下文章
Arduino框架下ESP32 EEPROM库函数实现对各数据类型保存示例
Arduino框架下对ESP32 NVS非易失性存储解读以及应用示例