前言
本節我們學習使用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/
一葉孤沙出品:一沙一世界,一葉一菩提