wemos D1 arduino物联网开发板应用笔记3-操作EEPROM
作者:互联网
前言
本节我们学习使用WeMos D1操作EEPROM,使用EEPROM我们可以保存需要掉电保存的信息,如配网信息,设备加密信息,产品认证信息等。
一、基础知识
1.EEPROM简介
EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。简而言之,如果希望保存内容,并且重新上电后读取上次保存的数据,推荐使用EEPROM,Arduino有EEPROM的接口函数可以使用。
ESP8266的EEPROM操作实际上是使用Flash模拟EEPROM,不过请放心,存在Flash中也是可以完成掉电保存的,编译出来的固件都是烧录到Flash中的,所以是不会丢失的哈。
2.函数说明
WeMos D1函数说明
EPS8266的EEPROM大小为4K,因此EEPROM.begin(size)中size最大是4096,和标准的Arduino相比,WeMos D1每次使用都需要使用EEPROM.begin声明要操作的空间。
调用EEPROM.write实际上不会真正的把数据写入Flash,而是写到了内存中,需要调用EEPROM.commit或者EEPROM.end才可以把数据真正写道Flash中。
二、实例
实例程序实现每次从3000地址开始读取数据,然后从0开始依次写入,直到写入地址到达3025,调用commit()函数保存内容,下次重新上电数据仍在。
#include <Arduino.h>
#include <EEPROM.h>
int address = 3000;
byte value;
byte value_write = 0;
int len = 4096;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
EEPROM.begin(len);
}
void loop() {
// put your main code here, to run repeatedly:
value = EEPROM.read(address);
Serial.print(address);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
EEPROM.write(address, value_write);
value_write ++;
if (address == 3025)
{
EEPROM.commit();
}
address = address + 1;
if (address == 4096)
address = 0;
delay(2000);
}
上述程序中,首先使用 EEPROM.begin(len)声明要操作的EEPROM长度,实际上是用来申请内存空间,需要调用EEPROM.commit()才能将数据保存到Flash。
三、运行
从图中可知,设备首次读取3000地址处内容为0xFF,重启设备后,数据变为了我们从0开始依次写入的数据。
四、结语
1.总结:
本节完,实际操作过程中需要注意的地方有如下几点:
(1) WeMos D1,支持操作4K数据
注意,实际操作地址为0-4095。
(2) 保存数据
注意write()只是将数据写的内存,如需要写入硬件,需要调用commit()函数。
(3) 擦除数据
擦除数据其实是向地址中写入0。
2.后记:
如您在使用过程中有任何问题,请加QQ群进一步交流,也可以github提Issue。
QQ交流群:906015840 (备注:物联网项目交流)
github仓库地址:https://github.com/solitary-sand/wemos/
一叶孤沙出品:一沙一世界,一叶一菩提
标签:arduino,Flash,wemos,开发板,write,value,address,数据,EEPROM 来源: https://blog.51cto.com/14616151/2465695