MicroPython标准库函数utime | MicroPython库 | 技术支持 | MicroPython


当前位置:首页>技术支持>MicroPython库>MicroPython标准库函数utime

MicroPython标准库函数utime

原创版权归山东萝卜科技有限公司所有,转载必须以链接形式注明作者和原始出处。

初始时刻: Unix 使用 POSIX 系统标准,从 1970-01-01 00:00:00 UTC开始。嵌入式程序从 2000-01-01 00:00:00 UTC 开始。

日期/时间: 需要一个实时时钟 (RTC)。在底层系统 (包括一些 RTOS 中),RTC 已经包含在其中。设置时间是通过 OS/RTOS 而不是 MicroPython 完成,查询日期/时间也需要通过系统 API。对于裸板系统时钟依赖于 machine.RTC() 对象。设置时间通过 machine.RTC().datetime(tuple) 函数,并通过下面方式维持:

  • 后备电池 (可能是选件、扩展板等)。

  • 使用网络时间协议 (需要用户设置)。

  • 每次上电时手工设置 (大部分只是在硬复位时需要设置,少部分每次复位都需要设置)。

如果实际时间不是通过系统/MicroPython RTC维持,那么下面函数结果可能不是和预期的相同。

 函数

utime.localtime([secs])

从初始时间的秒转换为元组: (年, 月, 日, 时, 分, 秒, 星期, yearday) 。如果 secs 是空或者 None,那么使用当前时间。

  • 年包括了 (如 2014).

  • 月是 1-12

  • 日是 1-31

  • 小时是 0-23

  • 分钟是 0-59

  • 秒是 0-59

  • 星期是 0-6 代表周一到周日

  • yearday 是 1-366

utime.mktime()

时间的反函数,它的参数是完整8参数的元组,返回值是从 Jan 1, 2000开始的秒数。

utime.sleep(seconds)

休眠指定的时间(秒),Seconds 可以是浮点数。注意有些版本的 MicroPython 不支持浮点数,为了兼容可以使用 sleep_ms() 和 sleep_us() 函数。

utime.sleep_ms(ms)

延时指定毫秒,参数不能小于0。

utime.sleep_us(us)

延时指定微秒,参数不能小于0。

utime.ticks_ms()

返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 ticks_diff().

utime.ticks_us()

和上面类似,只是返回微秒。

utime.ticks_cpu()

和 ticks_ms/ticks_us 类似,具有更高精度 (使用 CPU 时钟)。

utime.ticks_diff(old, new)

计算两次调用 ticks_ms(), ticks_us(), 或 ticks_cpu()之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 ticks_diff() 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 ticks_*() 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用:

# Wait for GPIO pin to be asserted, but at most 500us

start = time.ticks_us()
while pin.value() == 0:
    if time.ticks_diff(start, time.ticks_us()) > 500:
      raise TimeoutError

utime.time()

返回从开始时间的秒数(整数),假设 RTC 已经按照前面方法设置好。如果 RTC 没有设置,函数将返回参考点开始计算的秒数 (对于 RTC 没有后备电池的板子,上电或复位后的情况)。如果你开发便携版的 MicroPython 应用程序,你不要依赖函数来提供超过秒级的精度。如果需要高精度,使用 ticks_ms() 和 ticks_us() 函数。如果需要日历时间,使用不带参数的 localtime() 是更好选择。

与 CPython 的不同

    在 CPython 中,这个函数用浮点数返回从 Unix 开始时间(1970-01-01 00:00 UTC)的秒数,通常是毫秒级的精度。在 MicroPython 中,只有 Unix 版才使用相同开始时间,如果允许浮点精度,将返回亚秒精度。嵌入式硬件通常没有用浮点数表示长时间访问和亚秒精度,所以返回值是整数。一些嵌入式系统硬件不支持 RTC 电池供电方式,所以返回的秒数是从最后上电、或相对某个时间、以及特定硬件时间 (如复位)。

    示例代码

import pyb,micropython,machine,utime
rtc = pyb.RTC()
rtc.datetime((2017, 5, 1, 4, 13, 0, 0, 0))
print(utime.localtime())