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(),可以在实验开始时设置一个初始时间。


四、注意事项

  1. 打开 Arduino IDE项目 → 导入库 → 管理库,搜索 ESP32Time 并安装。
  2. 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
...

八、扩展思考

  1. 结合 NTP 校时

    • ESP32-S3 可通过 WiFi 连接互联网,自动从 NTP 服务器同步时间。
    • 这样即使断电,也能在开机时自动校准 RTC,保证精确。
  2. 应用场景

    • 数据采集系统(记录数据时打时间戳)
    • 定时任务(自动开关灯、环境控制)
    • 低功耗设备(配合深度睡眠,RTC 依然保持运行)

总结

通过本实验,我们学习了如何在 ESP32-S3 上使用 ESP32Time 库控制 RTC,完成时间的设置与读取。

RTC 是很多物联网项目的基础功能,掌握它能让项目更贴近实际应用。

在下一步的进阶实验中,我们可以结合 NTP 网络校时,实现“联网自动同步 + 本地 RTC 保持”的完整时间管理方案。

posted @ 2025-08-16 14:34  jeikerxiao  阅读(198)  评论(0)    收藏  举报