0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32學(xué)習(xí)筆記:EEPROM

CHANBAEK ? 來源:跳動(dòng)的字節(jié) ? 作者:曉宇 ? 2023-07-14 15:03 ? 次閱讀

今天我們來玩兒EEPROM。

EEPROM概述

ESP32內(nèi)部沒有專門的EEPROM,但是我們可以通過FLASH模擬EEPROM,F(xiàn)LASH與EEPROM也是非常相似的,都是非易失性存儲(chǔ)器,使用EEPROM,我們就可以在不使用文件系統(tǒng)的情況下,來保存一些數(shù)據(jù),可以實(shí)現(xiàn)一些更加復(fù)雜的功能。

例如,我們可以做到以下功能:

  • 保存變量的最終狀態(tài)
  • 保存我們的設(shè)置
  • 保存設(shè)備被激活的次數(shù)
  • 永久保存其它任何類型的數(shù)據(jù)

ESP32在Arduino是使用FLASH開辟的一塊存儲(chǔ)區(qū)域,默認(rèn)的對(duì)象存儲(chǔ)大小為4096個(gè)字節(jié)。

硬件

本實(shí)驗(yàn)我們直接用核心板就可以,不添加其它外設(shè)了。

軟件

EEPROM初始化

代碼調(diào)用#include 后,已經(jīng)默認(rèn)定義了一個(gè)EEPROM對(duì)象,我們使用began方法初始化一下,參數(shù)為要操作的字節(jié)大小,最大為4096字節(jié),所以這里的參數(shù)范圍為0-4095。EEPROM的操作以字為單位,size最好設(shè)置為4的倍數(shù)。

EEPROM.begin(size);

將數(shù)據(jù)寫入EEPROM,使用EEPROM.write();第一個(gè)參數(shù)為地址,第二個(gè)參數(shù)為保存的值。

EEPROM.write(address, value);

從EEPROM上讀取一個(gè)字節(jié),使用EEPROM.read();參數(shù)為讀取的地址。

EEPROM.read(address);

更新生效

通過EEPROM.write()寫入數(shù)據(jù)后,之后需要調(diào)用EEPROM.commit()使更改生效,寫入完成。

EEPROM.commit();

EEPROM還有其它函數(shù),都在庫(kù)文件中,大家可以在下面兩個(gè)文件中找到相關(guān)源碼。

EEPROM.h
EEPROM.c

完整程序

這里我們用一個(gè)例子來演示一下,我們?cè)谡珽EPROM上寫入數(shù)據(jù),從0-255,反復(fù)循環(huán)寫入,然后再讀取出來。

寫程序

/*
 *      Created on: 20220128          
 *      Author:     公眾號(hào):跳動(dòng)的字節(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); //申請(qǐng)4096個(gè)字節(jié)的EEPROM存儲(chǔ)空間
  //寫數(shù)據(jù)
  Serial.println("write begin");
  for(int addr = 0; addr< 4096; addr++)
  {
    int data = addr%256; //EEPROM寫入的數(shù)據(jù)時(shí)以字節(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個(gè)數(shù)據(jù)
    {
      Serial.println("");
    }
  }

  Serial.println("read done");
}

void loop() 
{
}

實(shí)驗(yàn)效果:

圖片

EEPROM的使用很簡(jiǎn)單,但這里有一點(diǎn)需要注意,在初始化EEPROM.begin(size)的時(shí)候,參數(shù)size下一次必須大于等于上一次,否則會(huì)有用一些出錯(cuò),正常情況下,我們就一直用最大值4096即可。

后面,我們會(huì)介紹更加高級(jí)的方法實(shí)現(xiàn)數(shù)據(jù)的保存,使用Preferences庫(kù)來保存鍵值對(duì)的方式,還有文件系統(tǒng)的方式,大家到時(shí)候再深入了解。

感謝大家,關(guān)于ESP32的學(xué)習(xí),希望大家Enjoy!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1635

    瀏覽量

    148031
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7492

    瀏覽量

    163842
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1020

    瀏覽量

    81608
  • 文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    284

    瀏覽量

    19911
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    971

    瀏覽量

    17276
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP32單片機(jī)學(xué)習(xí)筆記

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 03 - MCPWM脈沖輸出/PCNT脈沖計(jì)數(shù)前言,繼續(xù)上一篇的內(nèi)容。因?yàn)樯弦黄獎(jiǎng)偤脤?shí)驗(yàn)了iic和spi,形成一對(duì)。接下來講pwm另起一篇。一、電機(jī)PWM輸出
    發(fā)表于 08-23 08:47

    ESP32ESP-IDF學(xué)習(xí)筆記

    ESP32ESP-IDF 學(xué)習(xí)筆記(六)【I2C數(shù)據(jù)總線(I2C)】文章目錄ESP32ESP
    發(fā)表于 02-22 07:30

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X
    發(fā)表于 11-14 09:06 ?6次下載
    <b class='flag-5'>ESP32</b> 開發(fā)<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學(xué)習(xí)</b> Window 窗口控件 X

    [ESP32]學(xué)習(xí)筆記02

    [ESP32學(xué)習(xí)筆記02]使用ViusalStudio2017開發(fā)ESP32、按鍵輸入檢測(cè)前言一、安裝Visual Studio 2017二、配置開發(fā)環(huán)境1.安裝ViusalGDB2.
    發(fā)表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>02

    [ESP32]學(xué)習(xí)筆記04

    Analog-to-Digital Converter(模數(shù)轉(zhuǎn)換器)的使用今天我們學(xué)習(xí)ESP32提供的ADC外設(shè)的使用,ESP32的每個(gè)ADC單元都支持兩種模式,單次讀取和連續(xù)讀取(DMA),本次
    發(fā)表于 12-22 19:02 ?9次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>04

    SPI主線協(xié)議——ESP32學(xué)習(xí)筆記

    目錄SPI主線協(xié)議——ESP32學(xué)習(xí)筆記零、前言一、什么是SPI?二、通信過程?三、極性和相位四、總結(jié)SPI主線協(xié)議——ESP32學(xué)習(xí)
    發(fā)表于 12-22 19:23 ?18次下載
    SPI主線協(xié)議——<b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 08 - WebSocket客戶端

    前言,終于要到網(wǎng)絡(luò)模型的最后一層,第四層,應(yīng)用層,http、websocket的實(shí)踐了。文章目錄ESP32 單片機(jī)學(xué)習(xí)筆記 - 08 - WebSocket客戶端一、應(yīng)用層協(xié)議 科普概念二、編程指南
    發(fā)表于 12-29 18:56 ?12次下載
    <b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 08 - WebSocket客戶端

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器一、模擬數(shù)字轉(zhuǎn)換器 ADC編程指南:Analog to Digital Converter。數(shù)據(jù)手冊(cè): ESP32 技術(shù)參考手冊(cè)
    發(fā)表于 01-17 13:18 ?11次下載
    <b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 04 - ADC和定時(shí)器

    ESP32芯片模組機(jī)器學(xué)習(xí)算法運(yùn)行的應(yīng)用

    強(qiáng)大的機(jī)器學(xué)習(xí)算法。 ESP32集天線開關(guān)、射頻巴倫、功率放大器、低噪聲放大器、濾波器以及電源管理模塊于一體,占用較小的PCB空間,即可最大化滿足實(shí)際應(yīng)用多樣的功能需求。 使用EdgeImpulse在ESP32上運(yùn)行機(jī)器
    發(fā)表于 03-15 17:23 ?1257次閱讀

    ESP32上的深度強(qiáng)化學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《ESP32上的深度強(qiáng)化學(xué)習(xí).zip》資料免費(fèi)下載
    發(fā)表于 12-27 10:31 ?0次下載
    <b class='flag-5'>ESP32</b>上的深度強(qiáng)化<b class='flag-5'>學(xué)習(xí)</b>

    ESP32學(xué)習(xí)筆記:ADC

    ESP32 芯片有2 個(gè) 12位的SAR(逐次逼近)ADC,最多可以讀取18個(gè)不同的模擬通道輸入,由5個(gè)專用轉(zhuǎn)換控制器管理,2個(gè)支持高性能多通道掃描,2個(gè)支持Deep-sleep低功耗模式下運(yùn)行,還有一個(gè)專門用于功率檢測(cè)和峰值監(jiān)測(cè)。
    的頭像 發(fā)表于 07-13 17:11 ?5013次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:ADC

    ESP32學(xué)習(xí)筆記:存儲(chǔ)分布和啟動(dòng)過程

    今天我們來說說ESP32 for Arduino存儲(chǔ)分布以及啟動(dòng)過程。
    的頭像 發(fā)表于 07-14 15:10 ?3004次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:存儲(chǔ)分布和啟動(dòng)過程

    ESP32學(xué)習(xí)筆記:NVS分區(qū)永久保存數(shù)據(jù)

    今天我們來說說ESP32 for Arduino NVS分區(qū)永久保存數(shù)據(jù)。
    的頭像 發(fā)表于 07-15 16:14 ?1.1w次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:NVS分區(qū)永久保存數(shù)據(jù)

    ESP32學(xué)習(xí)筆記:雙核

    今天我們來說說ESP32 for Arduino 的雙核。
    的頭像 發(fā)表于 07-15 16:16 ?5014次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:雙核

    ESP32學(xué)習(xí)筆記:WiFi

    今天我們來說說ESP32 的WiFi。
    的頭像 發(fā)表于 07-15 16:20 ?3994次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:WiFi