前言

本节我们学习使用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函数说明

wemos D1 arduino物联网开发板应用笔记3-操作EEPROM_第1张图片

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 
#include 

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。

三、运行

wemos D1 arduino物联网开发板应用笔记3-操作EEPROM_第2张图片

从图中可知,设备首次读取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/

一叶孤沙出品:一沙一世界,一叶一菩提

wemos D1 arduino物联网开发板应用笔记3-操作EEPROM_第3张图片