RTC(实时时钟)用于跟踪当前的日期和时间,即使在设备断电后也能保持时间。
from machine import RTC
# 创建 RTC 对象
rtc = RTC()
# 设置时间(年, 月, 日, 星期, 时, 分, 秒, 微秒)
rtc.datetime((2024, 1, 1, 1, 12, 0, 0, 0)) # 2024年1月1日 星期一 12:00:00
# 获取当前时间
time = rtc.datetime()
print(time)
RTC 的 datetime() 方法返回一个 8 元组:
(年, 月, 日, 星期, 时, 分, 秒, 微秒)# 解析时间元组
t = rtc.datetime()
year, month, day, weekday, hour, minute, second, microsecond = t
print(f'{year}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}')
print(f'星期: {weekday}') # 0=星期一
import machine
rtc = machine.RTC()
t = rtc.datetime()
print(f'当前时间: {t[0]}-{t[1]:02d}-{t[2]:02d} {t[4]:02d}:{t[5]:02d}:{t[6]:02d}')
import machine
rtc = machine.RTC()
# 设置为 2024年3月15日 星期五 14:30:00
rtc.datetime((2024, 3, 15, 4, 14, 30, 0, 0))
print('时间已设置')
import machine
import time
rtc = machine.RTC()
# 设置 RTC 时间
rtc.datetime((2024, 1, 1, 1, 12, 0, 0, 0))
# 获取格式化时间
t = time.localtime()
print(time.strftime('%Y-%m-%d %H:%M:%S', t))
import machine
import time
rtc = machine.RTC()
# 确保时间已设置
if rtc.datetime()[0] < 2020: # 如果年份小于 2020,认为时间未设置
rtc.datetime((2024, 1, 1, 1, 12, 0, 0, 0))
print('时间已初始化')
while True:
# 获取当前时间
t = rtc.datetime()
# 格式化显示
time_str = f'{t[0]}-{t[1]:02d}-{t[2]:02d} {t[4]:02d}:{t[5]:02d}:{t[6]:02d}'
print(f'\r当前时间: {time_str}', end='')
# 每秒更新一次
time.sleep(1)
import machine
import time
rtc = machine.RTC()
# 检查是否到达指定时间
def check_time(target_hour, target_minute):
t = rtc.datetime()
return t[4] == target_hour and t[5] == target_minute
# 定时任务:每天 8:30 执行
target_hour = 8
target_minute = 30
print(f'等待到 {target_hour:02d}:{target_minute:02d}...')
while True:
if check_time(target_hour, target_minute):
print(f'时间到!执行任务...')
# 这里执行定时任务
print('任务执行完成')
# 等待到下一天
time.sleep(60) # 避免重复执行
time.sleep(30) # 每 30 秒检查一次
| 板子 | RTC 特性 |
|---|---|
| Raspberry Pi Pico | 需要外接电池,使用 RP2040 内置 RTC |
| ESP32 | 内置 RTC,支持 deep sleep 时保持时间 |
| Arduino boards | 部分型号需要外部 RTC 模块 |
| STM32 | 内置 RTC,通常需要备份电池 |