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函數說明

wemos D1 arduino物聯網開發板應用筆記3-操作EEPROM

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。

三、運行

wemos D1 arduino物聯網開發板應用筆記3-操作EEPROM

從圖中可知,設備首次讀取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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章