37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
** 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器**
实验模块接线示意图
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之十二:在 LCD 上显示 RTC 模块的时间和日期
实验模块接线示意图
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之十二:在 LCD 上显示 RTC 模块的时间和日期
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之十二:在 LCD 上显示 RTC 模块的时间和日期
*/
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x27 // LCD I2C 地址
#define LCD_COLUMNS 16 // LCD 显示屏的列数
#define LCD_ROWS 2 // LCD 显示屏的行数
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS); // 创建 LCD 显示对象
RTC_DS3231 rtc; // 使用 Adafruit RTClib 创建 DS3231 RTC 实例
void setup() {
Serial.begin(9600); // 初始化串口通信
Wire.begin(); // 启动 I2C 通信
lcd.init(); // 初始化 LCD 显示屏
lcd.backlight(); // 开启 LCD 背光
lcd.clear(); // 清屏
// 初始化 RTC
if (!rtc.begin()) {
Serial.println("RTC 初始化失败!");
while (1); // 停止执行
}
// 如果 RTC 断电,则恢复默认时间
if (rtc.lostPower()) {
Serial.println("RTC 断电!正在设置时间...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime dt = rtc.now(); // 获取当前时间
// 显示时间
lcd.setCursor(4, 0);
lcd.print(dt.hour());
lcd.print(":");
lcd.print(dt.minute());
lcd.print(":");
lcd.print(dt.second());
// 显示日期
lcd.setCursor(3, 1);
lcd.print(dt.year());
lcd.print("-");
lcd.print(dt.month());
lcd.print("-");
lcd.print(dt.day());
// 串口输出时间
Serial.print("当前时间: ");
Serial.print(dt.year()); Serial.print("-");
Serial.print(dt.month()); Serial.print("-");
Serial.print(dt.day()); Serial.print(" ");
Serial.print(dt.hour()); Serial.print(":");
Serial.print(dt.minute()); Serial.print(":");
Serial.println(dt.second());
delay(500); // 每 500 毫秒更新一次
}
代码简单解读
这段代码使用 DS3231 实时时钟(RTC) 和 LCD 显示屏 通过 I2C 通信 显示当前时间和日期,核心逻辑如下:
-
初始化硬件
✅ Wire.begin(); → 启动 I2C 通信
✅ rtc.begin(); → 初始化 DS3231 RTC
✅ lcd.init(); → 初始化 LCD 显示屏
✅ lcd.backlight(); → 开启 LCD 背光 -
设置 RTC 时间
✅ rtc.lostPower(); → 如果 RTC 断电,则恢复默认时间
✅ rtc.adjust(DateTime(F(DATE), F(TIME))); → 自动设置 RTC 时间为编译时的系统时间 -
获取当前时间
✅ rtc.now(); → 从 RTC 获取当前时间
✅ 格式化时间为 “HH:MM:SS” 形式
✅ 格式化日期为 “YYYY-MM-DD” 形式 -
显示内容在 LCD 屏幕上
✅ 时间 → lcd.print(dt.hour()); 等格式化
✅ 日期 → lcd.print(dt.year()); 等格式化 -
采集间隔
✅ delay(500); → 每 500 毫秒更新一次时间
这段代码让 LCD 显示当前时间,并持续更新。
实验串口返回情况
实验场景图