基于Arduino IDE 野火ESP8266模块 EEPROM 存储开发

一、操作存储器

我们可以使用ESP8266模块的EEPROM,也就是可读可擦存储器,可以掉电不丢失地帮我们存储一些数据。ESP8266微控制器有一个闪存区(Flash memory) 来模拟Arduino的EEPROM。这是微控制器中一个特殊的内存位置,即使在主板关闭后,数据也会保留在内存中。需要注意的一件重要的事情是,EEPROM具有有限的尺寸和寿命。存储器单元可以根据需要多次读取,但写入周期的次数限制在100,000次。建议密切关注存储数据的大小以及希望更新数据的频率。**一般来说,闪存的整体大小为4MB。ESP8266的EEPROM大小为4kB。**如果想要记录一组传感器的实时数据来绘制曲线,最好选择SD卡模块来存储数据。
头文件

#include<EEPROM.h>

库函数有

与标准EEPROM类有点不同。在开始读或写之前需要调用EEPROM.Begin (size),size是你想要使用的字节数。大小可以在4到4096字节之间。EEPROM.write不立即写入闪存,将更改保存到flash中必须调用EEPROM.commit()。EEPROM.end也有此功能,同时将释放EEPROM内容的RAM副本。EEPROM库使用位于嵌入式文件系统之后的一个闪存扇区。

请注意,每次需要保存更改的EEPROM数据时,扇区都需要重新闪现。因此,即使写入少量数据,也会很快耗尽闪存。

官方的代码示例

https://github.com/esp8266/Arduino/tree/master/libraries/EEPROM/examples

二、测试代码

参考例程:

//Libraries
#include <EEPROM.h>//https://github.com/esp8266/Arduino/blob/master/libraries/EEPROM/EEPROM.h
//Constants
#define EEPROM_SIZE 12
void setup() {
 	//Init Serial USB
 	Serial.begin(115200);
 	Serial.println(F("Initialize System"));
 	//Init EEPROM
 	EEPROM.begin(EEPROM_SIZE);
 	//Write data into eeprom
 	int address = 0;
 	int boardId = 18;
 	EEPROM.put(address, boardId);
 	address += sizeof(boardId); //update address value
 	float param = 26.5;
 	EEPROM.put(address, param);
 	EEPROM.commit();
 	//Read data from eeprom
 	address = 0;
 	int readId;
 	EEPROM.get(address, readId);
 	Serial.print("Read Id = ");
 	Serial.println(readId);
 	address += sizeof(readId); //update address value
 	float readParam;
 	EEPROM.get(address, readParam); //readParam=EEPROM.readFloat(address);
 	Serial.print("Read param = ");
 	Serial.println(readParam);
 	EEPROM.end();
}
void loop() {}

测试代码功能如下,先判断是否写入过,如果没有写入则写入指定信息数据,否则直接读取数据,并将数据打印出来。

#include <EEPROM.h>
 
void setup() {
    // put your setup code here, to run once:
    Serial.begin(115200);
    Serial.println();
    EEPROM.begin(10);
    if(EEPROM.read(0) != 0xAA)
    {
      Serial.println("write");
      for(int i=0;i<10;i++){
          EEPROM.write(i,0xAA+i);           //执行写入操作
          Serial.println(0xAA+i);
          EEPROM.commit();
      }
    }
    else
    {
      Serial.println("read");
      for(int i=0;i<10;i++){
        Serial.println(EEPROM.read(i));     //执行读出操作
      }
    }
    
    EEPROM.end();
}
 
void loop() {
    // put your main code here, to run repeatedly:
}   

测试结果如下:

第一此启动

第二次启动

整体如下,可以看到数据已经被存储,即使掉电也不会丢失。

参考:
https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#eeprom
链接

相关推荐
代码哈士奇21 小时前
mqtt 传递和推送 温湿度计消息 js
开发语言·前端·javascript·硬件·esp8266
e调布鲁斯4 天前
esp32cam+Arduino IDE在编译时提示找不到 esp_camera.h 的解决办法
esp32·arduino
ourkix11 天前
arduino uno R3更换328pb-au芯片,烧录bootloader
嵌入式硬件·arduino
IT永勇13 天前
基于Arduino的LED亮灭按键控制
单片机·嵌入式硬件·arduino·电子设计·按键检测
_后知后觉_15 天前
竹壳天气时钟(四)UTF8转GB2312后使用HZK16字库在TFT屏幕上显示中文
开发语言·arduino·esp8266·nodemcu·st7735s·tft_espi
MAR-Sky1 个月前
Arduino使用网页连接修改esp8266等物联网并修改网络连接信息的基本思路
物联网·esp8266
_后知后觉_1 个月前
基于esp8266的nodemcu实现网页配置wifi功能
arduino·esp8266·nodemcu
深海大都督1 个月前
【深海王国】初中生也能画的电路板?目录合集
单片机·嵌入式硬件·青少年编程·硬件工程·arduino·pcb工艺
IT永勇1 个月前
基于Arduino的L298N电机驱动模块使用
驱动开发·单片机·嵌入式硬件·arduino·电子设计
_后知后觉_1 个月前
使用arduino编程在基于esp8266的nodemcu开发板上实现开机自动连接wifi
arduino·esp8266·nodemcu