Arduino ESP8266 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.

我想将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.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;