EEPROM (electrically erasable programmable read-only memory)是一種用戶可修改的ROM,又或者稱為閃存(Flash Memory)。它可以通過施加高于正常電壓的電壓,就可以反復擦除和重新編程(寫入)的閃存 。
EEPROM 是一種非易失性ROM,可以擦除和重新編程單個字節的數據。這就是 EEPROM芯片被稱為字節可擦除芯片的原因。EEPROM 通常用于在計算和其他電子設備中存儲少量數據。
Arduino Uno 的EEEROM大小為1024個字節。
ESP32的EEPROM大小為 512 字節。
這意味著使用 ESP32 和 EEPROM 庫可以有 512 個不同的地址,可以在每個地址位置保存一個 0 到 255 之間的值。
簡單來說EEPROM里面的數據是可以斷電保存的,重新上電數據并不會丟失。但是,閃存的一個限制是可刷寫數據的次數。你可以根據需要多次從閃存中讀取數據,但大多數設備閃存的寫入次數設計為大約 100,000 到 1,000,000 次寫入操作。
在 ESP32 的閃存讀取和寫入將使用 EEPROM 庫。其實是和 Arduino EEPROM 一樣的,并沒有太大區別。
本示例,主要記錄ESP32/Arduino如何使用EEPROM,并且讀取和寫入數據。
程序提點
首先需要加載EEPROM的庫
// 加載EEPROM的庫 #include
在setup中初始化EEPROM的大小
// 定義EEPROM的大小 #define EEPROM_SIZE 1 // 這里定義1個字節的大小 void setup() { ... // 初始化EEPROM為預習定義的大小 EEPROM.begin(EEPROM_SIZE); ... }
讀取EEPROM指定位置的數據
例如,讀取第0位的數據:
read_value = EEPROM.read(0); // 讀區 EEPROM 第0位的數據
EEPROM刷寫指定位置的數據
例如,第0位的數據刷寫為read_value的值,最后,不要忘記EEPROM.commit();提交,運行這句代碼才能正真刷寫數據。
EEPROM.write(0, read_value); // 把 變量read_value的數值寫入第0位 EEPROM.commit(); // 需要提交才能正真地把數據寫入EEPROM
完整代碼
該程序
實現每一秒都會把變量read_value + 1 ,并寫入EEPROM中。
當中途斷電,重新通電也能繼續斷電前的數據,而不是從0開始。
// welcome to lingshunlab.com // 加載EEPROM的庫 #include// 定義EEPROM的大小 #define EEPROM_SIZE 1 // 這里定義1個字節的大小 int read_value = 0; void setup() { Serial.begin(115200); // 初始化EEPROM為預習定義的大小 EEPROM.begin(EEPROM_SIZE); } void loop() { read_value = EEPROM.read(0); // 讀區 EEPROM 第0位的數據 Serial.println(read_value); read_value++; // read_value+1 ,但EEPROM只接受0~255的數值,超出的將會是255的取余值 EEPROM.write(0, read_value); // 把 變量read_value的數值寫入第0位 EEPROM.commit(); // 需要提交才能正真地把數據寫入EEPROM delay(1000); }
審核編輯:劉清
-
EEPROM
+關注
關注
9文章
1033瀏覽量
81955 -
Arduino
+關注
關注
188文章
6477瀏覽量
187821 -
ESP32
+關注
關注
18文章
978瀏覽量
17529
原文標題:ESP32 斷電數據保存 EEPROM數據讀取和寫入
文章出處:【微信號:凌順實驗室,微信公眾號:凌順實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
NodeMCU V1.0無法讀取/寫入EEPROM數據?
ESP32和ESP8266基于Arduino的MQTT收發資料說明
![<b class='flag-5'>ESP32</b>和<b class='flag-5'>ESP</b>8266基于<b class='flag-5'>Arduino</b>的MQTT收發資料說明](https://file.elecfans.com/web1/M00/83/03/o4YBAFxJHpGAMyA6AAKaDGhAMKU215.png)
esp32和arduino的區別,esp32能否替代arduino
ESP32 開發之旅② Arduino For ESP32說明
![<b class='flag-5'>ESP32</b> 開發之旅② <b class='flag-5'>Arduino</b> For <b class='flag-5'>ESP32</b>說明](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
arduino / VScode+platformIO搭建esp32/esp8266編譯環境(一篇足矣)
![<b class='flag-5'>arduino</b> / VScode+platformIO搭建<b class='flag-5'>esp32</b>/<b class='flag-5'>esp</b>8266編譯環境(一篇足矣)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
mpu6050使用 基于esp32
![mpu6050使用 基于<b class='flag-5'>esp32</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何使用Arduino IDE對ESP32進行無線編程
![如何使用<b class='flag-5'>Arduino</b> IDE對<b class='flag-5'>ESP32</b>進行無線編程](https://file.elecfans.com/web2/M00/5D/DE/poYBAGL0spmAU90WAARudAMm4Yg724.png)
評論