目录

前言

使用环境

使用方法

原创不易,点个赞或者点个关注激励笔者分享更多优质原创内容吧!

开源万岁!


前言

从ESP32板子的官方库中可以找到EEPROM库,但是阅读README.md文件可知,ESP32并没有EEPROM,而是使用内部FLASH模拟出来EEPROM的,这是为了和以前的Arduino程序兼容。

以下是README.md文件的原文:

## EEPROM

EEPROM is deprecated.  For new applications on ESP32, use Preferences.  EEPROM is provided for backwards compatibility with existing Arduino applications.
EEPROM is implemented using a single blob within NVS, so it is a container within a container. As such, it is not going to be a high performance storage method.  Preferences will directly use nvs, and store each entry as a single object therein.

注意,NVS为非易失性存储,是在FLASH中开辟出来的一块区域,用于模拟EEPROM以存储数据。

使用环境

Arduino IDE V2.0.0-rc9.2

ESP32-Wroom-DA Module

ESP32-Wroom-DA Module的示例中的EEPROM->eeprom_class

EEPROM使用的示例

使用方法

  • 首先包含头文件
#include "EEPROM.h"
  • 然后定义你要存储的变量
EEPROMClass  NAMES("eeprom0");
EEPROMClass  HEIGHT("eeprom1");
EEPROMClass  AGE("eeprom2");
EEPROMClass  FIRST_POWER_ON__JUDGE("eeprom3");//用于存储数据,判断是否为初次上电

示例这里定义了三种要存储的数据,分别是姓名、身高和年龄,我们可以按照自己的需要修改。

  • 接着对EEPROM的初始化文件进行封装(以下程序部分为示例提供,有一定修改)

很多细节在注释里已经详细说明,请仔细阅读下面代码的注释

主要添加的有初次上电的判断以及初次上电的数据初始化

void EEPROM_Init()
{Serial.begin(115200);    //串口初始化Serial.println("__________EEPROM Initializing...__________");delay(1000);Serial.println("Testing EEPROMClass\n");//以下是EEPROM的初始化if (!NAMES.begin(0x500)) {
//这里填入的0x500为你所需要的空间的大小的字节数,此处为0x500个字节Serial.println("Failed to initialise NAMES");Serial.println("Restarting...");delay(1000);ESP.restart();    //初始化失败就重启ESP32}if (!HEIGHT.begin(0x200)) {Serial.println("Failed to initialise HEIGHT");Serial.println("Restarting...");delay(1000);ESP.restart();}if (!AGE.begin(0x100)) {Serial.println("Failed to initialise AGE");Serial.println("Restarting...");delay(1000);ESP.restart();}if (!FIRST_POWER_ON__JUDGE.begin(2)) {Serial.println("Failed to initialise FIRST_POWER_ON__JUDGE");Serial.println("Restarting...");delay(1000);ESP.restart();}/*如果是初次上电,就进行初始化*/
//这一步主要是为了在EEPROM里写入自己需要的初始化数据
//只在ESP32第一次上电时初始化一次,后面不会再初始化if(FIRST_POWER_ON__JUDGE.readUChar(0) != 0xA5 || \     FIRST_POWER_ON__JUDGE.readUChar(1) != 0x5A){
//EEPROM出厂时的内容一般都初始化为
//0xFF,所以我们判断是否为0xA5和0x5A
//来判断该EEPROM是否为第一次上电,如
//果不是0xA5和0x5A,则为第一次上电,执行第一次上电的初始化
//并写入0xA5和0x5A,下次上电就不会再次执行初始化Serial.println("EEPROM first use initialization.");//串口提示该EEPROM为第一次上电使用
//写入已经上电标志位FIRST_POWER_ON__JUDGE.writeUChar(0, 0xA5);FIRST_POWER_ON__JUDGE.writeUChar(1, 0x5A);FIRST_POWER_ON__JUDGE.commit();//以下写入你自己的数据初始化代码,格式与写上电标志位的代码一样//写入数据后记得要写commit();//如NAMES.commit();//写入后commit的数据才会真正保存到EEPROM中,掉电不易失}Serial.println("__________EEPROM has initialized__________");//提示初始化完成// Serial.println("__________First Power On Judge__________");// Serial.printf("0x%08x\n", (uint32_t)FIRST_POWER_ON__JUDGE.readChar(0));// Serial.printf("0x%08x\n", (uint32_t)FIRST_POWER_ON__JUDGE.readChar(1));
}
  • 写入数据时,如下面代码
USERNAME.writeString(counter * SIZE__USERNAME, OrderInfo.userName);

“USERNAME”为自己定义的数据种类

“writeString”表示要写入的是字符串

括号内:

第一个参数为要写入的数据的地址,假设为USERNAME分配了20个名字的空间,每个名字为8个字节大小,那么

第0个名字写在地址0,

第1个名字写在地址8,

...

以此类推

所以此处使用了一个counter标识存储的是第几个名字,SIZE__USERNAME为名字的大小(8个字节)

第二个参数为要存储的数据,也就是要存储的username

存储的数据写入后,必须调用.commit()方法才能真正将数据存储进EEPROM,代码如下

USERNAME.commit();
  • 读取数据时,如下
USERNAME.readString(counter * SIZE__USERNAME);

“USERNAME”为自己定义的数据种类

“writeString”表示要读取的是字符串

括号内为要读取的数据地址

当然,除了字符串的存储和读取,还可以存储其他类型的数据,整形,浮点数,字符通通可以,此处不再赘述,有需要请自行搜索相关函数。

原创不易,点个赞或者点个关注激励笔者分享更多优质原创内容吧!

开源万岁!

【ESP32教程】ESP32EEPROM的使用(使用示例中的eeprom class用法)相关推荐

  1. 实用ExtJS教程100例-006:ExtJS中Window的用法示例

    在前面几个示例中,我们演示了MessageBox的各种用法,今天这篇文章将演示如何使用Window. 我们首先来创建一个窗口: var win = Ext.create("Ext.windo ...

  2. XamarinAndroid组件教程RecylerView适配器设置动画示例

    XamarinAndroid组件教程RecylerView适配器设置动画示例 [示例1-3]下面将在RecylerView的子元素进行滚动时,使用适配器动画.具体的操作步骤如下: (1)创建一个名为R ...

  3. 接口文档示例_在示例中使用Android中的Work Manager

    接口文档示例 在本文中,我们将介绍如何在android中使用工作管理器. 工作管理器是android体系结构组件的一部分,并且可以很好地替代所有先前的调度选项. 其他调度选项,例如JobSchedul ...

  4. 变分模态分解_Android小部件示例中的模态对话框(弹出)

    变分模态分解 在此示例中,我们将看到如何在主屏幕中创建一个可以打开弹出对话框的Android小部件. 如您所知,Android Widgets是小型应用程序,基本上可以做两件事. 按下时启动新的活动, ...

  5. php this指针的用法,C#_C#中this指针的用法示例,本文实例展示了C#中this指针的 - phpStudy...

    C#中this指针的用法示例 本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体内容如下: 一.this指针是什么: 这里有一些面向对象编程的概念需要说明:类(Cla ...

  6. java coin介绍_代码示例中的Java 7:Project Coin

    java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...

  7. Visual Paradigm 教程[UML]:如何在UML中绘制活动图?

    下载Visual Paradigm最新版本 活动图由活动和状态之间的活动,状态和转换组成,描述了如何协调活动以提供服务,例如,单个用例中的事件如何相互关联,或者用例集合如何协调创建 组织的工作流程. ...

  8. Tapestry 教程(七)在Tapestry中一起使用Hibernate

    为什么80%的码农都做不了架构师?>>>    好了,你填写了所有的输入域,提交了这个表单(没有任何验证错误),瞧:你又回到了相同的表单,所有的格子里面都是空的.发生了什么,数据都到 ...

  9. a标签去下划线 菜鸟教程_HTML下划线标签示例教程

    a标签去下划线 菜鸟教程 HTML provides different styling options for the text. Underlining the HTML text is one ...

最新文章

  1. Maven+mybatis教程
  2. 相机夜视原理——红外补光
  3. LeetCode Integer Break(整数拆分问题)
  4. 一个线程池 bug 引发的 GC 思考!
  5. SAP OData Multiple Origin composition test - Opportunity Creation case
  6. [leetcode]Pascal#39;s Triangle II
  7. Akka STM –与STM Ref和Agent进行乒乓球比赛
  8. 迪美特TVZ8双核智能高清播放器 在电视上编程不是梦
  9. 菜鸟程序员如何提升自己的潜在价值
  10. MySql增加用户、授权、修改密码等语句
  11. 【数据结构和算法笔记】:数据结构概述
  12. std::string与output-operator的兼容问题
  13. 第一百天 how can i 坚持
  14. 面板x轴模式包括哪些_虎扑轻跃 | 体验一汽大众探岳X
  15. Eratosthenes筛法
  16. 网站视频倍速播放和进度自定义调整
  17. 帝国理工大学计算机本科笔试题,共同努力 成功申请帝国理工学院计算机科学专业...
  18. introduce page
  19. R语言生存分析:Cox回归
  20. 红芯宣布获得2.5亿元C轮系列融资,要做1亿人的安全工作入口

热门文章

  1. 虚幻引擎UE4中的Tick事件
  2. SQLSERVER 查询本周一至周日数据
  3. 自动化连接远程服务器并执行指令
  4. 计算机无法连接iphone,iTunes不识别iPhone?iTunes无法连接iPhone怎么办
  5. 学术-数学:黎曼猜想
  6. css 光影掠过文字效果
  7. 408-机组一些小知识点
  8. bzoj4521【CQOI2016】手机号码
  9. SitePoint Podcast#32:云中的一切
  10. 网站UI设计的注意事项