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 的基本操作:
- 写入数据:将数据写入 EEPROM 的指定地址。
- 读取数据:从 EEPROM 的指定地址读取数据。
写入数据
使用 EEPROM.write(address, value)
函数可以将一个字节(8 位)的数据写入 EEPROM 的指定地址。address
是 EEPROM 的地址(0 到 EEPROM 大小减 1),value
是要写入的数据(0 到 255)。
#include <EEPROM.h>
void setup() {
// 将值 123 写入地址 0
EEPROM.write(0, 123);
}
void loop() {
// 空循环
}
读取数据
使用 EEPROM.read(address)
函数可以从 EEPROM 的指定地址读取一个字节的数据。
#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()
函数来处理多字节数据。
存储整数
#include <EEPROM.h>
void setup() {
int value = 12345;
// 将整数存储到地址 0
EEPROM.put(0, value);
}
void loop() {
// 空循环
}
读取整数
#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 来存储这些配置,以便在设备重启后恢复。
#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 中读取,而不需要重新校准。
#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 卡)。
附加资源与练习
- 练习:尝试使用 EEPROM 存储一个字符串,并在设备重启后读取并打印该字符串。
- 进一步学习:了解如何使用外部存储器(如 SPI Flash 或 SD 卡)来扩展 Arduino 的存储能力。
- 参考文档:Arduino EEPROM 库文档
通过本文的学习,你应该能够在 Arduino 项目中有效地使用 EEPROM 存储数据。继续探索和实践,你将掌握更多高级技巧!