ESP32学习笔记:EEPROM

描述

今天我们来玩儿EEPROM。

EEPROM概述

ESP32内部没有专门的EEPROM,但是我们可以通过FLASH模拟EEPROM,FLASH与EEPROM也是非常相似的,都是非易失性存储器,使用EEPROM,我们就可以在不使用文件系统的情况下,来保存一些数据,可以实现一些更加复杂的功能。

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

  • 保存变量的最终状态
  • 保存我们的设置
  • 保存设备被激活的次数
  • 永久保存其它任何类型的数据

ESP32在Arduino是使用FLASH开辟的一块存储区域,默认的对象存储大小为4096个字节。

硬件

本实验我们直接用核心板就可以,不添加其它外设了。

软件

EEPROM初始化

代码调用#include 后,已经默认定义了一个EEPROM对象,我们使用began方法初始化一下,参数为要操作的字节大小,最大为4096字节,所以这里的参数范围为0-4095。EEPROM的操作以字为单位,size最好设置为4的倍数。

EEPROM.begin(size);

将数据写入EEPROM,使用EEPROM.write();第一个参数为地址,第二个参数为保存的值。

EEPROM.write(address, value);

从EEPROM上读取一个字节,使用EEPROM.read();参数为读取的地址。

EEPROM.read(address);

更新生效

通过EEPROM.write()写入数据后,之后需要调用EEPROM.commit()使更改生效,写入完成。

EEPROM.commit();

EEPROM还有其它函数,都在库文件中,大家可以在下面两个文件中找到相关源码。

EEPROM.h
EEPROM.c

完整程序

这里我们用一个例子来演示一下,我们在整片EEPROM上写入数据,从0-255,反复循环写入,然后再读取出来。

写程序

/*
 *      Created on: 20220128          
 *      Author:     公众号:跳动的字节
 *      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个字节的EEPROM存储空间
  //写数据
  Serial.println("write begin");
  for(int addr = 0; addr< 4096; addr++)
  {
    int data = addr%256; //EEPROM写入的数据时以字节为单位的
    EEPROM.write(addr, data); //写入数据
  }
  EEPROM.commit(); //保存更改的数据 
  Serial.println("write done");

  //读数据
  Serial.println("read begin");
  for(int addr = 0; addr< 4096; addr++)
  {
    int data = EEPROM.read(addr); //读数据
    Serial.print(data);
    Serial.print(" ");
    delay(2);
    if((addr+1)%256 == 0) //每行显示256个数据
    {
      Serial.println("");
    }
  }

  Serial.println("read done");
}

void loop() 
{
}

实验效果:

存储器

EEPROM的使用很简单,但这里有一点需要注意,在初始化EEPROM.begin(size)的时候,参数size下一次必须大于等于上一次,否则会有用一些出错,正常情况下,我们就一直用最大值4096即可。

后面,我们会介绍更加高级的方法实现数据的保存,使用Preferences库来保存键值对的方式,还有文件系统的方式,大家到时候再深入了解。

感谢大家,关于ESP32的学习,希望大家Enjoy!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分