【雕爷学编程】MicroPython手册之实时时钟 RTC

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述
MicroPython的RTC是一个用于获取和设置实时时钟的类,它可以让用户在Python中访问和控制硬件上的RTC电路,并表示一个可以跟踪日期和时间的端点。

RTC类的主要特点是:

它可以通过一个标识符来创建一个RTC对象,该标识符可以是一个整数(通常指定一个硬件RTC块的编号)或其他由底层硬件支持的值。
它可以设置RTC对象的日期和时间,或者从网络上同步时间,例如使用NTP协议。
它可以读取RTC对象的日期和时间,并返回一个8元组,表示年、月、日、星期、时、分、秒、毫秒。

RTC类的应用场景是:

在MicroPython中实现与硬件设备的交互,如定时器、闹钟、日历等。
在MicroPython中实现基于硬件设备的应用,如数据记录、事件触发、时间戳等。
在MicroPython中学习和理解实时时钟的原理和方法,以及不同参数对时间精度的影响。

RTC类需注意事项是:

使用RTC类时要注意硬件设备的规格和限制,避免造成电路板故障、锁定、崩溃或硬件损坏。
使用RTC类时要注意时间结果的准确性和可靠性,避免受到温度、电源、网络等因素的影响。
使用RTC类时要注意不同端口之间的差异和兼容性问题,避免在移植代码时出现错误或异常。

以下是MicroPython的RTC几个实际运用程序案例:

案例一:使用RTC类设置和获取当前日期和时间,并打印出来。

import machine

# 创建一个RTC对象
rtc = machine.RTC()
# 设置RTC对象的日期和时间为2021年10月1日星期五10点30分
rtc.datetime((2021, 10, 1, 5, 10, 30, 0, 0))
# 获取RTC对象的日期和时间,并打印出来
dt = rtc.datetime()
print(dt)

案例二:使用RTC类从网络上同步时间,并打印出来。

import machine
import ntptime

# 创建一个RTC对象
rtc = machine.RTC()
# 从网络上同步时间,使用默认的NTP服务器
ntptime.settime()
# 获取RTC对象的日期和时间,并打印出来
dt = rtc.datetime()
print(dt)

案例三:使用RTC类创建一个闹钟,并在触发时执行一个回调函数。
以下是一个完整的程序,使用RTC类创建一个闹钟,并在触发时执行一个回调函数:

# 导入machine模块,用于创建RTC对象
import machine

# 创建一个RTC对象
rtc = machine.RTC()
# 定义一个回调函数,打印一条消息
def alarm_handler():
    print("Alarm triggered!")
# 设置RTC对象的闹钟为5秒后,并指定回调函数
rtc.alarm(rtc.ALARM0, 5000, handler=alarm_handler)
# 启动闹钟
rtc.alarm_on(rtc.ALARM0)

案例四:获取当前时间:

import machine
import utime

# 初始化RTC
rtc = machine.RTC()

# 获取当前时间
current_time = rtc.now()

# 打印当前时间
print(current_time)

在这个例子中,我们使用machine.RTC()初始化RTC对象。然后,使用rtc.now()获取当前的时间。最后,我们将当前时间打印出来。

案例五:设置RTC时间:

import machine
import utime

# 初始化RTC
rtc = machine.RTC()

# 设置RTC时间
rtc.datetime((2022, 11, 1, 0, 0, 0, 0, 0))

# 打印设置后的时间
current_time = rtc.now()
print(current_time)

在这个例子中,我们使用machine.RTC()初始化RTC对象。然后,使用rtc.datetime()设置RTC的时间,参数为一个元组,依次为年、月、日、小时、分钟、秒、星期和年的第几天。最后,我们将设置后的时间打印出来。

案例六:倒计时器:

import machine
import utime

# 初始化RTC
rtc = machine.RTC()

# 设置倒计时时间
countdown_time = 180  # 3分钟倒计时

# 开始倒计时
while countdown_time > 0:
    current_time = rtc.now()
    remaining_time = countdown_time - (current_time[5] - current_time[5])
    print("剩余时间: {}秒".format(remaining_time))
    utime.sleep(1)
    countdown_time -= 1

print("倒计时结束!")

在这个例子中,我们使用machine.RTC()初始化RTC对象。然后,设置了一个倒计时时间为3分钟(180秒)。通过循环,我们不断获取当前时间并计算剩余时间,然后每秒打印出剩余时间,并使用utime.sleep()函数暂停1秒。当倒计时时间为0时,循环结束,打印出倒计时结束的消息。

案例七:时间戳记录:使用RTC记录时间戳,用于事件记录、数据采集等应用。例如,记录某个事件的发生时间,可以使用RTC获取当前的日期和时间,并将其保存到日志文件或数据库中。

import machine
import utime

rtc = machine.RTC()  # 初始化RTC对象

# 获取当前日期和时间
current_time = rtc.datetime()

# 保存时间戳到日志文件或数据库
timestamp = "{}-{}-{} {}:{}:{}".format(
    current_time[0], current_time[1], current_time[2],
    current_time[4], current_time[5], current_time[6]
)
log_entry = "Event occurred at {}".format(timestamp)
save_to_log_file(log_entry)

案例八:定时任务执行:使用RTC设置定时任务,定时执行某些操作。例如,设置一个闹钟功能,当RTC的时间达到指定的时间时,执行某个任务或触发某个事件。

import machine
import utime

rtc = machine.RTC()  # 初始化RTC对象

# 设置闹钟时间
alarm_time = (2021, 9, 12, 10, 30, 0, 0, 0)
rtc.alarm(rtc.ALARM0, utime.mktime(alarm_time))

# 等待闹钟触发
while not rtc.alarm_triggered(rtc.ALARM0):
    pass

# 闹钟触发,执行任务或触发事件
execute_task()

案例九:电源管理:使用RTC的唤醒功能来实现低功耗的电源管理。通过将MicroPython设备设置为休眠状态,并使用RTC的唤醒功能,可以在指定的时间或外部事件发生时,自动唤醒设备并执行特定的操作。

import machine

rtc = machine.RTC()  # 初始化RTC对象

# 设置RTC唤醒时间
wake_time = (2022, 1, 1, 0, 0, 0, 0, 0)
rtc.wake_on_ext0(pin=machine.Pin(14), level=machine.Pin.IRQ_FALLING)
rtc.alarm(rtc.ALARM0, machine.RTC.ALARM_DATE, rtc.datetime())

# 进入休眠状态
machine.deepsleep()

# 当RTC时间达到唤醒时间时,设备会自动唤醒并执行以下代码
do_something()

这些是MicroPython中RTC的实际运用程序案例之一。RTC可用于时间戳记录、定时任务执行、电源管理等应用。通过使用RTC对象提供的方法和功能,可以实现对时间的获取、定时操作以及设备的休眠与唤醒等功能。具体的实现细节可能会根据使用的硬件和需求而有所不同。

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值