闪存
即使 ESP32 复位或断电计时器flash,保存在闪存中的数据仍然保留。闪存与 非常相似。两者都是非易失性存储器。
将数据保存在闪存中特别有助于:
闪存的一项限制是向其写入数据的次数。可以根据需要多次从闪存读取数据,但大多数设备设计用于大约 100,000 到 1,000,000 次写入操作。
库
要使用 IDE 读取和写入 ESP32 闪存,将使用 库。将此库与 ESP32 一起使用与与 一起使用非常相似。
通过 ESP32 和 库,您最多可以使用 512 字节的闪存。这意味着有 512 个不同的地址,并且可以在每个地址位置保存 0 到 255 之间的值。
写数据
要将数据写入闪存,可以使用.write()接受要保存数据的位置或地址以及要保存的值(字节变量)作为参数的函数:
EEPROM.write(address, value);
例如,要在地址 0 上写入 9:.write(0, 9);
其次是:mit() 用于保存更改。
读数据
要从闪存读取一个字节,可以使用.read()功能。该函数将要读取的字节的地址作为参数: .read();
例如,要读取先前存储在地址 0 中的字节,使用:.read(0);
这将返回9,这是我们存储在地址 0 中的值。
记住最后的 GPIO 状态
展示如何在 ESP32 闪存中保存数据,将保存输出的最后状态,在本例中为 LED。例如,想象以下场景:
正在使用 ESP32 控制灯您将灯设置为打开ESP32突然断电当电源重新打开时计时器flash,灯会保持关闭状态 - 因为它不会保持最后的状态
为了解决这个问题,可以将灯的状态保存在闪存中。然后,只需在程序的开头添加一个条件来检查最后一个灯的状态,并相应地打开或关闭灯。
示意图
将按钮和 LED 连接到 ESP32,如下图所示。
代码
将以下代码复制到 IDE 并将其上传到您的 ESP32。确保选择了正确的板和 COM 端口。
// 包括用于从闪存读写的库
#include
// 定义要访问的字节数
#define EEPROM_SIZE 1
const int buttonPin = 4; // 按键引脚
const int ledPin = 16; // LED引脚
:
int ledState = HIGH; // 输出引脚的当前状态
int buttonState; // 从输入引脚读取状态
int lastButtonState = LOW; // 以前输入引脚的状态
.
unsigned long lastDebounceTime = 0; // 最后一次切换输出引脚的时间
unsigned long debounceDelay = 50; // 抖动时间; 如果输出则增加
void setup() {
Serial.begin(115200);
// 用预定义的大小初始化 EEPROM
EEPROM.begin(EEPROM_SIZE);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
// 从闪存中读取最后一次 LED 状态
ledState = EEPROM.read(0);
// 将 LED 设置为最后存储状态
digitalWrite(ledPin, ledState);
}
void loop() {
// 将开关的状态读入一个局部变量:
int reading = digitalRead(buttonPin);
//如果开关因按键等而改变
if (reading != lastButtonState) {
//重置去抖动计时器
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
//如果按键状态改变
if (reading != buttonState) {
buttonState = reading;
// 只有在新按钮状态为高时才切换 LED
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
// 保存读数。下次通过循环时,它将是 lastButtonState:
lastButtonState = reading;
// 如果 ledState 变量与当前 LED 状态不同
if (digitalRead(ledPin)!= ledState) {
Serial.println("State changed");
// 改变LED状态该
digitalWrite(ledPin, ledState);
// 保存LED状态
EEPROM.write(0, ledState);
EEPROM.commit();
Serial.println("State saved in flash memory");
}
}
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh