?
一、NTP通信概述
很多場景中,由于業務需要,模塊需要保持正確的系統時鐘,才能正常工作。但是模塊上電后的初試時間戳是946713600(即2000/01/01,16:00:00),所以同步時鐘成為了開發者要解決的重要問題。對于Cat.1模塊,移動/電信卡,通常會下發基站時間,那么sntp就不是必要的,而聯通卡通常不會下發,就需要sntp了。
NTP(NetworkTimeProtocol,網絡時間協議) 是用于同步系統時間的協議。它通過網絡連接多個設備,確保這些設備的系統時鐘保持一致。
本例程展示了如何使用SNTP授時服務來同步時間。
NTP和簡化版的SNTP主要區別在于精確度和復雜性。
SNTP(SimpleNetworkTimeProtocol)通常用于不需要高精度同步的設備,如嵌入式系統。而NTP則用于要求較高時間精度的場景。
二、演示功能概述
本demo將連接NTP服務器進行時間同步。
三、準備硬件環境
3.1 Air780E開發板一套
3.2 PC電腦
WINDOWS系統。
3.3 SIM卡
請準備一張可正常上網的SIM卡,該卡可以是物聯網卡或您的個人手機卡。
特別提醒:請確保SIM卡未欠費且網絡功能正常,以便順利進行后續操作。
3.4 數據通信線
typec接口USB數據線即可。
四、軟件環境
4.1 下載調試工具
使用說明參考Luatools下載和詳細使用
五、獲取NTP授時軟硬件資料
5.1 文檔和工具
- 780E模塊使用固件:SDK&Demo-合宙文檔中心,本demo使用的固件版本是:
LuatOS-SoC_V1112_EC618_FULL.soc - 本教程使用的demo:
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/sntp - 將固件和腳本燒錄到模塊中:Luatools下載和使用教程-合宙模組資料中心
- 源碼和固件已打包,如下所示:右鍵點我,另存為,下載完整壓縮文件包
5.2 demo使用api介紹
socket.sntp(sntp_server)
作用:sntp時間同步
傳入值類型 | 解釋 |
---|---|
string/table | sntp服務器地址選填 |
int | 適配器序號,只能是socket.ETH0(外置以太網),socket.LWIP_ETH(內置以太網),socket.LWIP_STA(內置WIFI的STA),socket.LWIP_AP(內置WIFI的AP),socket.LWIP_GP(內置蜂窩網絡的GPRS),socket.USB(外置USB網卡), 如果不填,優先選擇soc平臺自帶能上外網的適配器,若仍然沒有,選擇最后一個注冊的適配器。 |
返回值
無
os.time(mytime)
作用:時間戳函數
傳入值類型 | 解釋 |
---|---|
table | 日期時間的table |
return | 時間戳 |
返回值
無
os.date(fmt,time)
作用:日期函數
參數
傳入值類型 | 解釋 |
---|---|
string | 格式化字符串,可以是nil |
table | 日期時間的table |
返回值
返回值類型 | 解釋 |
---|---|
table/string | 根據fmt的不同,返回值不同 |
json.encode(obj,t)
作用:將對象序列化為json字符串
參數
傳入值類型 | 解釋 |
---|---|
obj | 需要序列化的對象 |
string | 浮點數精度和模式,這項不存在的時候,為默認值”7f”,數字只支持”0~14”,模式只支持”f/g” |
返回值
返回值類型 | 解釋 |
---|---|
string | 序列化后的json字符串,失敗的話返回nil |
string | 序列化失敗的報錯信息 |
json.decode(str)
作用:將字符串反序列化為對象
參數
傳入值類型 | 解釋 |
---|---|
string | 需要反序列化的json字符串 |
返回值
返回值類型 | 解釋 |
---|---|
obj | 反序列化后的對象(通常是table),失敗的話返回nil |
result | 成功返回1,否則返回0 |
err | 反序列化失敗的報錯信息 |
六、代碼示例
6.1 使用ntp服務器,同步時間
6.1.1 demo介紹
?
6.1.2 將程序下載到開發板
參考:將固件和腳本燒錄到模塊中:Luatools下載和使用教程-合宙模組資料中心
七、功能驗證
?
八、總結
本demo介紹了如何使用ntp服務器同步時間。
九、擴展
常見問題
9.1 多長時間ntp同步一次?
正常使用,一小時一次,已經足夠了,甚至1天一次也可以。
9.2 ntp同步時間后,這個clock精度高嗎,需要多久同步一次?
并不能保證任何時間任何地點都能百分百同步到正確的時間。所以,如果用戶項目中的業務邏輯嚴格依賴于時間同步功能則不要使用本功能模塊,建議使用自己的應用服務器來同步時間。
9.3 這個函數socket.sntp()后每次在程序中調用os.time也是實時時間了嗎?
是的,只要時間同步成功了,就是實時時間了。
?審核編輯 黃宇
-
物聯網
+關注
關注
2909文章
44661瀏覽量
373515 -
NTP
+關注
關注
1文章
170瀏覽量
13903 -
sntp
+關注
關注
0文章
5瀏覽量
3704
發布評論請先 登錄
相關推薦
評論