将WiFi凭证保存到ESP8266上的EEPROM

问题描述 投票:0回答:1

我正在使用以下代码来将凭据保存到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();
    }

提前非常感谢您!

arduino arduino-esp8266 eeprom
1个回答
0
投票

更好的方法来制作具有ssid,password等成员的结构。例如

struct wificredential{
  char ssid[30];
  char pass[30];
}

然后将整个结构存储在eeprom中的特定地址。然后在需要时从相同的地址获取它]

我已经完成了为框架here建立数据库的工作>

© www.soinside.com 2019 - 2024. All rights reserved.