Ameba Arduino: [RTL8195] 使用 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()