ESP32-S3 控制 RTC实时时钟
ESP32-S3 控制 RTC 实时时钟实验
在很多物联网项目中,我们需要用到**实时时钟(RTC,Real Time Clock)**来精确记录时间,例如环境监测、数据记录、定时控制等场景。
ESP32-S3 本身就集成了 RTC 外设,可以借助 ESP32Time 库方便地调用和管理时间。
本文将介绍如何在 ESP32-S3 上进行 RTC 实时时钟实验。
一、实验名称
RTC 实时时钟实验
二、接线说明
本实验无需外接模块,直接使用 ESP32-S3 的内部 RTC 功能即可。
(如果需要掉电后继续保持时间,可以扩展外部 RTC 模块如 DS1307/DS3231。)
三、实验现象
程序下载成功后,软件串口控制台会每隔 1 秒输出一次 RTC 时间,包括年月日、时分秒、星期。
通过调整 rtc.setTime()
,可以在实验开始时设置一个初始时间。
四、注意事项
- 打开 Arduino IDE → 项目 → 导入库 → 管理库,搜索
ESP32Time
并安装。 - ESP32 内部 RTC 并不会掉电保存时间,如果断电后会恢复到初始化设置。
👉 可以结合 NTP 网络校时来实现断电自动校准,保证时间准确性。
五、核心代码
下面是完整的实验程序:
/*
* 实验名称:RTC实时时钟实验
*
* 接线说明:无需外接模块
*
* 实验现象:程序下载成功后,软件串口控制台间隔1S输出RTC实时时钟年月日时分秒星期
*
* 注意事项:需要在Arduino IDE中安装“ESP32Time”库
*/
#include "public.h"
#include <ESP32Time.h>
// 设置时区偏移,3600 = GMT+1(北京时间请用 8*3600)
ESP32Time rtc(3600);
void setup(){
Serial.begin(115200);
// 初始化时间:秒, 分, 时, 日, 月, 年
rtc.setTime(30, 24, 15, 27, 9, 2023); // 设置为 2023年9月27日 15:24:30
}
void loop(){
// 输出完整时间(星期,月份,日期,年份,时:分:秒)
Serial.println(rtc.getTime("%A, %B %d %Y %H:%M:%S"));
delay(1000); // 每 1 秒输出一次
}
六、代码讲解
-
ESP32Time rtc(3600);
初始化 RTC 对象,参数为时区偏移(秒)。
例如:8*3600
表示 GMT+8,即北京时间。 -
rtc.setTime(30, 24, 15, 27, 9, 2023);
设置初始时间,依次为:秒、分、时、日、月、年。 -
rtc.getTime("%A, %B %d %Y %H:%M:%S");
使用格式化字符串输出完整时间。
例如输出结果:Wednesday, September 27 2023 15:24:30
更多格式化占位符可以参考 C++ strftime 官方文档。
七、实验效果
串口监视器输出如下(每秒刷新一次):
Wednesday, September 27 2024 15:24:30
Wednesday, September 27 2024 15:24:31
Wednesday, September 27 2024 15:24:32
...
八、扩展思考
-
结合 NTP 校时
- ESP32-S3 可通过 WiFi 连接互联网,自动从 NTP 服务器同步时间。
- 这样即使断电,也能在开机时自动校准 RTC,保证精确。
-
应用场景
- 数据采集系统(记录数据时打时间戳)
- 定时任务(自动开关灯、环境控制)
- 低功耗设备(配合深度睡眠,RTC 依然保持运行)
总结
通过本实验,我们学习了如何在 ESP32-S3 上使用 ESP32Time
库控制 RTC,完成时间的设置与读取。
RTC 是很多物联网项目的基础功能,掌握它能让项目更贴近实际应用。
在下一步的进阶实验中,我们可以结合 NTP 网络校时,实现“联网自动同步 + 本地 RTC 保持”的完整时间管理方案。