ESP32 内部存储的使用(Flash-EEPROM)

其实很简单哈,核心就四个函数,申请空间函数,写入函数,保存函数,读取函数,我这里用一个IO读取其状态来代表读取还是写入状态(不知道IO操作的看我之前的博文),然后写入的值移植在0-100之...

其实很简单哈,核心就四个函数,申请空间函数,写入函数,保存函数,读取函数,我这里用一个IO读取其状态来代表读取还是写入状态(不知道IO操作的看我之前的博文),然后写入的值移植在0-100之间变化,所以你在更换状态之后就可以看到写模式最后写入的值,而且你关机重启,他仍然处于读取状态,读取的值任然是之前的值。

#include <EEPROM.h>


int num = 0;


void setup() {

  Serial.begin(115200);

  EEPROM.begin(4096);    //申请空间,传入参数为size,为需要读写的数据字节最大地址+1,取值1~4096;

  Serial.println("ESP 32 内部存储测试");

  pinMode(15, INPUT_PULLUP );

}


void loop() {

  delay(500);

  if(digitalRead(15) == 0)

  {

    num++;

    if(num == 100) num = 0;

    Serial.print("ESP 32 写入模式,写入:");

    Serial.println(num);

    //写数据,里面传入的参数为地址和写入的数据,8位,如果是很大的数可以分高低位存进去或者封装一些读取写入指定长度的函数,或者看后面的注意点里面有提到

    EEPROM.write(20, num);delay(1);  

    EEPROM.commit();delay(1);  //在写好所有的更改之后,保存更改的数据

  }

  else 

  {

    Serial.print("ESP 32 读取模式,取出数据:");

    Serial.println(EEPROM.read(20));  //读数据,里面填写的参数为地址,需要与上面的写入地址一样才可以正常读出上面我们写入的数据   

  }  


}

看看效果

attachments-2020-09-vsOFd3hZ5f6ffe002df7f.jpg


说一些需要注意的地方

1.我们使用开辟的空间是从ESP32的FLASH中分配出来的

2.包含的那个头文件的库里面已经有一个EEPROM对象可以直接使用
3.默认的EEPROM对象大小为4096字节,用户操作地址为0~4095;
4.读取和写入有函数支持,但切忌写入的东西都写完后要用保存函数保存更改才会正式生效,保存函数为EEPROM.commit()或EEPROM.end()
5.空间的申请都是4字节的倍数,即使你申请23,系统内部也会给你改成24字节
6.ESP32的EEPROM只是从flash上申请一个扇区用,所以读写都只能按扇区(4096字节)来

7.这个东西存在的目的本就不是存什么大东西的哈,只是存一些关键的需要掉电存储的参数,所以建议大家不要改申请地址,一直用这个大小就好,如果大改小会导致一些原来的数据丢失哈

8.那么存一些字符串和很大的数怎么办呢?你可以封装一个专门用于存储读取字符串的函数,但是这个东西存字符串这种东西的应用不常见,那么存一些大的数怎么办呢,这个非常常见,因为我们是8位的,也就是0-255,如果太大或者是小数呢,我们可以分高低位存储,除以255和取余255分别为高低位,甚至分高中低三位都行,而小数呢,也很简单,比如我们可以放大1000倍取整然后高低位存进去,之后取出来还原,再除以1000,就可以得到0.001精度的小数保留,精度还可以再放大。

  • 发表于 2020-09-27 10:52
  • 阅读 ( 88 )

0 条评论

请先 登录 后评论
淡若清风
淡若清风

35 篇文章

作家榜 »

  1. 淡若清风 35 文章
  2. 杨杨 2 文章
  3. seaky 0 文章
  4. 15139236712 0 文章
  5. selectcc 0 文章
  6. 温志亮 0 文章
  7. jamesfan007 0 文章
  8. Gavin 0 文章