0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP32学习笔记:EEPROM

CHANBAEK 来源:跳动的字节 作者:晓宇 2023-07-14 15:03 次阅读

今天我们来玩儿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!

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

    关注

    10

    文章

    1551

    浏览量

    146707
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162004
  • EEPROM
    +关注

    关注

    9

    文章

    928

    浏览量

    80334
  • 文件系统
    +关注

    关注

    0

    文章

    273

    浏览量

    19681
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15819
收藏 人收藏

    评论

    相关推荐

    ESP32单片机学习笔记

    ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数前言,继续上一篇的内容。因为上一篇刚好实验了iic和spi,形成一对。接下来讲pwm另起一篇。一、电机PWM输出
    发表于 08-23 08:47

    ESP32ESP-IDF学习笔记

    ESP32ESP-IDF 学习笔记(六)【I2C数据总线(I²C)】文章目录ESP32ESP
    发表于 02-22 07:30

    ESP32 开发笔记(四)LVGL控件学习 Window 窗口控件 X

    ESP32 开发笔记(四)LVGL控件学习 Window 窗口控件 X
    发表于 11-14 09:06 6次下载
    <b class='flag-5'>ESP32</b> 开发<b class='flag-5'>笔记</b>(四)LVGL控件<b class='flag-5'>学习</b> Window 窗口控件 X

    [ESP32]学习笔记02

    [ESP32学习笔记02]使用ViusalStudio2017开发ESP32、按键输入检测前言一、安装Visual Studio 2017二、配置开发环境1.安装ViusalGDB2.
    发表于 12-03 17:36 23次下载
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>02

    ESP32ESP-IDF 教学(五(1))——ESP-IDF的CMake 构建系统(Build System)

    ESP32ESP-IDF 学习笔记(五)【ESP-IDF CMake构建系统(Build System)】文章目录
    发表于 12-16 16:53 20次下载
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教学(五(1))——<b class='flag-5'>ESP</b>-IDF的CMake 构建系统(Build System)

    [ESP32]学习笔记04

    Analog-to-Digital Converter(模数转换器)的使用今天我们学习ESP32提供的ADC外设的使用,ESP32的每个ADC单元都支持两种模式,单次读取和连续读取(DMA),本次
    发表于 12-22 19:02 9次下载
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>04

    ESP32ESP-IDF 教学(八)—— 模数转换器(ADC)

    ESP32ESP-IDF 学习笔记(七)——模数转换器(ADC)文章目录ESP32ESP
    发表于 12-22 19:08 38次下载
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教学(八)—— 模数转换器(ADC)

    SPI主线协议——ESP32学习笔记

    目录SPI主线协议——ESP32学习笔记零、前言一、什么是SPI?二、通信过程​三、极性和相位四、总结SPI主线协议——ESP32学习
    发表于 12-22 19:23 17次下载
    SPI主线协议——<b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    ESP32ESP-IDF 教学(六)——I2C数据总线(I²C)

    ESP32ESP-IDF 学习笔记(六)【I2C数据总线(I²C)】文章目录ESP32ESP
    发表于 12-28 19:25 22次下载
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教学(六)——I2C数据总线(I²C)

    ESP32 单片机学习笔记 - 08 - WebSocket客户端

    前言,终于要到网络模型的最后一层,第四层,应用层,http、websocket的实践了。文章目录ESP32 单片机学习笔记 - 08 - WebSocket客户端一、应用层协议 科普概念二、编程指南
    发表于 12-29 18:56 9次下载
    <b class='flag-5'>ESP32</b> 单片机<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 08 - WebSocket客户端

    ESP32 单片机学习笔记 - 04 - ADC和定时器

    ESP32 单片机学习笔记 - 04 - ADC和定时器一、模拟数字转换器 ADC编程指南:Analog to Digital Converter。数据手册: ESP32 技术参考手册
    发表于 01-17 13:18 11次下载
    <b class='flag-5'>ESP32</b> 单片机<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 04 - ADC和定时器

    ESP32上的深度强化学习

    电子发烧友网站提供《ESP32上的深度强化学习.zip》资料免费下载
    发表于 12-27 10:31 0次下载
    <b class='flag-5'>ESP32</b>上的深度强化<b class='flag-5'>学习</b>

    ESP32学习笔记:ADC

    ESP32 芯片有2 个 12位的SAR(逐次逼近)ADC,最多可以读取18个不同的模拟通道输入,由5个专用转换控制器管理,2个支持高性能多通道扫描,2个支持Deep-sleep低功耗模式下运行,还有一个专门用于功率检测和峰值监测。
    的头像 发表于 07-13 17:11 3202次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:ADC

    ESP32学习笔记:双核

    今天我们来说说ESP32 for Arduino 的双核。
    的头像 发表于 07-15 16:16 3053次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:双核

    ESP32学习笔记:WiFi

    今天我们来说说ESP32 的WiFi。
    的头像 发表于 07-15 16:20 2376次阅读
    <b class='flag-5'>ESP32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:WiFi