arduino esp8266配网后储存密码 EEPROM储存数据简单教程
在我们使用esp8266配网后,每次重启都会重新配网,实属麻烦。
今天就告诉你怎么样把wifi账号密码或者其他配置保存在单片机中。
首先esp8266中用的EEPROM其实是从外部flash中存储器最末尾开辟的4096字节空间,擦除使用寿命的,基本10w次擦写芯片就损坏了,所有要注意写入频率,读次数无限!
一、导入库 EEPROM.h
#include <EEPROM.h>
二、初始化
// 这里是从外部flash中存储器最末尾开辟的1024字节空间,可以开辟0-4096空间,这里只用1024字节
EEPROM.begin(1024);
三、写数据
1.写1字节
// 写一个字节的数据到addr。addr可以是0-1024
EEPROM.write(addr, value);
// 必须要提交一次,不然写不进去。
EEPROM.commit();
2.写int数据
// int整合体
union int_value {
int i; //int类型成员变量
byte b[2]; //byte类型数组成员 (同理更长的数字修改此处成员数)
};
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();
2.写string
// 写入str字符串的长度 len_addr保存字符串长度的地址
EEPROM.write(len_addr, str.length());
// 把str所有数据逐个保存在EEPROM
for (int i = 0; i < str.length(); i++) {
EEPROM.write(addr + i, str[i]);
}
//稍微延迟一下
delay(10);
EEPROM.commit();
四、读数据
1.读一字节
EEPROM.read(addr);
2.读int数据
// int整合体
union int_value {
int i; //int类型成员变量
byte b[2]; //byte类型数组成员
};
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;
// 读出来的数据
Serial.print(e_int.i);
3.读string
String data = "";
//读取记录在EEPROM中的数据长度
char length = EEPROM.read(len_addr);
//从EEPROM中逐个取出每一位的值,并链接
for (int i = 0; i < length; i++) {
uint8_t tmp = EEPROM.read(addr + i);
if (tmp == 0xFF) {
continue;
}
data += char(tmp);
}
// 读出来的数据
Serial.print(data);