目录
前言
Arduino Uno R3 本身没有 “自动掉电保存” 的功能(即不会主动保存运行中的数据),但可以通过其硬件特性实现掉电后数据的永久存储,核心依赖于主控制芯片(ATmega328P)内置的 EEPROM(电可擦除可编程只读存储器)。
Arduino Uno R3 的主芯片 ATmega328P 集成了一块 512 字节的 EEPROM,这是一种非易失性存储介质,特点是:
- 掉电不丢失数据:即使断开电源,存储在 EEPROM 中的数据也会永久保留。
- 写入寿命有限:约 10 万次擦写循环(正常使用场景下足够耐用,避免高频次连续写入即可)。
- 适合保存少量关键数据:如设备配置参数、计数阈值、用户设置等(512 字节容量适合存储整数、状态标志等小型数据)。
一、如何使用 EEPROM 实现掉电保存?
通过 Arduino 官方提供的 EEPROM
库,可以直接操作 EEPROM 进行数据读写。以下是具体示例:
#include <EEPROM.h>
// 定义数据在 EEPROM 中的存储地址(0~511 之间,避免重叠)
const int COUNTER_ADDR = 0;
int counter = 0; // 要保存的计数器
void setup() {
Serial.begin(9600);
// 上电时从 EEPROM 读取之前保存的计数器值
EEPROM.get(COUNTER_ADDR, counter);
Serial.print("上电读取到的计数器值:");
Serial.println(counter);
}
void loop() {
// 模拟计数器递增(每 2 秒加 1)
delay(2000);
counter++;
Serial.print("当前计数器值:");
Serial.println(counter);
// 将更新后的计数器值写入 EEPROM(掉电后保留)
EEPROM.put(COUNTER_ADDR, counter);
Serial.println("已保存到 EEPROM");
}