今天我们来玩儿EEPROM。
ESP32内部没有专门的EEPROM,但是我们可以通过FLASH模拟EEPROM,FLASH与EEPROM也是非常相似的,都是非易失性存储器,使用EEPROM,我们就可以在不使用文件系统的情况下,来保存一些数据
,可以实现一些更加复杂的功能。
例如,我们可以做到以下功能:
ESP32在Arduino是使用FLASH开辟的一块存储区域,默认的对象存储大小为4096个字节。
本实验我们直接用核心板就可以,不添加其它外设了。
EEPROM初始化
代码调用#include 后,已经默认定义了一个EEPROM对象,我们使用began方法初始化一下,参数为要操作的字节大小,最大为4096字节,所以这里的参数范围为0-4095。EEPROM的操作以字为单位,size最好设置为4的倍数。
EEPROM.begin(size);
写
将数据写入EEPROM,使用EEPROM.write();第一个参数为地址,第二个参数为保存的值。
EEPROM.write(address, value);
读
从EEPROM上读取一个字节,使用EEPROM.read();参数为读取的地址。
EEPROM.read(address);
更新生效
通过EEPROM.write()写入数据后,之后需要调用EEPROM.commit()使更改生效,写入完成。
EEPROM.commit();
EEPROM还有其它函数,都在库文件中,大家可以在下面两个文件中找到相关源码。
EEPROM.h
EEPROM.c
完整程序
这里我们用一个例子来演示一下,我们在整片EEPROM上写入数据,从0-255,反复循环写入,然后再读取出来。
写程序
/*
* Created on: 20220128
* Author: 公众号:跳动的字节
* Function 09 EEPROM写与读
* Version: V1.0
*
* ,%%%%%%%%,
* ,%%/%%%%/%%
* ,%%%c''''J/%%%
* %. %%%%/ o o %%%
* `%%. %%%% |%%%
* `%% `%%%%(__Y__)%%'
* // ;%%%%`-/%%%'
* (( / `%%%%%%%'
* .' |
* / | |
* / ) | |
* /_ | |__
* (____________))))))) 攻城狮
*
*/
#include < EEPROM.h >
void setup()
{
Serial.begin(115200);
Serial.println("");
EEPROM.begin(4096); //申请4096个字节的EEPROM存储空间
//写数据
Serial.println("write begin");
for(int addr = 0; addr< 4096; addr++)
{
int data = addr%256; //EEPROM写入的数据时以字节为单位的
EEPROM.write(addr, data); //写入数据
}
EEPROM.commit(); //保存更改的数据
Serial.println("write done");
//读数据
Serial.println("read begin");
for(int addr = 0; addr< 4096; addr++)
{
int data = EEPROM.read(addr); //读数据
Serial.print(data);
Serial.print(" ");
delay(2);
if((addr+1)%256 == 0) //每行显示256个数据
{
Serial.println("");
}
}
Serial.println("read done");
}
void loop()
{
}
实验效果:
EEPROM的使用很简单,但这里有一点需要注意,在初始化EEPROM.begin(size)的时候,参数size下一次必须大于等于上一次,否则会有用一些出错,正常情况下,我们就一直用最大值4096即可。
后面,我们会介绍更加高级的方法实现数据的保存,使用Preferences库来保存键值对的方式,还有文件系统的方式,大家到时候再深入了解。
感谢大家,关于ESP32的学习,希望大家Enjoy!
全部0条评论
快来发表一下你的评论吧 !