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

本篇文章说的是Air724UG低功耗模组软件的NTP,我以整理成示例供大家快速参考。

一、简介

网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS 等等)做同步化,它可以提供高精准度的时间校正(LAN 上与标准间差小于 1 毫秒,WAN 上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP 的目的是在无序的 Internet 环境中提供精确和健壮的时间服务。

二、演示功能概述

教程教你如何使用开发板功能模块采用多个免费公共的 NTP 服务器来同步时间,但并不能保证任何时间任何地点都能百分百同步到正确的时间。所以,如果用户项目中的业务逻辑严格依赖于时间同步功能,则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间。

三、准备硬件环境

3.1 开发板准备

使用 EVB_Air724 开发板,如下图所示:

wKgZPGdRKQuAFrG3ABM9b6AqitY012.png

此核心板的详细使用说明参考:

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 会打印如下信息

点击项目管理测试选项。

wKgZO2dRKUKAFlCxAAEWnd-Ga38945.png

进入管理界面,如下图所示。

wKgZPGdRKU6AelUsAAOxUHBsQ2k790.png

点击选择文件,选择底层固件,我的文件放在 D:luatOSAir724 路径中

wKgZO2dRKVmAVfpCAACPIcE4jfM646.png

点击增加脚本或资源文件,选择之前下载的程序源码,如下图所示。

wKgZO2dRKWiAS8CIAALJhFOdOIc818.png

点击下载底层和脚本,下载完成如下图所示。

wKgZPGdRKXKAI29DAAFtZOfh5ts307.png

五、代码示例介绍

5.1 API 说明

ntp.timeSync(period, fnc, fun)

ntp 同步时间任务.

重要提醒!!!!!!

本功能模块采用多个免费公共的 NTP 服务器来同步时间,

并不能保证任何时间任何地点都能百分百同步到正确的时间。

所以,如果用户项目中的业务逻辑严格依赖于时间同步功能,

则不要使用本功能模块,建议使用自己的应用服务器来同步时间。

wKgZPGdRKYCAMuSVAAMJYk2uMdc075.png

例子

wKgZO2dRKa-AVn66AAGrRCJf59A106.png

5.2 testNtp.lua 代码

调用 ntp.timeSync()接口同步时间。ntp.timeSync()#同步一次时间

注意:本功能模块采用多个免费公共的 NTP 服务器来同步时间并不能保证任何时间任何地点都能百分百同步到正确的时间所以,如果用户项目中的业务逻辑严格依赖于时间同步功能则不要使用使用本功能模块,建议使用自己的应用服务器来同步时间

调用 misc.getClock()接口获取系统时间

wKgZO2dRKbyAFWJuAAHZ1vSl9V8143.png

wKgZPGdRKc2ABZR9AARk2a7pKLg634.png

wKgZO2dRKdqACLpZAAB0D4GWZ6g383.png

5.3 main.lua 代码

本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,等待网络连接成功,然后加载 NTP 测试模块。

六、开机调试

6.1 开发板开机

连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。

wKgZPGdRKeqAb0Q8AALEGk1tAVU140.png

6.2 NTP 调试

开机启动后,ntp.timeSync()#同步一次时间,然后每隔一秒调用 misc.getClock()接口获取系统时间。

wKgZPGdRKfiAedn7AAYgZXX7XlI488.png

七、常见问题

7.1 os.time()返回值,需不需要特别加载模块?

返回从 1970 年 1 月 1 日到指定日期的时间的秒数,无参数表示当前时间。不需要添加操作,直接可以获取。

os.date 这个 api 只支持 os.date(“*t”) 这样用,不能 os.date(‘%Y-%m-%d %H:%M:%S’) 这样用?

是的,不支持。可以按如下方式处理

wKgZO2dRKgOAJQurAAD76I_Nzw8660.png

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 也是实时时间了吗?

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

审核编辑 黄宇

推荐阅读:

隔夜外盘:美股三大指数收涨 纳指、标普创收盘新高 特斯拉股价涨超10%

券商IPO承销收入跌逾八成

A股罕见!连续地量、超4800家下跌和“国家队”出手 竟同天发生

成本可降低22% 半导体巨头拟开发3.3D先进封装技术!这些概念股具备高增长潜力

SNEC盘点|近七成展商秀出210+N 700W+组件,TOPCon独揽半壁江山

7月5日涨停复盘:东方集团4板 飞利信20CM涨停

您可以还会对下面的文章感兴趣:

暂无相关文章

使用微信扫描二维码后

点击右上角发送给好友