咸鱼Micropy标准库—utime 时间函数库

咸鱼Micropy标准库—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_*() 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用:

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 电池供电方式,所以返回的秒数是从最后上电、或相对某个时间、以及特定硬件时间 (如复位)。

你可能感兴趣的:(#,micropython库)