使用 NTP 更新時間
材料準備
- Ameba x 1
範例說明
在AmebaWiFi裡面已經有個WiFiUdpNtpClient的NTP範例,但得到的時間只有時分秒,要轉換日期需要自己轉換,還要考慮閏年的情況。
這個library 幫忙處理linux-like的時間格式與轉換,請到這裡下載library: https://github.com/ambiot/amb1_arduino/raw/master/Arduino_libraries/Time-1.0.1.zip
這個library 幫忙處理linux-like的時間格式與轉換,請到這裡下載library: https://github.com/ambiot/amb1_arduino/raw/master/Arduino_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 按鈕
範例程式會先傳送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()
Realtek IoT/Wi-Fi MCU Solutions . All Rights Reserved. 使用條款