天天看點

實戰microPython(二)時鐘和月曆的使用

實戰microPython(2)時鐘和月曆的使用

David Zou 創客DIY樂園

    對于一名創客,自制一個個性化的時鐘或鬧鐘啥的,應該是比較常見的入門級任務了。通常我們制作時鐘或鬧鐘的時候,都需要借助專門的時鐘晶片,例如DS1314什麼的。原因是專用時鐘晶片提供比較完善的計時和月曆系統,晶片的功耗非常低,使用紐扣電池就能保證時鐘晶片在系統斷電的情況下不間斷的繼續計時數月甚至一年。現在,PyBoard的控制器晶片内部已經包含有這樣的時鐘裝置,不用再外加了,使用也超級簡單的。

  同之前一樣,時鐘裝置已經被封裝(定義)在pyb庫中了,它被稱為RTC(real time clock)。我們隻需要在使用前建立RTC實體就可以了:

import pyb

rtc = pyb.RTC();#建立RTC實體。

rtc.datetime((2018, 7, 14, 6, 23, 18, 0, 0));#用目前時間設定這個RTC

#此時RTC已經開始按照上面的初始時間開始計時,你可以等待若幹秒後執行如下語句

print(rtc.datetime());

(2018, 7, 14, 6, 23, 18, 32, 221)#此處為列印結果

   我們設定了初始時間2018-7-14  星期6   23 :18:00:00,幾秒鐘後,我們讀取時間值并列印出來,變為了2018-7-14  星期6   23 :18:32:221。

  看到了時間在無情的流逝了吧?在這裡,建立RTC時是不需要任何參數的,直接pyb.RTC()就行了,而最重要也是最常用的函數是datetime(),當datetime()函數帶有一個元組參數(可到Python資料類型去重溫什麼是元組類型)時,就是設定RTC的時間。如果沒有任何參數時,函數将傳回目前RTC的時間,也是以元組類型傳回。

  這裡的時間都是以元組類型傳遞的,這個元組有8個元素,其順序為:

(年,月,日,星期,時,分,秒,子秒)

這裡,年月日時分秒都不用解釋了,參考上面例程都能明白,星期是用1到7表示周一到周日,子秒(subseconds)是255到0的倒計數,每當減到0時,增加1秒,子秒重新從255開始遞減,正常設定時間時,将其設定為0就行了。

以上就是最常用的函數了,除此之外,還有兩個函數,其中校準函數calibration(cal)用于校準時鐘,如果發現RTC的時鐘偏快或偏慢,可使用此函數微調一下。其參數cal的值是-511到+512之間的整數。

  最後,wakeup(timeout, callback=None)和info()不太常用,就不解釋了,大家可以參看官方文檔:http://docs.micropython.org/en/latest/pyboard/library/pyb.RTC.html

  那麼,在我們得到了一個可以自己計時的時鐘後,該如何使用它制作出真正的時鐘呢?問的好,首先我們要有一個能顯示時鐘内容的顯示裝置,這個裝置可以是7段數位管,也可以是液晶屏等,後面我們會逐漸接觸到。而今天,我們隻能用列印的方式顯示時間。将RTC時間值列印出來,按照不同的應用,對時間的精度要求也不一樣,如果是正常的生活計時,基本都隻需要精确到分鐘,例如我們和别人約定時間基本上都是約定幾點幾分很少精确到秒,但對于特殊應用,比如賽跑,微波爐加熱等需要秒表計時,就需要精确到秒了。是以,我們沒有必要時時刻刻都去讀取RTC的時間值并顯示出來,這樣是很浪費控制器的資源的,我們隻需要每秒讀取一次即可。其餘時間,控制器可以去幹别的事情,比如檢測按鍵輸入等。

這裡, 我們将上面的例程修改一下,變成不斷顯示時間的狀态,既然是不斷的顯示時間,顯然又要使用循環了:

import pyb

rtc = pyb.RTC();

rtc.datetime((2018, 7, 14, 6, 23, 18, 0, 0));#用目前時間設定這個RTC

while True:

  print(rtc.datetime());

  pyb.delay(1000);#延時1秒

你将看到,每秒(重新整理)顯示一次新的時間值。

好了,今天就講到這裡。我相信大家已經打算開始制作自己的小鬧鐘了。

搜尋并關注#公#衆#号: MakerDIY-Park,擷取更多資料。

實戰microPython(二)時鐘和月曆的使用

繼續閱讀