使用EEPROM实现断电保存设备号

方法一:字符存储

#include <EEPROM.h>
//保存
void saveInstrument(String instrument_str){
  EEPROM.write(1,instrument_str.length());//0为Wi-Fi用,1为记录字符串长度,2为是字符串数据开始

  Serial.print("save default instrument len:");
  Serial.println(instrument_str.length());
  for (int i = 0; i < instrument_str.length(); i++)
  {
    EEPROM.write(i+2, instrument_str[i]); //在闪存内模拟写入
  }
  EEPROM.commit();//执行写入ROM
}
//读取
void loadInstrument(){
  int len = EEPROM.read(1);
  Serial.print("get default instrument len:");
  Serial.println(len);
  String data = "";
  for (int i = 0; i < len; i++)
  {
    data += char(EEPROM.read(i+2));//0为Wi-Fi用,1为记录字符串长度,2为是字符串数据开始
  }

   Serial.print("load instrument: ");
   Serial.println(data); 
}

方法二:结构体存储

#include <EEPROM.h>
//定义结构体
struct config_type 
{
  char instrument[32];//定义实验室编号(最大32字节)
};
config_type myconfig;//声明结构体变量
//保存
void saveInstrument(String instrument_str){
  uint8_t *p = (uint8_t*)(&myconfig);
  strcpy(myconfig.instrument,instrument_str.c_str());//密码复制
  for (int i = 1; i < sizeof(myconfig); i++)
  {
   EEPROM.write(i, *(p + i)); //在闪存内模拟写入
  }
  EEPROM.commit();//执行写入ROM
}
//读取
void loadInstrument(){
  uint8_t *p = (uint8_t*)(&myconfig);
  for (int i = 1; i < sizeof(myconfig); i++)///由于wifi状态已占用0,所以从1开始,从缓存读回数据
  {
    *(p + i) = EEPROM.read(i);
  }
 
   strcpy(myconfig.instrument,*p);//密码复制
   Serial.println(myconfig.instrument); 
}