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

目录

前言

使用环境

使用方法

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

开源万岁!


前言

        从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”表示要读取的是字符串

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

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

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

开源万岁!

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
1. 安装VS Code 首先,需要在官网下载并安装VS Code。 2. 安装ESP-IDF ESP-IDF是ESP32的开发框架,需要在命令行安装。打开命令行,输入以下命令: ``` git clone --recursive https://github.com/espressif/esp-idf.git ``` 这会将ESP-IDF克隆到本地。 接下来,需要安装ESP-IDF的依赖项。输入以下命令: ``` cd esp-idf ./install.sh ``` 这将安装ESP-IDF所需的依赖项。 3. 安装ESP32的工具链 ESP32的工具链包括编译器、调试器、下载器等。需要在命令行安装。输入以下命令: ``` sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial ``` 这将安装ESP32的工具链。 4. 安装ESP32的扩展 在VS Code安装ESP32的扩展,可以方便地编写、编译、调试ESP32的程序。打开VS Code,点击左侧菜单栏的“扩展”,搜索“ESP32”,点击安装即可。 5. 创建ESP32项目 在VS Code,点击左侧菜单栏的“文件”->“新建文件夹”,创建一个新文件夹,用于存放ESP32的项目。 打开命令行,进入该文件夹,输入以下命令: ``` idf.py create-project my_project ``` 这将创建一个名为“my_project”的ESP32项目。 6. 配置ESP32项目 打开VS Code,点击左侧菜单栏的“文件”->“打开文件夹”,选择刚才创建的项目文件夹。 在项目文件夹打开“CMakeLists.txt”文件,根据自己的需要进行配置。 7. 编译ESP32项目 在VS Code,按下“Ctrl+Shift+P”,输入“ESP32: Build”并选择该命令,开始编译ESP32项目。 8. 调试ESP32程序 在VS Code,按下“Ctrl+Shift+P”,输入“ESP32: Start Debugging”并选择该命令,开始调试ESP32程序。 以上是VS Code ESP32使用教程的基本步骤。根据自己的需要和实际情况,可以进行更加详细的配置和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值