今天我們來玩兒EEPROM。
EEPROM概述
ESP32內(nèi)部沒有專門的EEPROM,但是我們可以通過FLASH模擬EEPROM,F(xiàn)LASH與EEPROM也是非常相似的,都是非易失性存儲器,使用EEPROM,我們就可以在不使用文件系統(tǒng)的情況下,來保存一些數(shù)據(jù)
,可以實(shí)現(xiàn)一些更加復(fù)雜的功能。
例如,我們可以做到以下功能:
- 保存變量的最終狀態(tài)
- 保存我們的設(shè)置
- 保存設(shè)備被激活的次數(shù)
- 永久保存其它任何類型的數(shù)據(jù)
ESP32在Arduino是使用FLASH開辟的一塊存儲區(qū)域,默認(rèn)的對象存儲大小為4096個字節(jié)。
硬件
本實(shí)驗(yàn)我們直接用核心板就可以,不添加其它外設(shè)了。
軟件
EEPROM初始化
代碼調(diào)用#include 后,已經(jīng)默認(rèn)定義了一個EEPROM對象,我們使用began方法初始化一下,參數(shù)為要操作的字節(jié)大小,最大為4096字節(jié),所以這里的參數(shù)范圍為0-4095。EEPROM的操作以字為單位,size最好設(shè)置為4的倍數(shù)。
EEPROM.begin(size);
寫
將數(shù)據(jù)寫入EEPROM,使用EEPROM.write();第一個參數(shù)為地址,第二個參數(shù)為保存的值。
EEPROM.write(address, value);
讀
從EEPROM上讀取一個字節(jié),使用EEPROM.read();參數(shù)為讀取的地址。
EEPROM.read(address);
更新生效
通過EEPROM.write()寫入數(shù)據(jù)后,之后需要調(diào)用EEPROM.commit()使更改生效,寫入完成。
EEPROM.commit();
EEPROM還有其它函數(shù),都在庫文件中,大家可以在下面兩個文件中找到相關(guān)源碼。
EEPROM.h
EEPROM.c
完整程序
這里我們用一個例子來演示一下,我們在整片EEPROM上寫入數(shù)據(jù),從0-255,反復(fù)循環(huán)寫入,然后再讀取出來。
寫程序
/*
* Created on: 20220128
* Author: 公眾號:跳動的字節(jié)
* Function 09 EEPROM寫與讀
* Version: V1.0
*
* ,%%%%%%%%,
* ,%%/%%%%/%%
* ,%%%c''''J/%%%
* %. %%%%/ o o %%%
* `%%. %%%% |%%%
* `%% `%%%%(__Y__)%%'
* // ;%%%%`-/%%%'
* (( / `%%%%%%%'
* .' |
* / | |
* / ) | |
* /_ | |__
* (____________))))))) 攻城獅
*
*/
#include < EEPROM.h >
void setup()
{
Serial.begin(115200);
Serial.println("");
EEPROM.begin(4096); //申請4096個字節(jié)的EEPROM存儲空間
//寫數(shù)據(jù)
Serial.println("write begin");
for(int addr = 0; addr< 4096; addr++)
{
int data = addr%256; //EEPROM寫入的數(shù)據(jù)時以字節(jié)為單位的
EEPROM.write(addr, data); //寫入數(shù)據(jù)
}
EEPROM.commit(); //保存更改的數(shù)據(jù)
Serial.println("write done");
//讀數(shù)據(jù)
Serial.println("read begin");
for(int addr = 0; addr< 4096; addr++)
{
int data = EEPROM.read(addr); //讀數(shù)據(jù)
Serial.print(data);
Serial.print(" ");
delay(2);
if((addr+1)%256 == 0) //每行顯示256個數(shù)據(jù)
{
Serial.println("");
}
}
Serial.println("read done");
}
void loop()
{
}
實(shí)驗(yàn)效果:
EEPROM的使用很簡單,但這里有一點(diǎn)需要注意,在初始化EEPROM.begin(size)的時候,參數(shù)size下一次必須大于等于上一次,否則會有用一些出錯,正常情況下,我們就一直用最大值4096即可。
后面,我們會介紹更加高級的方法實(shí)現(xiàn)數(shù)據(jù)的保存,使用Preferences庫來保存鍵值對的方式,還有文件系統(tǒng)的方式,大家到時候再深入了解。
感謝大家,關(guān)于ESP32的學(xué)習(xí),希望大家Enjoy!
-
FlaSh
+關(guān)注
關(guān)注
10文章
1642瀏覽量
148673 -
存儲器
+關(guān)注
關(guān)注
38文章
7528瀏覽量
164344 -
EEPROM
+關(guān)注
關(guān)注
9文章
1033瀏覽量
81953 -
文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
287瀏覽量
19978 -
ESP32
+關(guān)注
關(guān)注
18文章
978瀏覽量
17526
發(fā)布評論請先 登錄
相關(guān)推薦
ESP32單片機(jī)學(xué)習(xí)筆記
ESP32之ESP-IDF學(xué)習(xí)筆記
ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X
![<b class='flag-5'>ESP32</b> 開發(fā)<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學(xué)習(xí)</b> Window 窗口控件 X](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
[ESP32]學(xué)習(xí)筆記02
![[<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>02](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
[ESP32]學(xué)習(xí)筆記04
![[<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>04](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
SPI主線協(xié)議——ESP32學(xué)習(xí)筆記
![SPI主線協(xié)議——<b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32 單片機(jī)學(xué)習(xí)筆記 - 08 - WebSocket客戶端
![<b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 08 - WebSocket客戶端](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時器
![<b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 04 - ADC和定時器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32芯片模組機(jī)器學(xué)習(xí)算法運(yùn)行的應(yīng)用
ESP32上的深度強(qiáng)化學(xué)習(xí)
![<b class='flag-5'>ESP32</b>上的深度強(qiáng)化<b class='flag-5'>學(xué)習(xí)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32學(xué)習(xí)筆記:ADC
![<b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:ADC](https://file1.elecfans.com/web2/M00/8C/AE/wKgaomSvv0eAH27ZAAB28Uu6G-Q340.jpg)
評論