跳到主要内容

Arduino EEPROM 存储

介绍

EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)是 Arduino 微控制器中的一种非易失性存储器。与 RAM 不同,EEPROM 在断电后仍能保留数据。这使得它非常适合存储需要在设备重启后保留的配置数据、校准值或其他重要信息。

在 Arduino 中,EEPROM 的大小有限(例如,ATmega328P 微控制器有 1KB 的 EEPROM),因此需要谨慎使用。本文将介绍如何在 Arduino 中使用 EEPROM 存储和读取数据。

EEPROM 的基本操作

Arduino IDE 提供了一个内置的 EEPROM 库,用于简化 EEPROM 的读写操作。以下是 EEPROM 的基本操作:

  1. 写入数据:将数据写入 EEPROM 的指定地址。
  2. 读取数据:从 EEPROM 的指定地址读取数据。

写入数据

使用 EEPROM.write(address, value) 函数可以将一个字节(8 位)的数据写入 EEPROM 的指定地址。address 是 EEPROM 的地址(0 到 EEPROM 大小减 1),value 是要写入的数据(0 到 255)。

cpp
#include <EEPROM.h>

void setup() {
// 将值 123 写入地址 0
EEPROM.write(0, 123);
}

void loop() {
// 空循环
}

读取数据

使用 EEPROM.read(address) 函数可以从 EEPROM 的指定地址读取一个字节的数据。

cpp
#include <EEPROM.h>

void setup() {
Serial.begin(9600);

// 从地址 0 读取数据
int value = EEPROM.read(0);

// 打印读取的值
Serial.print("读取的值: ");
Serial.println(value);
}

void loop() {
// 空循环
}
备注

注意:EEPROM 的写入次数有限(通常为 100,000 次),因此应避免频繁写入。

存储多字节数据

有时需要存储大于一个字节的数据(例如整数、浮点数或字符串)。Arduino 的 EEPROM 库提供了 EEPROM.put()EEPROM.get() 函数来处理多字节数据。

存储整数

cpp
#include <EEPROM.h>

void setup() {
int value = 12345;

// 将整数存储到地址 0
EEPROM.put(0, value);
}

void loop() {
// 空循环
}

读取整数

cpp
#include <EEPROM.h>

void setup() {
Serial.begin(9600);

int value;

// 从地址 0 读取整数
EEPROM.get(0, value);

// 打印读取的值
Serial.print("读取的整数: ");
Serial.println(value);
}

void loop() {
// 空循环
}
提示

提示EEPROM.put()EEPROM.get() 可以用于存储和读取任何数据类型,包括结构体。

实际应用场景

存储设备配置

假设你正在开发一个需要存储用户配置的设备(例如 LED 的亮度值)。你可以使用 EEPROM 来存储这些配置,以便在设备重启后恢复。

cpp
#include <EEPROM.h>

struct Config {
int brightness;
int mode;
};

void setup() {
Serial.begin(9600);

// 读取配置
Config config;
EEPROM.get(0, config);

// 打印配置
Serial.print("亮度: ");
Serial.println(config.brightness);
Serial.print("模式: ");
Serial.println(config.mode);
}

void loop() {
// 空循环
}

存储传感器校准值

如果你正在使用传感器,可能需要存储校准值。这些值可以在设备启动时从 EEPROM 中读取,而不需要重新校准。

cpp
#include <EEPROM.h>

void setup() {
Serial.begin(9600);

// 读取校准值
float calibrationValue;
EEPROM.get(0, calibrationValue);

// 打印校准值
Serial.print("校准值: ");
Serial.println(calibrationValue);
}

void loop() {
// 空循环
}

总结

EEPROM 是 Arduino 中非常有用的非易失性存储器,适合存储需要在设备重启后保留的数据。通过 EEPROM 库,你可以轻松地读写数据,甚至可以存储复杂的数据类型。

警告

注意:EEPROM 的写入次数有限,因此应避免频繁写入。如果需要频繁写入数据,请考虑使用外部存储器(如 SD 卡)。

附加资源与练习

  1. 练习:尝试使用 EEPROM 存储一个字符串,并在设备重启后读取并打印该字符串。
  2. 进一步学习:了解如何使用外部存储器(如 SPI Flash 或 SD 卡)来扩展 Arduino 的存储能力。
  3. 参考文档Arduino EEPROM 库文档

通过本文的学习,你应该能够在 Arduino 项目中有效地使用 EEPROM 存储数据。继续探索和实践,你将掌握更多高级技巧!