esp8266 EEPROM操作,储存数据到flash中
我们在使用esp8266做小玩意的时候,每次都需要配网比较麻烦,所以把配网信息储存在ROM中是非常有必要的。
首先要用到EEPROM这个库
写EEPROM
EEPROM.write(addr, len);
必须要执行commit才有效
EEPROM.commit();
读EEPROM
EEPROM.read(addr);
下面有几个操作eeprom的函数
#include <EEPROM.h>
// 联合体存int类型,int占2个字节故使用联合体公用地址原理即可存储int
union int_value {
int i; //int类型成员变量
byte b[2]; //byte类型数组成员
};
// 写int到eeprom
void Write_Int(int addr, int value) {
int_value e_int; //定义一个结构对象
e_int.i = value; //给e_int.i重新赋值为a
EEPROM.write(addr, e_int.b[0]); //给EEPROM 第0位写入e_int.b[0]的值
EEPROM.write(++addr, e_int.b[1]); //给EEPROM 第1位写入e_int.b[1]的值
EEPROM.commit();
}
// 读取int
int Read_Int(int addr) {
byte a1 = EEPROM.read(addr); //a1获取EEPROM 0 位的值
byte a2 = EEPROM.read(++addr); //a2获取EEPROM 1 位的值
int_value e_int;
e_int.b[0] = a1;
e_int.b[1] = a2;
return e_int.i;
}
// 写入string到eeprom中
//length写入记录字符串长度的地址,addr是字符串的地址,str为要保存的字符串
void Write_String(int len_addr, int addr, String str) {
// EEPROM.write(len_addr, str.length());//写入str字符串的长度
EEPROM.write(len_addr, str.length()); //写入str字符串的长度
//把str所有数据逐个保存在EEPROM
for (int i = 0; i < str.length(); i++) {
EEPROM.write(addr + i, str[i]);
}
delay(10);
EEPROM.commit();
}
// 读取string
//length位是字符串长度,addr是起始位(字符串首地址)
String Read_String(int len_addr, int addr) {
String data = "";
char length = EEPROM.read(len_addr); //读取记录在EEPROM中的数据长度
//从EEPROM中逐个取出每一位的值,并链接
for (int i = 0; i < length; i++) {
data += char(EEPROM.read(addr + i));
}
return data;
}