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

实验模块接线示意图
库安装
为了在我们的项目中使用 DS3231 模块,我们将使用一个名为 uRTCLib 的特殊库。该库使从 RTC 读取时间数据变得超级简单。
尽管 uRTCLib 易于使用,但它也非常强大。与许多其他 RTC 库不同,它支持昼夜闹钟,并允许您控制 SQW(方波)输出。
要安装库
- 首先打开您的 Arduino IDE 程序。然后点击 库管理器 左侧边栏上的图标。
- 在搜索框中键入 “urtclib” 以筛选结果。
- 查找 Naguissa 的 uRTCLib 库。
- 单击 Install 按钮将其添加到您的 Arduino IDE。
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之一:读取日期、时间和温度
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之一:读取日期、时间和温度
*/
#include "Arduino.h"
#include "uRTCLib.h"
// 初始化 RTC 模块(I2C 地址 0x68)
uRTCLib rtc(0x68);
// 定义星期名称数组
char daysOfTheWeek[7][12] = {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
};
void setup() {
Serial.begin(9600); // 初始化串口通讯
URTCLIB_WIRE.begin(); // 初始化 I2C
// 设置 RTC 时间(仅需要设置一次,设置后可注释掉)
// 例如:2025年5月11日 12:56
rtc.set(0, 00, 6, 7, 11, 5, 25);
// rtc.set(秒, 分钟, 小时, 星期, 日期, 月份, 年份)
// 星期: 1=星期天, 7=星期六
}
void loop() {
rtc.refresh(); // 更新 RTC 数据
// 打印当前日期和时间
Serial.print("Current Date & Time: ");
Serial.print(rtc.year());
Serial.print('/');
Serial.print(rtc.month());
Serial.print('/');
Serial.print(rtc.day());
Serial.print(" (");
Serial.print(daysOfTheWeek[rtc.dayOfWeek() - 1]); // 显示星期
Serial.print(") ");
Serial.print(rtc.hour());
Serial.print(':');
Serial.print(rtc.minute());
Serial.print(':');
Serial.println(rtc.second());
// 打印温度数据
Serial.print("Temperature: ");
Serial.print(rtc.temp() / 100); // 温度除以 100 获取实际值
Serial.println("°C");
Serial.println();
delay(1000); // 每秒更新一次
}
代码简单解读
这段代码使用 RTC(实时时钟)模块 获取 当前日期、时间和温度数据,并通过 串口输出,核心逻辑如下:
-
初始化 RTC
✅ uRTCLib rtc(0x68); → 创建 RTC 对象,使用 I2C 地址 0x68
✅ URTCLIB_WIRE.begin(); → 初始化 I2C 通信
✅ rtc.set(0, 56, 12, 2, 14, 4, 25); → 设置 RTC 初始时间(只需运行一次) -
读取数据
✅ rtc.refresh(); → 从 RTC 读取最新数据
✅ rtc.year(), rtc.month(), rtc.day() → 获取年、月、日
✅ rtc.hour(), rtc.minute(), rtc.second() → 获取小时、分钟、秒
✅ daysOfTheWeek[rtc.dayOfWeek() - 1] → 从数组获取星期名称 -
打印时间与温度
✅ Serial.print() → 格式化打印日期、时间和星期
✅ Serial.print(rtc.temp() / 100); Serial.println(“°C”); → 转换并输出温度 -
采集间隔
✅ delay(1000); → 每秒更新一次数据
这段代码让 RTC 模块不断采集时间和温度,并在串口监视器显示。
实验串口返回情况
实验场景图