37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
** 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器**

实验模块接线示意图
读取和写入板载 24C32 EEPROM 芯片,还需要安装另一个名为 uEEPROMLib 的库。
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之二:读取和写入 24C32 EEPROM
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之二:读取和写入 24C32 EEPROM
*/
#include "Arduino.h"
#include "Wire.h"
#include "uEEPROMLib.h"
// 创建 EEPROM 实例,I2C 地址为 0x57
uEEPROMLib eeprom(0x57);
void setup() {
Serial.begin(9600); // 初始化串口通信
Wire.begin(); // 初始化 I2C 通信
// 定义存储的数据
int inttmp = 32123; // 整型数据
float floattmp = 3.1416; // 浮点型数据
char chartmp = 'A'; // 单个字符
char c_string[] = "https://mc.dfrobot.com.cn"; // 长字符串
int string_length = strlen(c_string); // 计算字符串长度
Serial.println("写进存储记忆......");
// **存储整型数据**
if (!eeprom.eeprom_write(0, inttmp)) {
Serial.println("Failed to store int.");
} else {
Serial.println("int was stored correctly.");
}
// **存储浮点型数据**
if (!eeprom.eeprom_write(4, floattmp)) {
Serial.println("Failed to store float.");
} else {
Serial.println("float was stored correctly.");
}
// **存储单字符**
if (!eeprom.eeprom_write(8, chartmp)) {
Serial.println("Failed to store char.");
} else {
Serial.println("char was stored correctly.");
}
// **存储长字符串**(从地址 33 开始,未对齐 EEPROM 32 字节页)
if (!eeprom.eeprom_write(33, (byte *)c_string, string_length)) {
Serial.println("Failed to store string.");
} else {
Serial.println("string was stored correctly.");
}
Serial.println("\nReading memory...");
// **读取并打印存储数据**
Serial.print("int: ");
eeprom.eeprom_read(0, &inttmp);
Serial.println(inttmp);
Serial.print("float: ");
eeprom.eeprom_read(4, &floattmp);
Serial.println((float)floattmp);
Serial.print("char: ");
eeprom.eeprom_read(8, &chartmp);
Serial.println(chartmp);
Serial.print("string: ");
eeprom.eeprom_read(33, (byte *)c_string, string_length);
Serial.println(c_string);
Serial.println();
}
void loop() {
// EEPROM 只需在 setup() 进行读写,loop() 为空
}
代码简单解读
这段代码使用 EEPROM(电子可擦除存储器) 通过 I2C 读取和存储数据,核心逻辑如下:
-
初始化 EEPROM
✅ uEEPROMLib eeprom(0x57); → 创建 EEPROM 实例,I2C 地址为 0x57
✅ Wire.begin(); → 初始化 I2C 通信
✅ Serial.begin(9600); → 启动串口通信 -
写入数据
✅ eeprom.eeprom_write(address, data); → 将数据存入 EEPROM
✅ 存储不同类型的数据(整型、浮点数、字符、字符串)
✅ 字符串存储 → (byte *)c_string, strlen(c_string) 确保正确写入 -
读取数据
✅ eeprom.eeprom_read(address, &data); → 从 EEPROM 读取数据
✅ 按照原地址读出 int、float、char、string
✅ 格式化输出,确保数据存储正确 -
循环结构
✅ loop() 为空 → 仅在 setup() 进行读写操作
这段代码让 EEPROM 通过 I2C 存储和读取数据,并在串口输出结果。
实验串口返回情况