Real time clock (RTC)¶
概要¶
RTC是独立的时钟,可以跟踪日期和时间。本节内容为大家介绍RTC的使用以及时间的校准方法。
RTC的API文档¶
构造¶
RTC
类的构造不接受任何参数,你按照下面的代码来实例化一个RTC
对象
>>> from machine import RTC >>> rtc = RTC()
初始化时间¶
RTC
对象的初始化使用init()
函数, 传入参数为一个元组,包含8个数值。
rtc.init((2018, 11, 18, 6, 12, 15, 5, 607409))
这8个数值分别对应着:
年 | 月 | 日 | 星期 | 时 | 分 | 秒 | 毫秒部分 |
---|---|---|---|---|---|---|---|
2018 | 11 | 18 | 6 | 12 | 15 | 5 | 607409 |
注意: 星期一到星期天分别对应的是 [0-6] 而不是 [1-7]
注意:毫秒部分的数值其实是秒数的小数点位后的数值,并不是实际的607409毫秒,而是5.607409秒
查看当前时间¶
我们可以使用datetime()
函数来查看时间
>>> rtc.datetime() (2018, 11, 18, 6, 12, 15, 8, 142409)
同时,datetime()
函数也可以像init()
一样进行初始化
>>> rtc.datetime((2018, 11, 18, 6, 12, 15, 5, 607409)) (2018, 11, 18, 6, 12, 15, 8, 142409)
RTC的不足之处¶
精度¶
虽然RTC
能够为我们进行时间和日期的跟踪,但是在MicroPython 8266上,RTC
的精度存在一定的缺陷,每过7:45h便会有秒级别的误差溢出,所以8266上,官方建议每隔7小时进行一次时间的校准。
既然在MicroPython8266的文档中指出了RTC的缺陷,那么很可能ESP32和ESP8266可能存在同样的问题,因此建议大家也每7小时对时间进行一次校准。
掉电后无法继续计时¶
因为没有板载电池之类的措施,所以ESP32的计时器无法在掉电后进行计时工作,这就会导致你的设备在下次开机前进入初始的时间2000年1月1号。所以如果要对时间进行精准的掌控,我们需要在开机时进行时间的校准, 这一点,EMP项目可以帮助你完成。
通过网络校准时间¶
针对以上的不足之处,解决办法似乎也只剩下通过网络来校准时间了。
正如我之前所说,EMP项目是为了让事情变得简单。所以我们在emp-1zlab
包中,就加入了RTC网络时间校准的接口,你只需要简单的调用,即可完成时间的校准。
>>> from emp_utils import sync_time >>> sync_time() before sync: (2000, 1, 1, 5, 0, 3, 19, 182131) after sync: (2018, 11, 27, 1, 11, 8, 42, 175)