Hi,I'm implementing data writing&reading with EEPROM of NodeMCU to save Wifi's SSID and password,
I Power On NodeMCU Serial print infomation above:
EEPROM data is empty,can not get value,need SmartConfig!
Wait for SmartConfig
........................................SmartConfig Success
**SSID:TP-LINK_370EF5 **
PSW:
WiFi config saved to EEPROM SSID=TP-LINK_370EF5,password= //the SSID value is correct!
IP address: 192.168.1.113
I press NodeMCU Reset Button the Serial print info above
ESP8266 Module Starting....
Connect to Wifi
ssid=P-LINK_370EF5 //Look! the SSID read from EEPROM lost the first char "T"
password=
...................Connect WiFi Timeout ,need to ReConfig!
the first char of SSID is lost ,where is wrong?
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <Ticker.h>
int addr = 0;
int val =0; //val=1 mean EPROM saved data , val=0 mean EPROM is empty
String wifi;
String pwd;
Ticker timer0;
WiFiClient espClient;
struct CONFIG
{
char ssid[32];
char pass[32];
};
CONFIG buf;
void ResetFlag()
{
EEPROM.begin(100);
EEPROM.write(addr,0);
EEPROM.end();
}
void SetFlag()
{
EEPROM.begin(100);
EEPROM.write(addr,1);
EEPROM.end();
}
void ReConfig()
{
ResetFlag();
Serial.println("Connect WiFi Timeout ,need to ReConfig!");
}
void smartConfig()
{
WiFi.mode(WIFI_STA);
Serial.println("\r\nWait for SmartConfig");
WiFi.beginSmartConfig();
while (1)
{
Serial.print(".");
digitalWrite(LED_BUILTIN, 0);
delay(200);
digitalWrite(LED_BUILTIN, 1);
delay(200);
if (WiFi.smartConfigDone())
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
wifi=WiFi.SSID();
pwd =WiFi.psk();
saveConfig();
Serial.print("WiFi config saved to EEPROM SSID=");
Serial.print (buf.ssid);
Serial.print(",password=");
Serial.println(buf.pass);
SetFlag();
delay(5000);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
break;
}
}
}
void saveConfig() /*save config to eeprom */
{
EEPROM.begin(512);
strcpy(buf.ssid, WiFi.SSID().c_str());
strcpy(buf.pass, WiFi.psk().c_str());
EEPROM.put<CONFIG>(0, buf);
EEPROM.commit();
}
void loadConfig() /* load config from eeprom */
{
EEPROM.begin(512);
EEPROM.get<CONFIG>(0, buf);
}
void get_eeprom()
{
EEPROM.begin(100);
val = EEPROM.read(addr);
if (val==0)
{
Serial.println("EEPROM data is empty,can not get value,need SmartConfig!");
smartConfig();
}
else
{
Serial.println("Connect to Wifi");
loadConfig();
Serial.print("ssid=");Serial.println(buf.ssid);
Serial.print("password=");Serial.println(buf.pass);
WiFi.mode(WIFI_STA);
WiFi.begin(buf.ssid,buf.pass);
timer0.attach(10,ReConfig);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
}
void setup()
{
Serial.begin(115200);
if(!Serial){;}
delay(3000);
Serial.println("ESP8266 Module Starting....");
get_eeprom();
}
mqtt-test-eeprom.ino (2.49 KB)