【花雕学编程】Arduino动手做(245)---DS3231 高精度时钟模块之计算 从 1970 年 1 月 1 日午夜以来的时间(Unix 时间戳)

2025-05-1151
AI 快速预览详细 收起
本文介绍了如何使用DS3231高精度时钟模块计算Unix时间戳。通过IIC/I2C接口与Arduino连接,实现实时计时功能。代码示例展示了如何读取当前时间和日期,并计算从1970年1月1日午夜以来的秒数。每2秒更新一次数据,适用于需要精确时间计算的项目。

00.jpg
02.jpg
04-.jpg
04--.jpg
05.jpg

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百四十五:DS3231 高精度时钟模块  IIC/I2C接口 实时计时传感器
 项目之四:计算 从 1970 年 1 月 1 日午夜以来的时间(Unix 时间戳)

 

实验开源代码

 

 

代码
/*
  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十五:DS3231 高精度时钟模块  IIC/I2C接口 实时计时传感器
  项目之四:计算 从 1970 年 1 月 1 日午夜以来的时间(Unix 时间戳)
*/

#include <Wire.h>
#include <DS3231.h>

RTClib myRTC;

void setup () {
    Serial.begin(57600);
    Wire.begin();
    delay(500);
    Serial.println("Nano Ready!");
}

void loop () {
    
    delay(2000);
    
    DateTime now = myRTC.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" 自1970年1月1日午夜以来 = ");
    Serial.print(now.unixtime());
    Serial.print("秒 = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println(" 天");
}

代码解读

这段代码使用 DS3231 实时时钟(RTC)模块 获取 当前时间和日期,并计算 从 1970 年 1 月 1 日午夜以来的时间(Unix 时间戳),核心逻辑如下:

1. 引入库
✅ #include → 用于 I2C 通信 ✅ #include → 用于 DS3231 RTC 控制 ✅ RTClib myRTC; → 创建 RTC 对象,用于管理时间数据

2. 初始化
✅ Serial.begin(57600); → 设置串口通信速率为 57600 ✅ Wire.begin(); → 初始化 I2C 通信 ✅ Serial.println("Nano Ready!"); → 打印启动消息 ✅ delay(500); → 等待 500 毫秒,确保 RTC 启动

3. 读取并显示时间
✅ DateTime now = myRTC.now(); → 获取当前时间 ✅ Serial.print(now.year(), DEC); → 显示年份 ✅ Serial.print(now.month(), DEC); → 显示月份 ✅ Serial.print(now.day(), DEC); → 显示日期 ✅ Serial.print(now.hour(), DEC); → 显示小时 ✅ Serial.print(now.minute(), DEC); → 显示分钟 ✅ Serial.print(now.second(), DEC); → 显示秒

4. 计算 Unix 时间
✅ Serial.print(now.unixtime()); → 获取 Unix 时间戳(秒数) ✅ Serial.print(now.unixtime() / 86400L); → 计算从 1970 年 1 月 1 日以来的天数

5. 采集间隔
✅ delay(2000); → 每 2 秒更新一次数据

这段代码让 DS3231 RTC 模块不断读取时间,并计算 Unix 时间戳。


实验串口返回情况

 

08-1.jpg
08-7.jpg

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -