问题描述
我想将SSID和密码保存在Arduino Sketch Wlan的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);
}
我做错了什么?
解决方法
首先,请您检查一下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,它将直接返回而不进行任何设置。在这种情况下,您还可以看到commit()
will do nothing:
bool EEPROMClass::commit() {
if (!_size)
return false;
在您的情况下,应至少以最大SSID和密码的最大大小加EEPROM.begin()
来致电{
organization(login: "your-org") {
repositories(first: 100) {
nodes {
nameWithOwner
collaborators(first: 100) {
totalCount
edges {
permission
node {
login
name
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
}
}
,然后为零终止字节各加一个(因此,SSID为32个字符,密码为63个字符,加2为97)。
但是,正如@Juraj在评论中指出的那样,您无需执行任何操作,因为ESP8266会自动保留Wifi凭据。