Arduino ESP8266 EEPROM commit() returns 错误
Arduino ESP8266 EEPROM commit() returns false
我想将 SSID 和密码保存在我的 Arduino Sketch Wlan 的 EEPROM 中。
实际上到目前为止一切正常,除了提交 () returns 是错误的。这就是为什么重启后内存又是空的。
我的代码:
void writePROM()
{
EEPROM.begin(0);
EEPROM.write(0, 0xAA);
byte ssidLength = ssid.length();
byte passLength = pass.length();
int adress = 2;
EEPROM.write(1, (byte)ssidLength);
for(int i = 0; i < ssidLength; i++)
{
EEPROM.write(adress + i, (byte)ssid[i]);
}
adress += ssidLength + 1;
EEPROM.write(adress++, passLength);
for(int i = 0; i < passLength; i++)
{
EEPROM.write(adress + i, pass[i]);
}
bool bRc = EEPROM.commit();
if(bRc)
{
Serial.println("Write successfully");
}
else
{
Serial.println("Write error");
}
Serial.println("Write name to EEPROM = " + ssid);
Serial.println("Write password to EEPROM = " + pass);
}
我做错了什么?
首先,感谢您检查 commit()
调用的结果。
您在初始化 EEPROM 库时传递了 0:
EEPROM.begin(0);
您需要将要使用它存储的字节数传递给它。
您可以阅读 code for the EEPROM library 来确认这一点:
void EEPROMClass::begin(size_t size) {
if (size <= 0) {
DEBUGV("EEPROMClass::begin error, size == 0\n");
return;
}
如果您传递 0,它只是 returns 而无需进行任何设置。您还可以看到 commit()
will do nothing 在这种情况下:
bool EEPROMClass::commit() {
if (!_size)
return false;
在您的情况下,您应该调用 EEPROM.begin()
至少使用 SSID 和密码的最大大小加上零终止字节各一个(因此,SSID 为 32 个字符,密码为 63 个字符,加上2 代表 97).
但是,正如@Juraj 在评论中指出的那样,您无需执行任何操作,因为 ESP8266 会自动保存 Wifi 凭据。
我想将 SSID 和密码保存在我的 Arduino Sketch Wlan 的 EEPROM 中。
实际上到目前为止一切正常,除了提交 () returns 是错误的。这就是为什么重启后内存又是空的。
我的代码:
void writePROM()
{
EEPROM.begin(0);
EEPROM.write(0, 0xAA);
byte ssidLength = ssid.length();
byte passLength = pass.length();
int adress = 2;
EEPROM.write(1, (byte)ssidLength);
for(int i = 0; i < ssidLength; i++)
{
EEPROM.write(adress + i, (byte)ssid[i]);
}
adress += ssidLength + 1;
EEPROM.write(adress++, passLength);
for(int i = 0; i < passLength; i++)
{
EEPROM.write(adress + i, pass[i]);
}
bool bRc = EEPROM.commit();
if(bRc)
{
Serial.println("Write successfully");
}
else
{
Serial.println("Write error");
}
Serial.println("Write name to EEPROM = " + ssid);
Serial.println("Write password to EEPROM = " + pass);
}
我做错了什么?
首先,感谢您检查 commit()
调用的结果。
您在初始化 EEPROM 库时传递了 0:
EEPROM.begin(0);
您需要将要使用它存储的字节数传递给它。
您可以阅读 code for the EEPROM library 来确认这一点:
void EEPROMClass::begin(size_t size) {
if (size <= 0) {
DEBUGV("EEPROMClass::begin error, size == 0\n");
return;
}
如果您传递 0,它只是 returns 而无需进行任何设置。您还可以看到 commit()
will do nothing 在这种情况下:
bool EEPROMClass::commit() {
if (!_size)
return false;
在您的情况下,您应该调用 EEPROM.begin()
至少使用 SSID 和密码的最大大小加上零终止字节各一个(因此,SSID 为 32 个字符,密码为 63 个字符,加上2 代表 97).
但是,正如@Juraj 在评论中指出的那样,您无需执行任何操作,因为 ESP8266 会自动保存 Wifi 凭据。