该模块实现了相应CPython模块的子集,如下所述。有关更多信息,请参阅原始CPython文档: time.

utime模块提供获取当前时间和日期,测量时间间隔和延迟的功能。

时间纪元: Unix移植版本使用标准为1970-01-01 00:00:00 UTC的POSIX系统时代。但是,嵌入式移植版本使用的是2000-01-01 00:00:00 UTC的纪元。

维护实际日历日期/时间: 这需要实时时钟(RTC)。在具有底层OS(包括一些RTOS)的系统上,RTC可能是隐含的。设置和维护实际日历时间是OS / RTOS的责任,并且在MicroPython之外完成,它只使用OS API来查询日期/时间。在裸机移植上,系统时间依赖于machine.RTC()对象。可以使用machine.RTC()。datetime(tuple)函数设置当前日历时间,并通过以下方式维护:

通过备用电池(可能是特定电路板的附加可选组件)。

使用联网时间协议(需要由移植/用户设置)。

每次上电时由用户手动设置(许多电路板在硬复位时保持RTC时间,但有些可能需要在这种情况下再次设置)。

如果未使用系统/ MicroPython RTC维护实际日历时间,则低于此要求参考当前绝对时间的函数可能与预期不符。

函数

utime.localtime([secs])

将自纪元(见上文)以秒为单位的时间转换为8元组,其中包含:(年,月,日,小时,分钟,秒,工作日,晚期)如果未提供秒数或无,则为当前时间来自RTC使用。

年份包括世纪(例如2014年)。

月是1-12

mday是1-31

小时是0-23

分钟是0-59

秒是0-59

周一至周日的工作日为0-6

yearday是1-366

utime.mktime()

这是本地时间的反函数。它的参数是一个完整的8元组,表示按当地时间表示的时间。它返回一个整数,它是自2000年1月1日以来的秒数。

utime.sleep(seconds)

睡眠给定的秒数。有些电路板可能会接受秒作为浮点数来休眠几秒钟。请注意,其他板可能不接受浮点参数,因为与它们的兼容性使用 sleep_ms() 和 sleep_us() 函数。

utime.sleep_ms(ms)

给定毫秒数的延迟应为正或0。

utime.sleep_us(us)

给定微秒数的延迟应为正或0。

utime.ticks_ms()

返回一个带有任意参考点的递增毫秒计数器,它在某个值之后回绕。

环绕值未明确公开,但我们将其称为TICKS_MAX以简化讨论。值的周期为TICKS_PERIOD = TICKS_MAX + 1. TICKS_PERIOD保证为2的幂,但在不同硬件的移植之间可能不同。相同的句点值用于所有ticks_ms(),ticks_us(),ticks_cpu()函数(为简单起见)。因此,这些函数将返回范围[0 .. TICKS_MAX]中的值,包括总TICKS_PERIOD值。请注意,仅使用非负值。在大多数情况下,您应该将这些函数返回的值视为不透明。可用的唯一操作是ticks_diff()和ticks_add()函数,如下所述。

注意:直接对这些值执行标准数学运算(+, - )或关系运算符(,> =)将导致无效结果。执行数学运算然后将其结果作为参数传递给ticks_diff()或ticks_add()也将导致后者函数的无效结果。

utime.ticks_us()

就像上面的'ticks_ms()`一样,但是在几微秒内。

utime.ticks_cpu()

类似于ticks_ms()和ticks_us(),但系统中的分辨率最高。这通常是CPU时钟,这就是函数以这种方式命名的原因。但它不必是CPU时钟,而是可以使用系统中可用的一些其他定时源(例如,高分辨率定时器)。在'utime`模块级别没有指定此函数的确切时间单位(分辨率),但特定硬件的文档可能提供更具体的信息。此功能用于非常精细的基准测试或非常紧凑的实时循环。避免在便携式代码中使用它。

utime.ticks_add(ticks, delta)

偏移值按给定数字计算,可以是正数也可以是负数。给定一个ticks值,该函数允许在tick值的模块算术定义之后或之后计算ticks值delta ticks(参见上面的ticks_ms())。 ticks参数必须是调用ticks_ms(),ticks_us()或ticks_cpu()函数(或从之前调用ticks_add())的直接结果。但是,delta可以是任意整数或数字表达式。 ticks_add()对于计算事件/任务的截止日期非常有用。 (注意:你必须使用ticks_diff()函数来处理截止日期。)

例子:

# Find out what ticks value there was 100ms ago

print(ticks_add(time.ticks_ms(), -100))

# Calculate deadline for operation and test for it

deadline = ticks_add(time.ticks_ms(), 200)

while ticks_diff(deadline, time.ticks_ms()) > 0:

do_a_little_of_something()

# Find out TICKS_MAX used by this port

print(ticks_add(0, -1))

utime.ticks_diff(ticks1, ticks2)

测量从ticks_ms(),ticks_us()或ticks_cpu()函数返回的值之间的差异,作为可以回绕的有符号值。

参数顺序与减法运算符相同,ticks_diff(ticks1,ticks2)与ticks1 - ticks2具有相同的含义。但是,ticks_ms()等函数返回的值可能会回绕,因此直接使用减法会产生不正确的结果。这就是为什么需要ticks_diff(),它实现模块化(或更具体地说,环)算术,即使对于环绕值也能产生正确的结果(只要它们之间不太远,见下文)。该函数返回范围为[-TICKS_PERIOD / 2 .. TICKS_PERIOD / 2-1]的有符号值(这是二进制补码有符号二进制整数的典型范围定义)。如果结果是否定的,则意味着ticks1在时间上早于ticks2。否则,这意味着ticks1发生在ticks2之后。如果ticks1和ticks2彼此分开不超过TICKS_PERIOD / 2-1滴答,则仅保留**。如果不成立,将返回不正确的结果。具体来说,如果两个刻度值相隔TICKS_PERIOD / 2-1刻度,则该值将由该函数返回。但是,如果实时滴答的TICKS_PERIOD / 2已在它们之间传递,则该函数将返回-TICKS_PERIOD / 2,即结果值将回绕到可能值的负范围。

上述限制的非正式理由:假设您被锁在一个房间内,除了标准的12档时钟外无法监控时间的流逝。然后,如果你现在看表盘,不再看13个小时(例如,如果你长时间睡觉),那么一旦你再看一遍,你可能觉得只有1个小时过去了。为了避免这个错误,请定期查看时钟。您的应用程序也应该这样做。 “太长时间睡眠”这个比喻也直接映射到应用程序行为:不要让你的应用程序运行任何单个任务太长时间。分步运行任务,并在两者之间进行计时。

ticks_diff() 旨在适应各种使用模式,其中包括:

超时轮询。在这种情况下,事件的顺序是已知的,你只会处理ticks_diff()的正面结果:

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

start = time.ticks_us()

while pin.value() == 0:

if time.ticks_diff(time.ticks_us(), start) > 500:

raise TimeoutError

调度事件。 在这种情况下,如果事件过期,则ticks_diff()结果可能为负:

# This code snippet is not optimized

now = time.ticks_ms()

scheduled_time = task.scheduled_time()

if ticks_diff(scheduled_time, now) > 0:

print("Too early, let's nap")

sleep_ms(ticks_diff(scheduled_time, now))

task.run()

elif ticks_diff(scheduled_time, now) == 0:

print("Right at time!")

task.run()

elif ticks_diff(scheduled_time, now) < 0:

print("Oops, running late, tell task to run faster!")

task.run(run_faster=true)

注意:不要将time()值传递给ticks_diff(),你应该对它们使用常规的数学运算。但请注意,time()可能(也会)溢出。这被称为https://en.wikipedia.org/wiki/Year_2038_problem .

utime.time()

返回自纪元以来的整数秒数,假设如上所述设置和维护基础RTC。如果未设置 RTC,则此函数返回自特定硬件移植参考时间点以来的秒数(对于没有电池供电的 RTC 的嵌入式电路板,通常自上电或复位后)。如果要开发便携式 MicroPython 应用程序,则不应依赖此函数来提供高于第二的精度。如果你需要更高的精度,使用ticks_ms()和ticks_us()函数,如果你需要日历时间,localtime()没有参数是一个更好的选择。

与CPython的区别

在 CPython 中,此函数返回自 Unix 纪元(1970-01-01 00:00 UTC)以来的秒数,作为浮点数,通常具有微秒精度。 使用 MicroPython,只有 Unix 移植版本使用相同的纪元,如果浮点精度允许,则返回亚秒精度。 嵌入式硬件通常没有浮点精度来表示长时间范围和亚秒精度,因此它们使用具有第二精度的整数值。 某些嵌入式硬件也缺少电池供电的 RTC,因此返回自上次上电或其他相对硬件特定点(例如复位)以来的秒数。

time.ticks()

等同于 time.ticks_ms

time.clock()

获取 clock 对象

返回值

clock 对象

clock 对象

由 time.clock() 返回

clock.tick()

记录开始时间(ms), 与clock.fps()搭配使用可以计算fps

返回值

None

clock.fps()

根据上一个调用clock.tick()到现在的时间计算出帧率(fps)

比如:

import sensor

import time

clock = time.clock()

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

while True:

clock.tick()

sensor.snapshot()

print("fps = ",clock.fps())

clock.reset()

重置所有标记

clock.avg()

根据上一个调用clock.tick()到现在的时间计算出每帧消耗的时间

micropython做中继_utime – 时间相关的功能相关推荐

  1. micropython做中继_MicroPython网络服务器使用ESP32/ESP8266远程控制家用交流电器

    背景知识视频教程 将继电器与ESP32或ESP8266配合使用是一种远程控制AC家用电器的好方法.本教程介绍了如何使用MicroPython固件通过ESP32或ESP8266控制继电器模块. 我们将研 ...

  2. micropython做中继_超声波测距仪编程_Micropython教程之TPYBoard DIY超声波测距仪实例演示...

    1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法. 2. 进一步学习编制数据输出程序的设计方法. 3. 学习超声波模块的测距原理. 4. 学习LCD5110接线方法 5. 学习TPYb ...

  3. MicroPython做嵌入式开发的优缺点

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 Python的火热程度相信大家都看到了,自然,MCU和嵌入式也紧跟"潮流",随之 ...

  4. 使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能

    使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能 1使用webpack下载vue模板 vue init webpack aaa(aaa为项目名称) cd到aaa ...

  5. BI平台能做什么,有哪些功能呢?

    ​相信接触过数据分析工作的小伙伴们,对BI平台并不陌生.BI(Business Intelligence),也就是商业智能,它是一个完整的解决方案,可以有效地整合企业中的现有数据.BI通常被理解为将企 ...

  6. 一次使用wxcharts做微信小程序图表功能采到的坑

    谈一次使用wxcharts做微信小程序图表功能采到的坑 铃木千夏-前端小白 第一次写博客,记录自己采到的坑,希望下次再遇到类似的不会这么头疼,也希望你们能少走些弯路. wxcharts柱状图 从网上找 ...

  7. 用PHP做一个简单的搜索功能

    用PHP做一个简单的搜索功能 说到搜索,大家最熟悉不过了.当你想知道某个东西,某件事,你也许会刻意搜索它,而搜索作为一项基本的用户必备工具,它有着庞大的知识库,通过各种联动技术,当你输入想要了解的关键 ...

  8. uniappp小程序做一个红包雨的功能

    uniappp小程序做一个红包雨的功能 需求: 首先,您需要在页面中添加一个画布元素,用于绘制红包雨效果. 在页面加载完成后,使用JavaScript中的setInterval()方法定时执行绘制红包 ...

  9. php 影院选座js代码,在react中用canvas做一个电影院选座功能

    又到了每日分享了.这次分享的是:在react中用canvas做一个电影院选座功能. 前言:项目采用create-react-app脚手架,就是做了一个效果所以只有一个页面但是也用了react-rout ...

最新文章

  1. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制
  2. Python notes
  3. 集合objectjava_collection
  4. matlab 倒数第二个位置_Matlab中在数据分析的使用
  5. viper4android 生效,另一种让V4a音效在Poweramp上生效的方法
  6. 【图像处理-直方图】
  7. nginx优化--突破十万并发
  8. oracle vm virtualbox安装xp,如何在VirtualBox虚拟机中安装XP系统?
  9. FPGA入门 Xilinx暑期学校学习Day4
  10. 2019新鲜出炉的BAT通关面试题 Java岗
  11. 这几个垂直类小众导航网站,你绝对不会想错过
  12. windows bat批处理基础命令学习教程(转载)
  13. 40岁开始学习Android开发的我成了一名技术主管
  14. 谈谈基于模型的设计(Model-Based Design)
  15. GIT 命令学习:获取与创建项目
  16. 微信小程序之分享海报生成
  17. android新闻客户端答辩,头条客户端 Android
  18. 鸿蒙系统会应用在平板电脑,华为将发布搭载鸿蒙系统的平板电脑-芯查查
  19. MFC - LNK2001 “无法解析的外部符号”的几种情况及解决办法
  20. 电子体温计方案温度传感器的解析

热门文章

  1. DM数据库管理模式对象空间、表、索引、触发器、视图、序列列、同义词等。
  2. 线性筛法求phi函数表
  3. shell通过邮件服务器发送邮件,shell脚本通过sendEmail25端口发送邮件
  4. NLP 结巴分词词性映射关系
  5. linux删除del后缀文件,linux删除命令_linux下如何删除一个文件?
  6. 小试Plone-5.1.6下用collective.celery支持collective.documentviewer 5.0.4的异步转换,效果仍不理想
  7. python win32api
  8. python win32.com对excel的基本操作
  9. 基于深度学习的细粒度分类研究及应用
  10. 专业版MDB-RS232适配器在自动售货机中的作用