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