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)