# 前言

单片机上电就可以工作,但是只要断电再上电,那么所有设置就全部初始化,如果我们要实现一个选择 WIFI 并且能保存 WIFI 名称和密码的功能,那么就需要断电存储的功能,esp8266 正好提供了 EEPROM 模块,可以让我们存储一些简短的字符.

# 写点代码测试一下

p
#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_Stringset_String , 分别是存储数据和取出数据,关键点就在于需要在存储之前就要知道字符串的长度,并且把字符串长度存储在一个地址中,这个地址需要是固定的,并且最大不能大于 255, 我们存的字符串长度也不能大于 255 的长度,不过针对于 wifi 的名称和密码来说已经足够了.

# 上电测试

eeprom

请我喝杯[咖啡]~( ̄▽ ̄)~*

一个放羊娃 微信支付

微信支付

一个放羊娃 支付宝

支付宝