MicroPython内置模块 time:时间和日期处理
MicroPython的内置模块time是一个用于处理时间相关功能的模块,它实现了CPython模块的一个子集,但也有一些特殊的特点和限制。本文将从以下几个方面介绍time模块的主要特点、应用场景,以及需注意事项,并给出几个实际运用程序案例。
主要特点
- time模块提供了获取当前时间和日期、测量时间间隔、和延迟执行的函数。
- time模块使用的时间纪元(Epoch)是一个固定的起始点,用于计算从该点开始经过的秒数。不同的端口可能使用不同的时间纪元,Unix端口使用1970-01-01 00:00:00 UTC,而一些嵌入式端口使用2000-01-01 00:00:00 UTC。可以通过调用
time.gmtime(0)
来确定端口使用的时间纪元。 - time模块可以将秒数转换为日期时间元组,或者反过来,使用
time.gmtime()
和time.localtime()
函数。日期时间元组包含8个元素,分别是年、月、日、时、分、秒、星期和一年中的第几天。这些函数可以接受一个可选的秒数参数,如果没有提供,则使用来自实时时钟(RTC)的当前时间。 - time模块可以使用
time.sleep()
、time.sleep_ms()
和time.sleep_us()
函数来延迟执行一定的秒数、毫秒数或微秒数。这些函数会阻塞当前线程,直到延迟时间结束或被中断。某些板可能接受浮点数作为参数,以实现更精确的延迟。 - time模块还提供了一些高级函数,用于处理可能环绕的刻度值。刻度值是一个递增的计数器,表示从任意参考点开始经过的毫秒数或微秒数,当达到某个最大值后会重新从零开始。这个最大值称为
TICKS_MAX
,它是一个未公开的常量,但可以通过调用time.ticks_add(0, -1)
来获取。刻度值可以用于测量非常短的时间间隔或实现精确的定时器。
time模块提供了以下几个函数来处理刻度值:
time.ticks_ms()
和time.ticks_us()
分别返回以毫秒或微秒为单位的刻度值。time.ticks_cpu()
返回以系统中尽可能高的分辨率为单位的刻度值,通常是CPU时钟,但也可能是其他高精度定时源。这个函数用于非常精细的基准测试或非常紧凑的实时循环,但并非每个端口都实现了它。time.ticks_add(ticks, delta)
按给定数字偏移刻度值,可以是正数也可以是负数。这个函数可以用于计算事件或任务的截止日期。time.ticks_diff(ticks1, ticks2)
测量两个刻度值之间的差异,作为一个可能环绕的带符号值。这个函数可以用于比较两个刻度值或计算时间间隔。
应用场景
- time模块可以用于获取和设置系统时间和日期,例如在开机时通过网络时间协议(NTP)同步RTC,或者在用户界面中显示当前时间和日期。
- time模块可以用于实现定时器或延时器,例如在循环中等待一定时间后执行