本篇文章說的是Air724UG低功耗模組軟件的NTP,我以整理成示例供大家快速參考。
一、簡介
網絡時間協議,英文名稱:Network Time Protocol(NTP)是用來使計算機時間同步化的一種協議,它可以使計算機對其服務器或時鐘源(如石英鐘,GPS 等等)做同步化,它可以提供高精準度的時間校正(LAN 上與標準間差小于 1 毫秒,WAN 上幾十毫秒),且可介由加密確認的方式來防止惡毒的協議攻擊。NTP 的目的是在無序的 Internet 環境中提供精確和健壯的時間服務。
二、演示功能概述
本教程教你如何使用開發板功能模塊采用多個免費公共的 NTP 服務器來同步時間,但并不能保證任何時間任何地點都能百分百同步到正確的時間。所以,如果用戶項目中的業務邏輯嚴格依賴于時間同步功能,則不要使用使用本功能模塊,建議使用自己的應用服務器來同步時間。
三、準備硬件環境
3.1 開發板準備
使用 EVB_Air724 開發板,如下圖所示:
此核心板的詳細使用說明參考:
https://docs.openluat.com/air724ug/product/
Air724UG 產品手冊中的《EVB_Air724UG_AXX 開發板使用說明》,寫這篇文章時最新版本的使用說明為:《EVB_Air724UG_A14 開發板使用說明》;開發板使用過程中遇到任何問題,可以直接參考這份使用說明文檔。
api文檔:
https://doc.openluat.com/wiki/21?wiki_page_id=2068
3.2 數據通信線
USB 數據線一根(micro USB)。
3.3 PC 電腦
WIN7 以及以上版本的 WINDOWS 系統。
3.4 SIM 卡
中國大陸環境下,可以上網的 SIM 卡。一般來說,使用移動,電信,聯通的物聯網卡或者手機卡都行。
3.5 組裝硬件環境
USB 數據線插入 USB 口,另一端與電腦相連,撥碼開關全部撥到 ON,串口切換開關選擇 UART1,USB 供電的 4V 對應開關撥至 ON 檔,SIM 卡放到 SIM 卡槽中鎖緊,如下圖所示。
四、準備軟件環境
4.1 下載調試工具
使用說明參考:
Luatools下載和詳細使用
https://docs.openluat.com/Luatools/
4.2 源碼及固件
1) 底層 core 下載
下載底層固件,并解壓
鏈接:
https://docs.openluat.com/air724ug/luatos/firmware/
如下圖所示,紅框的是我們要使用到的
2) 本教程使用的 demo 見附件:
https://gitee.com/openLuat/LuatOS-Air724UG/tree/master/script_LuaTask/demo/ntp
4.3 下載固件和腳本到開發板中
打開 Luatools,開發板上電開機,如開機成功 Luatools 會打印如下信息。
點擊項目管理測試選項。
進入管理界面,如下圖所示。
點擊選擇文件,選擇底層固件,我的文件放在 D:luatOSAir724 路徑中
點擊增加腳本或資源文件,選擇之前下載的程序源碼,如下圖所示。
點擊下載底層和腳本,下載完成如下圖所示。
五、代碼示例介紹
5.1 API 說明
ntp.timeSync(period, fnc, fun)
ntp 同步時間任務.
重要提醒!!!!!!
本功能模塊采用多個免費公共的 NTP 服務器來同步時間,
并不能保證任何時間任何地點都能百分百同步到正確的時間。
所以,如果用戶項目中的業務邏輯嚴格依賴于時間同步功能,
則不要使用本功能模塊,建議使用自己的應用服務器來同步時間。
例子
5.2 testNtp.lua 代碼
調用 ntp.timeSync()接口同步時間。ntp.timeSync()#同步一次時間
注意:本功能模塊采用多個免費公共的 NTP 服務器來同步時間并不能保證任何時間任何地點都能百分百同步到正確的時間所以,如果用戶項目中的業務邏輯嚴格依賴于時間同步功能則不要使用使用本功能模塊,建議使用自己的應用服務器來同步時間
調用 misc.getClock()接口獲取系統時間
5.3 main.lua 代碼
本代碼為主程序腳本,系統啟動后首先會對 4G 網絡進行配置,等待網絡連接成功,然后加載 NTP 測試模塊。
六、開機調試
6.1 開發板開機
連接好硬件并下載固件后,啟動 Luatools 軟件,系統運行信息將顯示在界面中。紅框中為開發板連接到 PC 機后正常打印的信息,如下圖所示。
6.2 NTP 調試
開機啟動后,ntp.timeSync()#同步一次時間,然后每隔一秒調用 misc.getClock()接口獲取系統時間。
七、常見問題
7.1 os.time()返回值,需不需要特別加載模塊?
返回從 1970 年 1 月 1 日到指定日期的時間的秒數,無參數表示當前時間。不需要添加操作,直接可以獲取。
os.date 這個 api 只支持 os.date(“*t”) 這樣用,不能 os.date(‘%Y-%m-%d %H:%M:%S’) 這樣用?
是的,不支持。可以按如下方式處理
7.2 ntp 同步時間后,這個 clock 精度高嗎,需要多久同步一次
并不能保證任何時間任何地點都能百分百同步到正確的時間。所以,如果用戶項目中的業務邏輯嚴格依賴于時間同步功能 則不要使用本功能模塊,建議使用自己的應用服務器來同步時間。
7.3 ntp.timeSync(24,fnc)時間同步說明
立即同步一次,之后每隔 24 小時自動同步一次,每次同步結束后執行 fnc(time,result)
7.4 ntp.timeSync() 請問這個函數是異步執行的還是執行完成之后,其后的代碼才會執行?
獲取時間是通過 sys.taskInit 創建一個時間任務來同步時間的,模塊會隨機嘗試訪問每一個 NTP 服務器,嘗試 1 次,如果成功,如果不需循環同步時間,則退出當前線程,運行別的代碼,否則同通過 sys.wait(period)掛起當前任務循環同步時間,運行別的代碼,時間到之后重新運行當前任務。如果失敗,通過 sys.wait(1000)掛起當前任務 1 秒,運行別的代碼,1 秒時間到,在嘗試訪問下一個服務器,循環操作,直到同步時間成功,或服務器全部訪問結束,之后按照成功之后的動作執行。
7.5 有個這個函數后 ntp.timeSync(1) 每次在程序中調用 os.time 也是實時時間了嗎?
是的,只要時間同步成功了,就是實時時間了。
審核編輯 黃宇
-
物聯網
+關注
關注
2909文章
44557瀏覽量
372760 -
低功耗
+關注
關注
10文章
2396瀏覽量
103670 -
NTP
+關注
關注
1文章
169瀏覽量
13892
發布評論請先 登錄
相關推薦
評論