老宇哥带你玩转 ESP32:09 EEPROM的使用演示

今天我们来玩儿EEPROM

EEPROM概述

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

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

  • 保存变量的最终状态

  • 保存我们的设置

  • 保存设备被激活的次数

  • 永久保存其它任何类型的数据

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

硬件

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

软件

EEPROM初始化

代码调用#include <EEPROM.h>后,已经默认定义了一个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() 
{
}

实验效果:

665b35500d6ced13e27ef44453fb0fe2.png

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

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

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

6ec14a1ac1ef540281a9aa50218326a5.png

老宇哥带你玩转 ESP32:08 硬件定时器

325194940d8976198934eb2d1d3c2e25.png

老宇哥带你玩转 ESP32:07 I2C协议,看这一篇就够了

a28d2d1e09038439bbd85f753281d2cd.png

老宇哥带你玩转 ESP32:06 输出你想要的PWM波形

f2f9a132a6889e90bc2ae9441619eff1.png

老宇哥带你玩转 ESP32:04 ADC用起来这也太简单了吧

df2f96c1b9df90681d13f5ec3f5179db.png

老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境

‍欢迎 点分享、收藏、点赞、在看。
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值