RTC及網路校時

7697、ESP32及ESP8266都有內建RTC,但是BlocklyDuino裡的積木只適用7697,花了一些時間把ESP32及ESP8266的RTC積木也做起來,可以由NTP伺服器進行網路校正時間,最後也順便把OLED顯示RTC時鐘的功能完成了!

ESP32及ESP8266的「RTC網路校時」積木,請點選「吉哥積木」→「ESP32」→「RTC網路校時」,便看得到三個積木:

  1. 「由NTP伺服器校正時間」積木是用來得到NTP伺服器的時間,並校正到RTC裡,讓板子上的RTC有正確的時間。通常這個積木是放在「初始化(setup)」區塊裡,只要做一次,正確時間便會設定到RTC裡,不需要放在重複執行中,因為頻繁的由NTP校正時間也是耗時且佔用網路頻寬,沒有效能。預設的NTP伺服器是time.stdtime.gov.tw,時區的話,台灣是UTC+8,所以若是沒有特殊需求,UTC+8的選單便不需要更改。

  2. 「由RTC取得時間字串」積木則是將RTC裡的時間取出成為字串,字串的格式為「YYYY-MM-DDThh:mm:ss」,例如:2021-3-28T09:48:36。

  3. 「由RTC取得數字」,則可以從RTC將年、月、日、時、分、秒,以數字格式取出,可以方便做各種邏輯判斷,例如,如果18時0分0秒時要讓P10的紅燈亮起,這一類的事情。

BlocklyDuino本來就有針對7697的NTP校正時間及RTC的積木,如果要編寫7697的RTC及NTP校時的程式,相關的積木都在「時間」選單內。

既然可以從RTC裡有目前的即時時間,如果有OLED,讓這個即時時間轉換成時鐘顯示在OLED上也滿有趣的,於是又在OLED的功能上新增了「取得RTC時間繪製時鐘」的功能,這個功能積木放置在「吉哥積木」→「模組」→「OLED 128*64」的選單中。

ESP32及ESP8266的使用範例:

ESP32和ESP8266的使用方法一樣,只是在開發板初始化時,要選擇ESP32或是ESP8266。以下的例子,在連上WIFI之後便會去NTP伺服器取出正確時間並設定要RTC裡。接下來在重複執行階段,每一秒鐘會以文字的方式顯示時間,共十秒;接下來每一秒鐘會以時鐘的方式顯示時間,也是共十秒,每秒顯示一次。在這裡,比較要注意的是,ESP8266去NTP伺服器取時間大約要十幾秒鐘,所以,如果是使用ESP8266的人,不要以為當掉了,怎麼從NTP取時間沒有反應。

將時間轉成字串顯示

將時間轉成時鐘模式顯示

7697的使用範例: