Air724UG低功耗模组软件的NTP示例!

电子说

1.3w人已加入

描述

本篇文章说的是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 也是实时时间了吗?

是的,只要时间同步成功了,就是实时时间了。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分