Ameba Arduino: [RTL8195] [RTL8710] 使用 NTP 更新時間

材料準備

  • Ameba x 1

範例說明

在AmebaWiFi裡面已經有個WiFiUdpNtpClient的NTP範例,但得到的時間只有時分秒,要轉換日期需要自己轉換,還要考慮閏年的情況。
這個library 幫忙處理linux-like的時間格式與轉換,請到這裡下載library: https://github.com/Ameba8195/Arduino/raw/master/libraries/Time-1.0.1.zip
安裝library的方式請參考Arduino官方網站的教學文章將zip檔的library加入Ameba: https://www.arduino.cc/en/Guide/Libraries#toc4

接著打開範例 “File” -> “Examples” -> “AmebaTime” -> “TimeNTP”
修改WiFi連線需要的ssid/password, 編譯並上傳至Ameba, 完成之後按下Reset 按鈕
1

範例程式會先傳送NTP request到NTP server, 收到回應之後, library會幫忙做時間轉換。

程式碼說明

setSyncProvider(getNtpTime);
Time library需要設定取得時間的方式,在setSyncProvider指定function pointer,這個function的回傳值需要是time_t的資料型態。time_t實際上是unsigned long的資料型態,其值為unix的時間表示方式,也就是從1970年1月1日開始經過的秒數。

在getNtpTime()裡面,做的事情跟AmebaWiFi的範例WiFiUdpNtpClient一樣,只是取得NTP時間之後,換算成1970年1月1日開始經過的秒數,並且加上時區轉換。
要得到相關的時間,可以呼叫這些function: year(), month(), day(), hour(), minute(), second()