老宇哥带你玩转 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搭建开发环境

‍欢迎 点分享、收藏、点赞、在看。
### 关于ESP32的入门教程和基础项目 #### MicroPythonESP32上的应用 MicroPython是一种适用于嵌入式系统的Python 3解释器,能够在诸如ESP32这样的硬件平台上运行。对于希望利用高级编程语言简化开发流程的人来说,这是一个理想的选择[^1]。 为了开始使用MicroPython进行ESP32开发,开发者应当熟悉安装环境以及基本配置过程。这通常涉及到设置特定IDE(集成开发环境),如Thonny或Mu Editor,并通过USB连接设备来上传代码脚本到ESP32板子上执行。 ```python import machine led = machine.Pin(2, machine.Pin.OUT) while True: led.value(not led.value()) # 切换LED状态 time.sleep(0.5) # 暂停半秒 ``` 这段简单的程序展示了如何控制GPIO引脚以实现LED闪烁效果,这是许多初学者的第一个实验项目之一。 #### 使用VS Code构建ESP32项目实例 另一个流行的选项是采用Visual Studio Code (VS Code),配合官方支持工具链来进行更底层C/C++级别的编程工作。创建第一个应用程序可以按照如下方式操作: 按下`F1`键调出命令面板,输入并选择 `ESP-IDF: Show Examples Projects`;接着指定当前使用的ESP-IDF路径;之后挑选示例工程中的`get-started/hello_world`作为起点,在本地磁盘位置建立新项目目录结构[^2]。 此方法允许用户深入理解RTOS操作系统特性及其API接口的同时也提供了良好的调试体验和支持文档资源访问途径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值