从零开始的ESP8266探索(08)-EEPROM使用测试

本文详细介绍了如何在ESP8266上使用EEPROM功能,包括固化数据、保存配置信息等应用,提供了写入和读取数据的示例代码,并强调了操作时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

EEPROM可以在不使用文件和文件系统的情况下用来固化一些数据,常见的比如用来保存SSID或是Password,保存用户名及密码,保存用户设置等数据,这样就可以不用每次都通过烧写程序来改变系统运行时的初值了。可以实现更复杂的应用。

使用说明

其实EEPROM使用非常简单的,也没必要专门开个帖子写,看看官方说明和例程分分钟就会了。
在这里插入图片描述
EEPROM主要几点如下:

  • Arduino for esp8266 中用的EEPROM其实是从外部flash中存储器最末尾开辟的4096字节空间,结合官方说明,我们每次操作写入的数据在4~4096字节之间;
  • 根据上一条,EEPROM可操作的地址为0~4095;
  • 调用#include <EEPROM.h>来使用EEPROM;
  • 使用EEPROM时,首先调用EEPROM.begin(size)size为需要读写的数据字节最大地址+1,取值4~4096
  • 使用EEPROM.write(addr,data)来写数据,参数分别为地址&数据,写数据后需要通过EEPROM.commit()EEPROM.end()将数据保存到EEPROM;
  • 使用EEPROM.read(addr)来读数据;

更多内容可以参考官方例程:https://github.com/esp8266/Arduino/tree/master/libraries/EEPROM

程序测试

写数据

/*
该代码向EEPROM写入4096字节数据
*/
#include <EEPROM.h>

int addr = 0; //EEPROM数据地址

void setup() 
{
  Serial.begin(9600);
  Serial.println("");
  Serial.println("Start write");

  EEPROM.begin(4096); //申请操作到地址4095(比如你只需要读写地址为100上的一个字节,该处也需输入参数101)
  for(addr = 0; addr<4096; addr++)
  {
    int data = addr%256; //在该代码中等同于int data = addr;因为下面write方法是以字节为存储单位的
    EEPROM.write(addr, data); //写数据
  }
  EEPROM.commit(); //保存更改的数据

  Serial.println("End write");
}

void loop() 
{
}

读数据

/*
该代码从EEPROM读取4096字节数据
*/
#include <EEPROM.h>

int addr = 0;

void setup() 
{
  Serial.begin(9600);
  Serial.println("");
  Serial.println("Start read");

  EEPROM.begin(4096); //申请操作到地址4095(比如你只需要读写地址为100上的一个字节,该处也需输入参数101)
  for(addr = 0; addr<4096; addr++)
  {
    int data = EEPROM.read(addr); //读数据
    Serial.print(data);
    Serial.print(" ");
    delay(2);
    if((addr+1)%256 == 0) //每读取256字节数据换行
    {
      Serial.println("");
    }
  }

  Serial.println("End read");
}

void loop() 
{
}

读取测试结果

在这里插入图片描述

注意事项

当你需要分多次EEPROM时,切记之后每次EEPROM.begin(size);中输入的size必须大于等于之前每次输入的值。简单点的话可以每次写入时这里都输入你可能会用到的最大值,比如如果对时间和内存要求不高的话这里可以写死4096。

你每次操作EEPROM,根据你输入的size,会建立一个size大小的缓存并从EEPROM地址0开始读取size长度数据到该缓存,你之后的读写操作是对这个缓存的操作。当你提交写入的时候,程序才会把缓存中的数据写入EEPROM,但是EEPROM的写入是以扇区为单位的(4096字节),那么在写入的时候从地址0开始的size个数数据时ok的,但后面4096-size个数据就可能会被改变(我目前遇到的就是后面的数据都变255了)。这应该是这个库的一个逻辑bug。因为ESP8266的EEPROM并非真正的EEPROM,只是从flash上划了一个扇区用,所以读写都只能按扇区来。

总结

EEPROM的使用非常简单,没有什么太多可以说的。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Naisu Xu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值