Arduino ESP8266 EEPROM commit()返回false
我想将SSID和密码保存在我的无线局域网中的EEPROM中 实际上到目前为止一切都正常,除了commit()返回一个false。这就是重新启动后内存再次清空的原因 我的代码:Arduino ESP8266 EEPROM commit()返回false,arduino,esp8266,arduino-esp8266,Arduino,Esp8266,Arduino Esp8266,我想将SSID和密码保存在我的无线局域网中的EEPROM中 实际上到目前为止一切都正常,除了commit()返回一个false。这就是重新启动后内存再次清空的原因 我的代码: void writePROM() { EEPROM.begin(0); EEPROM.write(0, 0xAA); byte ssidLength = ssid.length(); byte passLength = pass.length(); int adress = 2; EEPROM.
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);
}
void writePROM()
{
EEPROM.begin(0);
EEPROM写入(0,0xAA);
字节ssidLength=ssid.length();
字节passLength=pass.length();
int地址=2;
EEPROM写入(1,(字节)ssidLength);
对于(int i=0;i
我做错了什么?首先,感谢您检查
commit()
调用的结果
初始化EEPROM库时,您正在通过0:
EEPROM.begin(0);
您需要将希望使用它存储的字节数传递给它
您可以阅读以确认这一点:
void EEPROMClass::begin(size_t size) {
if (size <= 0) {
DEBUGV("EEPROMClass::begin error, size == 0\n");
return;
}
在您的情况下,您应该调用EEPROM.begin()
,至少使用SSID和密码的最大大小加上零终止字节各一个(因此,SSID为32个字符,密码为63个字符,加上97个字符)
但是,正如@Juraj在评论中指出的那样,您不需要执行任何操作,因为ESP8266将自动保留Wifi凭据。“我做错了什么?”使用的是一个只返回真或假作为错误信息的劣质库。可能是:错误的预分频时钟,内存保护激活,失调,超时。。。如果你得到了这个糟糕库的源代码,请使用调试器一步一步地检查代码,进入它们的函数,看看它们哪里出错了。esp8266会自动保存这些数据。使用WiFi.begin(ssid,pass)尝试一个草图,然后使用WiFi.begin()上传相同的草图,不带参数。它将连接到网络。下面是一个简单的ConfigurationAP示例,它使用
bool EEPROMClass::commit() {
if (!_size)
return false;