Сохранение учетных данных WiFi в EEPROM на ESP8266 - PullRequest
0 голосов
/ 26 апреля 2020

Я использую следующий код для сохранения и загрузки учетных данных в и из 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();
    }

Заранее спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

Лучший способ создать структуру, в которой есть такой член, как ssid, пароль и т. Д. c. например,

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

, а затем сохранить всю эту структуру в eeprom по указанному c адресу. и позже извлекаем его с того же адреса всякий раз, когда мы хотим

Я сделал это, чтобы построить базу данных для фреймворка здесь

...