EEPROM ESP8266 - 倒问号
EEPROM ESP8266 - Inverted Question Mark
我卡在这里了。我正在尝试使用我修改后的 this 示例 SAVE/LOAD 板配置到 ESP8266 中的 EEPROM。
这是我的实际代码:
char ssid[32] = "";
char password[32] = "";
char device_type[1] = "";
char device_name[32] = "";
/** Load WLAN credentials from EEPROM */
void loadBoardConfig()
{
EEPROM.begin(512);
int addr = 0;
EEPROM.get(0, ssid);
addr += sizeof(ssid);
EEPROM.get(addr, password);
addr += sizeof(password);
EEPROM.get(addr, device_type);
addr += sizeof(device_type);
EEPROM.get(addr, device_name);
addr += sizeof(device_name);
char ok[2 + 1];
EEPROM.get(addr, ok);
EEPROM.end();
if (String(ok) != String("OK"))
{
ssid[0] = 0;
password[0] = 0;
device_type[0] = 0;
device_name[0] = 0;
}
}
/** Store Board Config to EEPROM */
void saveBoardConfig()
{
EEPROM.begin(512);
int addr = 0;
EEPROM.put(addr, ssid);
addr += sizeof(ssid);
EEPROM.put(addr, password);
addr += sizeof(password);
EEPROM.put(addr, device_type);
addr += sizeof(device_type);
EEPROM.put(addr, device_name);
addr += sizeof(device_name);
char ok[2 + 1] = "OK";
EEPROM.put(addr, ok);
EEPROM.commit();
EEPROM.end();
}
我意识到它没有正确连接到 WiFi,所以我添加了这段代码来测试:
Serial.print("EEPROM CONFIG: [{ SSID: ");
Serial.printf("%c",ssid);
Serial.print(" },\n{ Password: ");
Serial.print(password);
Serial.print(" },\n{ Device Type: ");
Serial.print(device_type);
Serial.print(" },\n{ Device Name: ");
Serial.print(device_name);
Serial.println(" }]");
Serial.print("STATUS: ");
Serial.println(ok);
这是我在串行监视器中得到的结果:
EEPROM CONFIG: [{ SSID: ⸮ },
{ Password: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ },
{ Device Type: ⸮ },
{ Device Name: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ }]
STATUS: ⸮⸮⸮?x⸮ @⸮⸮⸮?
知道为什么会这样吗?
我发现了问题。代码没问题,但 ESP8266 没有实际的 EEPROM。相反,它被模拟并保存在闪存中,我的设置是擦除所有闪存内容。我刚切换到 "Only Sketch" 就成功了!
谢谢!
我卡在这里了。我正在尝试使用我修改后的 this 示例 SAVE/LOAD 板配置到 ESP8266 中的 EEPROM。
这是我的实际代码:
char ssid[32] = "";
char password[32] = "";
char device_type[1] = "";
char device_name[32] = "";
/** Load WLAN credentials from EEPROM */
void loadBoardConfig()
{
EEPROM.begin(512);
int addr = 0;
EEPROM.get(0, ssid);
addr += sizeof(ssid);
EEPROM.get(addr, password);
addr += sizeof(password);
EEPROM.get(addr, device_type);
addr += sizeof(device_type);
EEPROM.get(addr, device_name);
addr += sizeof(device_name);
char ok[2 + 1];
EEPROM.get(addr, ok);
EEPROM.end();
if (String(ok) != String("OK"))
{
ssid[0] = 0;
password[0] = 0;
device_type[0] = 0;
device_name[0] = 0;
}
}
/** Store Board Config to EEPROM */
void saveBoardConfig()
{
EEPROM.begin(512);
int addr = 0;
EEPROM.put(addr, ssid);
addr += sizeof(ssid);
EEPROM.put(addr, password);
addr += sizeof(password);
EEPROM.put(addr, device_type);
addr += sizeof(device_type);
EEPROM.put(addr, device_name);
addr += sizeof(device_name);
char ok[2 + 1] = "OK";
EEPROM.put(addr, ok);
EEPROM.commit();
EEPROM.end();
}
我意识到它没有正确连接到 WiFi,所以我添加了这段代码来测试:
Serial.print("EEPROM CONFIG: [{ SSID: ");
Serial.printf("%c",ssid);
Serial.print(" },\n{ Password: ");
Serial.print(password);
Serial.print(" },\n{ Device Type: ");
Serial.print(device_type);
Serial.print(" },\n{ Device Name: ");
Serial.print(device_name);
Serial.println(" }]");
Serial.print("STATUS: ");
Serial.println(ok);
这是我在串行监视器中得到的结果:
EEPROM CONFIG: [{ SSID: ⸮ },
{ Password: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ },
{ Device Type: ⸮ },
{ Device Name: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ }]
STATUS: ⸮⸮⸮?x⸮ @⸮⸮⸮?
知道为什么会这样吗?
我发现了问题。代码没问题,但 ESP8266 没有实际的 EEPROM。相反,它被模拟并保存在闪存中,我的设置是擦除所有闪存内容。我刚切换到 "Only Sketch" 就成功了! 谢谢!