ESP8266-Arduino编程实例-DS3231实时时钟(RTC)驱动
DS3231实时时钟(RTC)驱动
1、DS3231介绍
DS3231 是一款低成本、极其精确的 I2C 实时时钟 (RTC),具有集成的温度补偿晶体振荡器 (TCXO) 和晶体。
该设备包含电池输入,并在设备的主电源中断时保持准确的计时。
DS3231具有如下特性:
- 高精度 RTC 全面管理所有计时功能
- 实时时钟计数秒、分、小时、月日期、月、星期几和年,闰年补偿有效至 2100
- 0°C 至 +40°C 的精度为 ±2ppm
- -40°C 至 +85°C 的精度为 ±3.5ppm
- 数字温度传感器输出:±3°C 精度
- 两个时间警报
- 可编程方波输出信号
- 简单的串行接口连接到大多数微控制器
- 快速 (400kHz) I2C 接口
- 用于连续计时的备用电池输入
- 低功耗操作可延长电池备用运行时间
- 3.3V 操作

2、硬件准备
- ESP8266 NodeMCU开发板一块
- DS3231RTC模块一个
- 面板板一个
- 杜邦线若干
- 数据线一条
硬件接线如下:

3、软件准备
- Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
4、代码实现
本次实例使用DS3231驱动库如下:
1)导入依赖库头文件
1 2 3 4 5 6 7 8
| #include <Wire.h> #include "RTClib.h" RTC_DS3231 rtc; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
|
2)设备初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| void setup () { // 初始化串口 Serial.begin(9600); // 初始化设备 if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } // 调整时间 if (rtc.lostPower()) { Serial.println("RTC lost power, lets set the time!"); // 使用文件编译日期和时间调整时间 rtc.adjust(DateTime(F(\_\_DATE\_\_), F(\_\_TIME\_\_))); // rtc.adjust(DateTime(2022, 05, 21, 3, 0, 0)); } }
|
3)时间数据采集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| void loop () { DateTime now = rtc.now(); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); 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(" since midnight 1/1/1970 = "); Serial.print(now.unixtime()); Serial.print("s = "); Serial.print(now.unixtime() / 86400L); Serial.println("d"); // 计算未来 7 天 30 秒后的日期 DateTime future (now + TimeSpan(7,12,30,6)); Serial.print(" now + 7d + 30s: "); Serial.print(future.year(), DEC); Serial.print('/'); Serial.print(future.month(), DEC); Serial.print('/'); Serial.print(future.day(), DEC); Serial.print(' '); Serial.print(future.hour(), DEC); Serial.print(':'); Serial.print(future.minute(), DEC); Serial.print(':'); Serial.print(future.second(), DEC); Serial.println(); Serial.println(); delay(3000); }
|
文章来源: https://iotsmart.blog.csdn.net/article/details/126398864
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!