复现代码如下
同一段代码 ESP 01s 测试没有任何问题,但是在一块新的 ESP 12F板子中出现了乱码问题,明明没有写入数据,但是却能读出来一堆乱码。
#include <EEPROM.h> // 调用EEPROM库,用于保存wifi信息
// 读取储存的wifi信息的结构体
struct Saved_info {
String wifi_name; // 存储的 wifi 名字
String wifi_pwd; // 存储的 wifi 密码
};
Saved_info get_saved_info() {
Saved_info Info;
// 从 EEPROM 的位置 0 开始,逐个读取字符,直到遇到标识 '\0'
int pos = 0;
char c = EEPROM.read(pos);
while (c != '\0') {
Info.wifi_name += c;
pos++;
c = EEPROM.read(pos);
}
pos++; // 更新读取位置
// 从 EEPROM 的位置 pos 开始,逐个读取字符,直到遇到标识 '\0'
c = EEPROM.read(pos);
while (c != '\0') {
Info.wifi_pwd += c;
pos++;
c = EEPROM.read(pos);
}
return Info;
}
void setup() {
// 初始化EEPROM,总容量为512字节
EEPROM.begin(512);
Saved_info Info = get_saved_info();
Serial.println("读取到 wifi :" + wifi_name + " " + wifi_pwd);
}
上面代码输出
会输出一堆这种符号:
解决方法
很简单,就是运行一下 EEPROM.put(0, ""); 将数据变成空的。然后注释掉重新烧录程序就OK啦。
void setup() {
// 初始化EEPROM,总容量为512字节
EEPROM.begin(512);
// 如果遇到乱码就清除一下就搞定了
// 12F 初始化 rom 中存在乱码
// EEPROM.put(0, "");
// EEPROM.commit();
Saved_info Info = get_saved_info();
Serial.println("读取到 wifi :" + wifi_name + " " + wifi_pwd);
}