ESP32 在ESP32使用EEPROM断电保存数据
什么是EEPROM
EEPROM代表可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,缩写为EEPROM),是一种电子存储器,可在不需要外部设备的情况下擦除和重写。 EEPROM是一个非易失性存储器(NVM),这意味着它可以保留存储的数据即使没有电源供应。 EEPROM广泛应用于各种电子设备中,如计算机、手机、数字相机等。
ESP32中EEPROM的特点
ESP32并不具有内置的EEPROM,ESP32是通过Flash内存来模拟EEPROM。而Flash内存和EEPROM非常类似,也是一种非易失性存储器,非常适合于存储需要长期保存的数据,支持100,000 到 1,000,000 次写入操作。
ESP32中的EEPROM具有以下特点:
-
$1
-
$1
-
$1
-
$1
ESP32 EEPROM的使用方法
-
$1
-
$1
-
$1
-
$1
-
$1
代码示例
以下的代码展示怎样保存LED灯在关机前的状态,使用了NodeMCU开发版,其中默认BUILDIN_LED是第二引脚。
// 引入头文件
#include
// 定于EEPROM容量
#define EEPROM_SIZE 1
// 定义引脚, 我们使用开发板的IO0按钮,默认被拉高
#define BUTTON_PIN 0
// 使用板载LED灯
#define BUILDIN_LED 2
// LED状态
int ledState = HIGH;
// 按钮状态
int buttonState;
// 之前的按钮状态
int lastButtonState = HIGH;
// 上次被触发的时间
unsigned long lastDebounceTime = 0;
// 防抖动计时器
unsigned long debounceDelay = 50;
void setup() {
Serial.begin(115200);
// 初始化EEPROM
EEPROM.begin(EEPROM_SIZE);
//使用GPIO0需要设置默认上拉
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUILDIN_LED, OUTPUT);
// 读取LED在EEPROM的状态
ledState = EEPROM.read(0);
// 写入关机前的状态
digitalWrite(BUILDIN_LED, ledState);
}
void loop() {
// 读取按钮状态
int reading = digitalRead(BUTTON_PIN);
// 检查按钮状态是否改变
if (reading != lastButtonState) {
// 重制防抖计时器
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// 需要按下时间大于防抖时间,才会进入改变状态
// 如果按钮状态改变
if (reading != buttonState) {
buttonState = reading;
//只有等新的状态是LOW,才改变LED状态
if (buttonState == LOW) {
ledState = !ledState;
}
}
}
// 保存已经读取的状态
lastButtonState = reading;
// 如果LED状态盒当前状态不一样
if (digitalRead(BUILDIN_LED)!= ledState) {
Serial.println("State changed");
// 改变LED状态
digitalWrite(BUILDIN_LED, ledState);
// 保存LED状态到EEPROM
EEPROM.write(0, ledState);
EEPROM.commit();
Serial.println("State saved in flash memory");
}
}