arduino esp8266配网后储存密码 EEPROM储存数据简单教程

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

ESP8266配网后重启需重新配网,可将WiFi账号密码等配置存入EEPROM。EEPROM实为外部Flash末尾开辟的空间,默认1024字节,擦写寿命约10万次,应控制写入频率。使用前需引入EEPROM.h并调用EEPROM.begin(1024)初始化。写入字节用EEPROM.write后须commit提交;写入int可用union拆分字节存储;写入字符串先存长度再逐字节保存。读取时分别用read读取字节、用union还原int、按长度逐字节拼接字符串。

🔎

延伸解读

EEPROM 的本质与寿命限制

ESP8266 的 EEPROM 并非独立芯片,而是从外部 Flash 末尾划出的模拟存储区,默认 1024 字节,可调至 4096 字节。其擦写寿命约 10 万次,读取不限次数。因此,若在循环中频繁写入 WiFi 配置,会加速 Flash 损坏。建议仅在配网成功或配置变更时写入,避免每次启动都执行写操作。

写入后必须 commit 的原因

EEPROM.write() 仅将数据暂存于内存缓冲区,不会立即写入 Flash。必须调用 EEPROM.commit() 才能将缓冲区内容提交到 Flash。若遗漏 commit,重启后数据丢失,配网信息无法保存。写入字符串时,教程还建议在 commit 前加短暂 delay,但核心是确保 commit 被调用。

多字节数据的存储技巧

对于 int 等多字节类型,教程使用 union 将变量拆分为 byte 数组,再逐字节写入 EEPROM。读取时按相反顺序组合字节还原。字符串则先存长度,再逐字节保存内容。读取时依据长度循环拼接,并跳过 0xFF(空 Flash 默认值)。这种方法简单,但需自行管理地址和长度,避免越界。

❓

Q&A

ESP8266的EEPROM是什么?它和外部Flash有什么关系?

ESP8266的EEPROM实际上是从外部Flash存储器最末尾开辟的一块空间,默认大小为4096字节,但可以通过EEPROM.begin()指定使用的大小(如1024字节)。它的擦写寿命约为10万次,读取次数无限。

如何在ESP8266上使用EEPROM保存数据?需要哪些步骤?

使用EEPROM需要三步:1. 引入库 #include <EEPROM.h>;2. 初始化 EEPROM.begin(size) 指定空间大小;3. 写入数据用 EEPROM.write(addr, value) 后必须调用 EEPROM.commit() 提交。读取时用 EEPROM.read(addr)。

ESP8266的EEPROM如何存储int类型数据?

使用union将int拆分为字节数组存储。定义union包含int和byte数组,将int值赋给union的int成员,然后依次将byte数组的每个字节写入EEPROM连续地址,最后调用commit()。读取时反向操作,将读出的字节按顺序赋给byte数组,再通过union的int成员还原。

ESP8266的EEPROM如何保存字符串?

先在一个地址写入字符串长度,然后从另一个地址开始逐个字节写入字符串的每个字符,最后调用commit()。读取时先读取长度,再按长度逐个字节读取并拼接成字符串,注意跳过0xFF(空Flash值)。

为什么EEPROM写入后必须调用commit()?

因为EEPROM.write()只是将数据写入内存缓冲区,并没有真正写入外部Flash。只有调用EEPROM.commit()后,数据才会被提交到Flash中保存,否则掉电后数据会丢失。

使用ESP8266的EEPROM时需要注意哪些问题?

主要注意两点:1. EEPROM有擦写寿命限制(约10万次),应避免频繁写入,只在必要时保存;2. 写入数据后必须调用commit()才能生效,且读取次数无限,可放心读取。

🏷️

标签

➡️

继续阅读