基于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
链接

相关推荐
Zevalin爱灰灰5 天前
基于STM32实现OTA&BootLoader 第五章——OTA功能开发【下】
stm32·单片机·物联网·mqtt·嵌入式·esp8266
Zevalin爱灰灰11 天前
零基础入门学用物联网(ESP8266) 第二部分 MQTT基础篇(五)
单片机·物联网·mqtt·嵌入式·esp8266
Zevalin爱灰灰12 天前
零基础入门学用物联网(ESP8266) 第二部分 MQTT基础篇(三)
单片机·物联网·mqtt·嵌入式·esp8266
Zevalin爱灰灰12 天前
零基础入门学用物联网(ESP8266) 第二部分 MQTT基础篇(四)
单片机·物联网·mqtt·嵌入式·esp8266
kainx12 天前
Linux编译eeprom
linux·运维·c语言·eeprom
小贺儿开发14 天前
【Arduino与Unity交互探究】03 超声波测距模块
unity·arduino·串口通信·传感器·videoplayer·硬件交互
Zevalin爱灰灰16 天前
零基础入门学用物联网(ESP8266) 第一部分 基础知识篇(六)
单片机·物联网·嵌入式·esp8266
树爷只认钱17 天前
ESP01S模块+串口底座 AT指令连接中移Onenet物联网全过程(第1篇)
单片机·嵌入式硬件·物联网·esp8266
txh050718 天前
物联网esp8266小记
物联网·学习·esp8266
Zevalin爱灰灰20 天前
零基础入门学用物联网(ESP8266) 第一部分 基础知识篇(五)
单片机·物联网·嵌入式·esp8266