ESP32 断电数据保存 EEPROM数据读取和写入
目录
EEPROM (electrically erasable programmable read-only memory)是一种用户可修改的ROM,又或者称为闪存(Flash Memory)。它可以通过施加高于正常电压的电压,就可以反复擦除和重新编程(写入)的闪存 。
EEPROM 是一种非易失性ROM,可以擦除和重新编程单个字节的数据。这就是 EEPROM芯片被称为字节可擦除芯片的原因。EEPROM 通常用于在计算和其他电子设备中存储少量数据。
Arduino Uno 的EEEROM大小为1024个字节。
ESP32的EEPROM大小为 512 字节。
这意味着使用 ESP32 和 EEPROM 库可以有 512 个不同的地址,可以在每个地址位置保存一个 0 到 255 之间的值。
简单来说EEPROM里面的数据是可以断电保存的,重新上电数据并不会丢失。但是,闪存的一个限制是可刷写数据的次数。你可以根据需要多次从闪存中读取数据,但大多数设备闪存的写入次数设计为大约 100,000 到 1,000,000 次写入操作。
在 ESP32 的闪存读取和写入将使用 EEPROM 库。其实是和 Arduino EEPROM 一样的,并没有太大区别。
本示例,主要记录ESP32/Arduino如何使用EEPROM,并且读取和写入数据。
程序提点
首先需要加载EEPROM的库
// 加载EEPROM的库
#include <EEPROM.h>
在setup中初始化EEPROM的大小
// 定义EEPROM的大小
#define EEPROM_SIZE 1 // 这里定义1个字节的大小
void setup() {
...
// 初始化EEPROM为预习定义的大小
EEPROM.begin(EEPROM_SIZE);
...
}
读取EEPROM指定位置的数据
例如,读取第0位的数据:
read_value = EEPROM.read(0); // 读区 EEPROM 第0位的数据
EEPROM刷写指定位置的数据
例如,第0位的数据刷写为read_value的值,最后,不要忘记EEPROM.commit();
提交,运行这句代码才能正真刷写数据。
EEPROM.write(0, read_value); // 把 变量read_value的数值写入第0位
EEPROM.commit(); // 需要提交才能正真地把数据写入EEPROM
完整代码
该程序
实现每一秒都会把变量read_value + 1 ,并写入EEPROM中。
当中途断电,重新通电也能继续断电前的数据,而不是从0开始。
// welcome to lingshunlab.com
// 加载EEPROM的库
#include <EEPROM.h>
// 定义EEPROM的大小
#define EEPROM_SIZE 1 // 这里定义1个字节的大小
int read_value = 0;
void setup() {
Serial.begin(115200);
// 初始化EEPROM为预习定义的大小
EEPROM.begin(EEPROM_SIZE);
}
void loop() {
read_value = EEPROM.read(0); // 读区 EEPROM 第0位的数据
Serial.println(read_value);
read_value++; // read_value+1 ,但EEPROM只接受0~255的数值,超出的将会是255的取余值
EEPROM.write(0, read_value); // 把 变量read_value的数值写入第0位
EEPROM.commit(); // 需要提交才能正真地把数据写入EEPROM
delay(1000);
}