本节咱们学习使用WeMos D1操做EEPROM,使用EEPROM咱们能够保存须要掉电保存的信息,如配网信息,设备加密信息,产品认证信息等。git
EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。简而言之,若是但愿保存内容,而且从新上电后读取上次保存的数据,推荐使用EEPROM,Arduino有EEPROM的接口函数可使用。github
ESP8266的EEPROM操做其实是使用Flash模拟EEPROM,不过请放心,存在Flash中也是能够完成掉电保存的,编译出来的固件都是烧录到Flash中的,因此是不会丢失的哈。编程
WeMos D1函数说明ide
EPS8266的EEPROM大小为4K,所以EEPROM.begin(size)中size最大是4096,和标准的Arduino相比,WeMos D1每次使用都须要使用EEPROM.begin声明要操做的空间。函数
调用EEPROM.write实际上不会真正的把数据写入Flash,而是写到了内存中,须要调用EEPROM.commit或者EEPROM.end才能够把数据真正写道Flash中。oop
实例程序实现每次从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。ui
从图中可知,设备首次读取3000地址处内容为0xFF,重启设备后,数据变为了咱们从0开始依次写入的数据。加密
本节完,实际操做过程当中须要注意的地方有以下几点:code
(1) WeMos D1,支持操做4K数据
注意,实际操做地址为0-4095。
(2) 保存数据
注意write()只是将数据写的内存,如须要写入硬件,须要调用commit()函数。
(3) 擦除数据
擦除数据实际上是向地址中写入0。
如您在使用过程当中有任何问题,请加QQ群进一步交流,也能够github提Issue。
QQ交流群:906015840 (备注:物联网项目交流)
github仓库地址:https://github.com/solitary-sand/wemos/
一叶孤沙出品:一沙一世界,一叶一菩提