# 前言
单片机上电就可以工作,但是只要断电再上电,那么所有设置就全部初始化,如果我们要实现一个选择 WIFI 并且能保存 WIFI 名称和密码的功能,那么就需要断电存储的功能,esp8266 正好提供了 EEPROM 模块,可以让我们存储一些简短的字符.
# 写点代码测试一下
#include <EEPROM.h> | |
// 定义 wifi 名称和密码 | |
const char* ssid = "HUAWEI-KTT6S5_HiLink"; | |
const char* password = "15008683399lwp"; | |
// 设置 led 灯的 gpio | |
const int led = 2; | |
void set_String(int a,int b,String str){ | |
EEPROM.write(a, str.length());//EEPROM 第 a 位,写入 str 字符串的长度 | |
// 把 str 所有数据逐个保存在 EEPROM | |
for (int i = 0; i < str.length(); i++){ | |
EEPROM.write(b + i, str[i]); | |
} | |
EEPROM.commit(); | |
} | |
String get_String(int a, int b){ | |
String data = ""; | |
// 从 EEPROM 中逐个取出每一位的值,并链接 | |
for (int i = 0; i < a; i++){ | |
data += char(EEPROM.read(b + i)); | |
} | |
return data; | |
} | |
void setup() { | |
pinMode(led,OUTPUT); | |
digitalWrite(led,0); | |
Serial.begin(115200); | |
// 申请空间 | |
EEPROM.begin(512); | |
// 存储 wifi 名称和密码 | |
set_String(0,2,ssid); | |
set_String(1,256,password); | |
delay(2000); | |
Serial.println("......"); | |
// 取出 wifi 名称和密码 | |
String wifi_ssid = get_String(EEPROM.read(0),2); | |
String wifi_password = get_String(EEPROM.read(1),256); | |
Serial.print("wifi_name:"); | |
Serial.print(wifi_ssid); | |
Serial.println(); | |
Serial.print("wifi_password:"); | |
Serial.print(wifi_password); | |
} | |
void loop() { | |
// put your main code here, to run repeatedly: | |
} |
在这里我写了 2 个函数 get_String
和 set_String
, 分别是存储数据和取出数据,关键点就在于需要在存储之前就要知道字符串的长度,并且把字符串长度存储在一个地址中,这个地址需要是固定的,并且最大不能大于 255, 我们存的字符串长度也不能大于 255 的长度,不过针对于 wifi 的名称和密码来说已经足够了.