08 - RTC实验

machine.RTC 类,作为 machine 模块下的一个重要硬件类,其主要设计目标在于对实时时钟(RTC)功能进行控制。实时时钟,无论是作为计算机体系内部或外部的硬件组件,其核心任务是提供准确无误的当前时间与日期信息。本章节将讨论 ESP32 微控制器内置的实时时钟(RTC)功能,并阐述其应用方法。最后,我们将采用串口通信的方式打印时间信息,从而构建一个基础的实时时钟应用示例。

本节课目标:

通过Python编程,实现对ESP32的内置实时时钟(RTC)功能进行控制,并通过UART串口方式,实时输出RTC的时钟信息。

本节课内容:

  1. machine.RTC类
  2. 硬件设计
  3. 软件设计
  4. 下载验证

一、machine.RTC类

Machine.RTC 是一个专为控制实时时钟(RTC)设备设计的硬件类。RTC 设备作为计算机系统内部或外部的关键组件,其运行不依赖于系统其他部分的操作,独立承担着提供当前时间和日期的核心任务。实时时钟的核心功能在于它能够以高精度输出年、月、日、时、分、秒等时间信息,这对于系统的时间同步及基于时间的各项操作至关重要。

通过利用 Machine.RTC 类,在 MicroPython 编程环境中,用户不仅能够查询和修改 RTC 设备的当前时间设置,还能够直接访问和操作 RTC 的内部寄存器,从而实现对 RTC 设备更加细致和灵活的控制。这一特性为用户在嵌入式系统开发中,对时间管理和同步需求的实现提供了强有力的支持。

下面是MicroPython库的machine.RTC类链接。

类 RTC -- 实时时钟 --- MicroPython latest 文档

1. machine.RTC类的构造对象

构造对象方法如下:

class machine.RTC( )

使用示例:rtc =RTC( )

返回值:RTC类对象

2. machine.RTC类的方法【只介绍常用的】

(1)对象初始化

方法原型如下:

RTC.init(datetime)

方法的参数描述如下:

|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 描述 |
| datetimetuple | 日期时间是以下形式的元组: (year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]) * year:年份 * month:月份,范围【1-12】 * day:日期,范围【1-31】 * wday:星期,范围【0-6】,0表示星期一 * hour:小时,范围【0-23】 * minute:分钟,范围【0-59】 * second:秒,范围【0-59】 |

(2)获取或设置 RTC 的日期和时间

方法原型如下:

RTC.datetime(datetimetuple[])

方法的参数描述如下:

|---------------|-------------------------------------------------------------------------------------------|
| 参数 | 描述 |
| datetimetuple | 在没有参数的情况下,此方法返回一个包含当前日期和时间的8元组。使用1个参数(是一个 8元组),它设置日期和时间。 8元组具有以下格式:(年、月、日、工作日、小时、分钟、秒、亚秒) |

(3)关闭RTC设备

方法原型如下:

RTC.deinit()

返回值:无

三、硬件设计

1. 例程功能

通过Python编程,实现对ESP32的内置实时时钟(RTC)功能进行控制,并通过UART串口方式,实时输出RTC的时钟信息。

2. 硬件资源

  • USART2 :GPIO16 GPIO17 连接串口工具 RX、TX引脚。
  • RTC: ESP32内部自带

3. 原理图

四、软件设计

1. 程序流程图

2. 程序

python 复制代码
from machine import UART, Pin, RTC
import time

# 实例化串口
uart = UART(2, 115200, 8, None, 1, tx=Pin(17), rx=Pin(16))

# 实例化RTC
rtc = RTC()

while True:
    # 读取当前时间
    date_time = rtc.datetime()

    # 判断时间是否设置过
    if date_time[0] != 2024:
        rtc.init((2024, 9, 12, 3, 6, 51, 0, 0))     # 设置当前时间

    # 打印当前时间
    formatted_time = '%d-%d-%d %02d:%02d:%02d' % (date_time[0], date_time[1], date_time[2], date_time[4], date_time[5], date_time[6])
    print(formatted_time)

    # 通过串口发送当前时间
    uart.write(formatted_time + '\r\n')  # 发送数据,加上换行符

    # 每秒循环一次
    time.sleep_ms(1000)

五、下载验证

通过Python编程技术,已成功实现对ESP32设备内置实时时钟(RTC)的配置功能。这一过程通过REPL接口与UART串口通信方式实时打印输出 。

相关推荐
m0_734949793 小时前
MySQL如何配置定时清理过期备份文件_find命令与保留周期策略
jvm·数据库·python
LCG元3 小时前
STM32实战:基于STM32F103的Bootloader设计与IAP在线升级
javascript·stm32·嵌入式硬件
m0_514520573 小时前
MySQL索引优化后性能没提升_通过EXPLAIN查看索引命中率
jvm·数据库·python
H Journey3 小时前
Python 国内pip install 安装缓慢
python·pip·install 加速
不怕犯错,就怕不做4 小时前
Linux-Sensor驱动移植与调试(转载)
linux·驱动开发·嵌入式硬件
Polar__Star5 小时前
如何在 AWS Lambda 中正确使用临时凭证生成 S3 预签名 URL
jvm·数据库·python
LCMICRO-133108477465 小时前
长芯微LCMDC8584完全P2P替代ADS8584,是一款16位、4通道同步采样的逐次逼近型(SAR)模数转换器(ADC)
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换器adc
STC_USB_CAN_80515 小时前
菜单学习,科学计算器使用【TFT240*320彩屏+实际键盘】@Ai8051U,ST7789
单片机·学习·51单片机
m0_743623925 小时前
React 自定义 Hook 的命名规范与调用规则详解
jvm·数据库·python
FreakStudio5 小时前
无硬件学LVGL—定时器篇:基于Web模拟器+MicroPython速通GUI开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机