String Arduino ESP8266从EEPROM读取字符串

String Arduino ESP8266从EEPROM读取字符串,string,append,esp8266,eeprom,String,Append,Esp8266,Eeprom,我实现了从ESP8266 EEPROM读取字符串-到目前为止还不错 但是,尝试将第二个字符串附加到刚刚读取的第一个字符串是不起作用的 我从EEPROM地址0处的编号2开始。我从地址0读到地址6 这是我的ESP8266.ino代码: String readM = ""; String appendixStr = "|||"; Serial.print("appendixStr = "); Serial.println(appendixStr); String

我实现了从ESP8266 EEPROM读取字符串-到目前为止还不错

但是,尝试将第二个字符串附加到刚刚读取的第一个字符串是不起作用的

我从EEPROM地址0处的编号
2
开始。我从地址0读到地址6

这是我的ESP8266.ino代码:

    String readM = "";
    String appendixStr = "|||";
    Serial.print("appendixStr = ");
    Serial.println(appendixStr);
    String dailyzStr = "";
    for (int a = 0; a < 7; ++a) {           // addr 0...6
        dailyzStr += char(EEPROM.read(a));
    }
    readM += dailyzStr + appendixStr;
    Serial.print("hmmm = ");
    Serial.println(readM);
String readM=”“;
字符串appendixStr=“| | |””;
Serial.print(“附录str=”);
序列号println(附录str);
字符串dailyzStr=“”;
对于(inta=0;a<7;++a){//addr 0…6
dailyzStr+=字符(EEPROM.read(a));
}
readM+=dailyzStr+附录str;
Serial.print(“hmmm=”);
Serial.println(readM);
下面是日志打印的内容:

显然,我希望
hmmm=2 | | |
,但我只得到
hmmm=2


为什么不能附加???

我建议使用以下方法:

#include <EEPROM.h>
// Tell it where to store your config data in EEPROM
#define cfgStart 32
// To check if it is your config data
#define version "abc"

struct storeStruct_t{
  char myVersion[3];
  char name[32];
};

void saveConfig() {
  // Save configuration from RAM into EEPROM
  EEPROM.begin(4095);
  EEPROM.put( cfgStart, settings );
  delay(200);
  EEPROM.commit();                      // Only needed for ESP8266 to get data written
  EEPROM.end();                         // Free RAM copy of structure
}

void loadConfig() {
  // Loads configuration from EEPROM into RAM
  Serial.println("Loading config");
  storeStruct_t load;
  EEPROM.begin(4095);
  EEPROM.get( cfgStart, load);
  EEPROM.end();
  // Check if it is your real struct
  if (test.myVersion[0] != version[0] ||
      test.myVersion[1] != version[1] ||
      test.myVersion[2] != version[2]) {
    saveConfig();
    return;
  }
  settings = load;
}

// Empty settings struct which will be filled from loadConfig()
storeStruct_t settings = {
  "",
  ""
};
#包括
//告诉它在EEPROM中存储配置数据的位置
#定义cfgstart32
//检查它是否是您的配置数据
#定义版本“abc”
结构存储结构{
char-myVersion[3];
字符名[32];
};
void saveConfig(){
//将配置从RAM保存到EEPROM
EEPROM.begin(4095);
EEPROM.put(cfgStart,设置);
延迟(200);
EEPROM.commit();//仅ESP8266需要写入数据
EEPROM.end();//结构的空闲RAM拷贝
}
void loadConfig(){
//将配置从EEPROM加载到RAM中
Serial.println(“加载配置”);
存储结构加载;
EEPROM.begin(4095);
EEPROM.get(cfgStart,load);
EEPROM.end();
//检查它是否是您的真实结构
if(test.myVersion[0]!=version[0]||
test.myVersion[1]!=版本[1]||
test.myVersion[2]!=版本[2]){
saveConfig();
回来
}
设置=负载;
}
//将从loadConfig()填充的空设置结构
storeStruct\t设置={
"",
""
};
使用saveConfig()保存设置结构

如果要从EEPROM加载,请使用loadConfig()->它将存储在设置结构中

谢谢,KeeyPee。看起来很有趣。我只是想知道:如果你不想一次读取整个EEPROM,但只读取字节0…6,例如?那么你还使用loadConfig吗?哦,顺便问一下,test是如何定义的???@iKK抱歉,响应太晚了,test只是加载eeprom的一个局部变量,它在loadConfig()中被指定为storestruct。只需在结构中保存所需的所有内容并调用saveConfig。您应该通过在程序启动时加载loadConfig来检索设置。