【雕爷学编程】MicroPython手册之内置模块 time:时间和日期处理

在这里插入图片描述

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的内置模块time是一个用于处理时间相关功能的模块,它实现了CPython模块的一个子集,但也有一些特殊的特点和限制。本文将从以下几个方面介绍time模块的主要特点、应用场景,以及需注意事项,并给出几个实际运用程序案例。

主要特点
1、time模块提供了获取当前时间和日期、测量时间间隔、和延迟执行的函数。
2、time模块使用的时间纪元(Epoch)是一个固定的起始点,用于计算从该点开始经过的秒数。不同的端口可能使用不同的时间纪元,Unix端口使用1970-01-01 00:00:00 UTC,而一些嵌入式端口使用2000-01-01 00:00:00 UTC。可以通过调用time.gmtime(0)来确定端口使用的时间纪元。
3、time模块可以将秒数转换为日期时间元组,或者反过来,使用time.gmtime()和time.localtime()函数。日期时间元组包含8个元素,分别是年、月、日、时、分、秒、星期和一年中的第几天。这些函数可以接受一个可选的秒数参数,如果没有提供,则使用来自实时时钟(RTC)的当前时间。
4、time模块可以使用time.sleep()、time.sleep_ms()和time.sleep_us()函数来延迟执行一定的秒数、毫秒数或微秒数。这些函数会阻塞当前线程,直到延迟时间结束或被中断。某些板可能接受浮点数作为参数,以实现更精确的延迟。
5、time模块还提供了一些高级函数,用于处理可能环绕的刻度值。刻度值是一个递增的计数器,表示从任意参考点开始经过的毫秒数或微秒数,当达到某个最大值后会重新从零开始。这个最大值称为TICKS_MAX,它是一个未公开的常量,但可以通过调用time.ticks_add(0, -1)来获取。刻度值可以用于测量非常短的时间间隔或实现精确的定时器。

time模块提供了以下几个函数来处理刻度值:
1、time.ticks_ms()和time.ticks_us()分别返回以毫秒或微秒为单位的刻度值。
2、time.ticks_cpu()返回以系统中尽可能高的分辨率为单位的刻度值,通常是CPU时钟,但也可能是其他高精度定时源。这个函数用于非常精细的基准测试或非常紧凑的实时循环,但并非每个端口都实现了它。
3、time.ticks_add(ticks, delta)按给定数字偏移刻度值,可以是正数也可以是负数。这个函数可以用于计算事件或任务的截止日期。
4、time.ticks_diff(ticks1, ticks2)测量两个刻度值之间的差异,作为一个可能环绕的带符号值。这个函数可以用于比较两个刻度值或计算时间间隔。

应用场景

1、time模块可以用于获取和设置系统时间和日期,例如在开机时通过网络时间协议(NTP)同步RTC,或者在用户界面中显示当前时间和日期。
2、time模块可以用于实现定时器或延时器,例如在循环中等待一定时间后执行某些操作,或者在某些条件满足后触发某些事件。
3、time模块可以用于测量代码执行的性能或效率,例如在运行前后记录刻度值并计算差异,或者在循环中使用刻度值控制执行频率。

MicroPython的内置模块time提供了与时间相关的功能,但在使用时需要注意以下几个事项:

1、时间精度:MicroPython是一种嵌入式系统的解释器,其运行在资源受限的环境中。因此,MicroPython的时间函数的精度可能会受到限制。具体的精度取决于所运行的硬件平台和MicroPython的配置。在实时性要求较高的应用中,建议使用专门的硬件或实时操作系统来处理时间相关的任务。
2、时间戳的表示:MicroPython中的时间戳是一个浮点数,表示自UNIX纪元(1970年1月1日)以来的秒数。需要注意的是,不同的硬件平台和操作系统可能对时间戳的起始点和精度有所不同。在进行时间计算或与其他系统进行时间交互时,应确保对时间戳的解释和转换是一致的。
3、延时函数的准确性:MicroPython的time模块提供了sleep()函数用于延时执行代码。但是,由于MicroPython的运行环境受到资源限制和调度机制的影响,延时函数的准确性可能会有一定的偏差。在对时间精度要求较高的应用中,建议使用专门的硬件定时器或实时操作系统提供的延时机制。
4、时区和夏令时:MicroPython的time模块默认使用本地时间。但是,MicroPython的内置时间模块没有提供与时区和夏令时相关的功能。如果需要在MicroPython中处理时区和夏令时,可能需要借助第三方库或手动实现相关功能。
5、时间格式化:MicroPython的time模块提供了strftime()函数用于格式化日期和时间。但是,需要注意的是,由于MicroPython的资源受限和内存限制,strftime()函数的格式选项可能会受到一些限制。在使用格式字符串时,应确保所选的格式是MicroPython支持的,并且不会导致内存溢出或其他问题。

总之,MicroPython的内置模块time提供了基本的时间功能,但在使用时需要注意时间精度、时间戳的表示、延时函数的准确性、时区和夏令时的处理,以及格式化函数的限制。根据具体的应用需求,可能需要考虑使用外部硬件或库来提供更高精度的时间功能和处理复杂的时间相关任务。实际运用程序案例有:

案例一:使用NTP同步RTC并显示当前时间和日期


                
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值