我正在使用以下代码来将凭据保存到EEPROM或从EEPROM加载凭据:
void loadCredentials() {
EEPROM.begin(512);
EEPROM.get(0, ssid);
EEPROM.get(0+sizeof(ssid), password);
char ok[2+1];
EEPROM.get(0+sizeof(ssid)+sizeof(password), ok);
EEPROM.end();
if (String(ok) != String("OK")) {
ssid[0] = 0;
password[0] = 0;
}
Serial.println("Recovered credentials:");
Serial.println(ssid);
Serial.println(strlen(password)>0?"********":"<no password>");
}
/** Store WLAN credentials to EEPROM */
void saveCredentials() {
EEPROM.begin(512);
EEPROM.put(0, ssid);
EEPROM.put(0+sizeof(ssid), password);
char ok[2+1] = "OK";
EEPROM.put(0+sizeof(ssid)+sizeof(password), ok);
EEPROM.commit();
EEPROM.end();
Serial.print("Saving SSID: ");
Serial.println(ssid);
Serial.print("Password: ");
Serial.println(password);
Serial.println("Done");
}
但是,loadCredentials()
始终返回空或无效的凭据。我无法完全理解为什么saveCredentials()
似乎可以正常运行,并且WiFi.begin(ssid, passaord)
可以正常工作(直到您重置)
这里是用于将凭据设置为变量的代码:
if(ssidchange){
a = String(a);
a.toCharArray(tempssid, 50);
ssid = tempssid;
Serial.print("Done, SSID changed to ");
Serial.println(ssid);
ssidchange = false;
}
else if(passchange){
char temppass[50];
String a2 = String(a);
a2.toCharArray(temppass, 50);
ssid = tempssid;
password = temppass;
Serial.print("SSID changed to ");
Serial.println(tempssid);
Serial.print("and pass changed to ");
Serial.println(password);
saveCredentials();
delay(3000);
ESP.restart();
}
提前非常感谢您!
更好的方法来制作具有ssid,password等成员的结构。例如
struct wificredential{
char ssid[30];
char pass[30];
}
然后将整个结构存储在eeprom中的特定地址。然后在需要时从相同的地址获取它]
我已经完成了为框架here建立数据库的工作>