如何在迭代中使用 Preferences.h 库?
How do I use Preferences.h library in iteration?
我在使用 Arduino IDE 的项目中使用 ESP32 WROOM 32D 模块。我想在它提供的 Preferences.h 库的帮助下使用 NVS 设施,尽管可以通过用户获得的数据将存储在不同的名称空间中,并且可以在以后使用。我可以轻松地创建简单的一两个命名空间,但为此我需要使用迭代。我一直在为此挠头,但没有运气。我在 GitHub 上看到一个人抱怨说它可能对迭代不友好。这是我的代码:
#include<Preferences.h>
Preferences ok;
String data1;
byte data2[2];byte data3[9];
byte buff[2];byte buf[9];
bool data4;
void setup() {
Serial.begin(115200);
for(int i=2; i<280; i++){
char testarray[]="test1";
testarray[4]=i;
ok.begin(testarray,false);
char datad1[20]="Code 15 launched 20";
datad1[15]=i;
ok.putString("data1", datad1);
ok.putBytes("data2","2",2);
ok.putBytes("data3","DF1BE29C",9);
ok.putBool("data4", true);
ok.end();
}
for(int i=2; i<280; i++){
char testarray[]="test1";
testarray[4]=i;
ok.begin(testarray,false);
data1=ok.getString("data1");
Serial.println(data1);
data2[2]=ok.getBytes("data2",buff,2);
Serial.print(data2[1], HEX);
Serial.print(data2[2], HEX);
Serial.println();
data3[9]=ok.getBytes("data3",buf,9);
for (int j = 0; j < sizeof(data3); j++) {
Serial.print(data3[j], HEX);
}
Serial.println();
data4=ok.getBool("data4");
Serial.println(data4);
ok.end();
}
}
void loop() {
}
这有什么问题吗?格式只是 const char* 作为命名空间名称的参数,我只是希望这样可以有效地创建 test1、test2、test3、test4 命名空间....但似乎不太可行。任何指导将不胜感激。
你不能像那样构造 C 字符串:
char testarray[]="test1";
testarray[4]=i;
...
char datad1[20]="Code 15 launched 20";
datad1[15]=i;
这只是用数值 2、3、.. 280 替换字符“1”。数字不是字符。
这是用数字构造 C 字符串的方法:
char label[8]; // 4 chars for "test", 3 chars for 3 digit number, 1 char for NULL
snprintf(label, sizeof(label), "test%d", i);
我在使用 Arduino IDE 的项目中使用 ESP32 WROOM 32D 模块。我想在它提供的 Preferences.h 库的帮助下使用 NVS 设施,尽管可以通过用户获得的数据将存储在不同的名称空间中,并且可以在以后使用。我可以轻松地创建简单的一两个命名空间,但为此我需要使用迭代。我一直在为此挠头,但没有运气。我在 GitHub 上看到一个人抱怨说它可能对迭代不友好。这是我的代码:
#include<Preferences.h>
Preferences ok;
String data1;
byte data2[2];byte data3[9];
byte buff[2];byte buf[9];
bool data4;
void setup() {
Serial.begin(115200);
for(int i=2; i<280; i++){
char testarray[]="test1";
testarray[4]=i;
ok.begin(testarray,false);
char datad1[20]="Code 15 launched 20";
datad1[15]=i;
ok.putString("data1", datad1);
ok.putBytes("data2","2",2);
ok.putBytes("data3","DF1BE29C",9);
ok.putBool("data4", true);
ok.end();
}
for(int i=2; i<280; i++){
char testarray[]="test1";
testarray[4]=i;
ok.begin(testarray,false);
data1=ok.getString("data1");
Serial.println(data1);
data2[2]=ok.getBytes("data2",buff,2);
Serial.print(data2[1], HEX);
Serial.print(data2[2], HEX);
Serial.println();
data3[9]=ok.getBytes("data3",buf,9);
for (int j = 0; j < sizeof(data3); j++) {
Serial.print(data3[j], HEX);
}
Serial.println();
data4=ok.getBool("data4");
Serial.println(data4);
ok.end();
}
}
void loop() {
}
这有什么问题吗?格式只是 const char* 作为命名空间名称的参数,我只是希望这样可以有效地创建 test1、test2、test3、test4 命名空间....但似乎不太可行。任何指导将不胜感激。
你不能像那样构造 C 字符串:
char testarray[]="test1";
testarray[4]=i;
...
char datad1[20]="Code 15 launched 20";
datad1[15]=i;
这只是用数值 2、3、.. 280 替换字符“1”。数字不是字符。
这是用数字构造 C 字符串的方法:
char label[8]; // 4 chars for "test", 3 chars for 3 digit number, 1 char for NULL
snprintf(label, sizeof(label), "test%d", i);