ESP12F EEPROM 读取乱码错误解决(EEPROM 的操作)

1,031 阅读1分钟

复现代码如下

同一段代码 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); 
}

上面代码输出

会输出一堆这种符号: image.png

解决方法

很简单,就是运行一下 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); 
}