摘要:在机智云自助开发平台开发一款智能设备有很多在线工具快速实现,若需要获取时间,依靠MCU本身自带的时钟比较麻烦,是否可以直接使用函数调用外界时间呢?机智云有什么API可以用来获取网络时间呢?
答案是有这么一个函数gizwitsGetNTP( )可以获取网络时间,我们机友用这个函数实现了水墨画定时控制系统、节点的时间同步、采集地震的波形时进行每个节点的数据同步。
[ 什么是NTP网络协议]
网络时间同步现在有2种同步协议NTP和PTP,NTP与PTP不同在于时间戳的产生位置。NTP是通过软件来记录协议相关网络包的发出和到达时刻,受操作系统影响很大(系统越忙,延时越大)。同步精度优于10ms。
什么是NTP网络协议
用于同步它所有客户端时钟的服务。NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客户端能同步时钟。
NTP时间服务器是一个简单的常用的服务器,工作中我们只要做到会用就行,能搭建起来就可以了,不用太去深入研究ntp时间服务器的原理。为什么需要NTP服务,主要原因有两个
网络上的各台计算机上的时间不同步:不同步的原因有很多,比如手动修改了操作系统的时间,比如CMOS电池重置导致的时间复位等等。
网络上的各台计算机时间不精确:我们所使用的钟表,精度有一定的误差,一般较高的精度平均每年也会达到一分钟左右的误差,虽然对日常使用基本不造成影响,但是在计算机的世界这已经会造成问题。
实际业务需求中由于两台server的时间不一致。导致漏数据。损失巨大,被user批的不行不行的。还好IT有一台 server 专门用来校时,使用机智云平台开发物联网设备时,通常使用使用gizwtisGetNTP函数来实现。什么是准确的
目前最为准确的装备是什么呢?
原子钟是目前世界上最准确的计时工具,它在20世纪50年代出现,利用原子或释放能量发射出的电磁波来计时,非常稳定,再加上一些列精密仪器的控制,可以达到2000万年才误差1秒,这个精确度基本能够实现目前所有的需求。
为什么不能直接使用格林威治时间
格林威治时间是以地球自转为基础的,而由于地球自转本身就不规则,而且在缓慢加速。因为格林威治时间计时的基础都存在偏差,所以格林威治时间已经不再作为标准时间使用。
什么是新的标准时间
缩写为UTC(Universal Time Coordinated)的世界协调时是准确的标准时间,UTC正式使用原子钟进行报时的国际标准时间。
获取的方式
而获取的方式也多种,可以通过卫星,比如GPS或者北斗。也可以直接从网络上的NTP服务器进行获取。
[ STM32F407如何通过机智云获取NTP网络时间 ]
1、什么是NTP
NTP 是网络时间协议(Network Time Protocol),他用来同步网络中各个计算机时间的协议。在机智云串口协议中,支持获取 NTP 网络同步时间的功能。
2、查找gizwitsGetNTP函数
NTP 网络时间请求 API 函数位置在 gizwits_protocol.c 文件中,如图所示:
3、代码修改
我们直接拷贝《第四步》移植协议时创建的点亮LED的代码工程,在这基础上进行修改即可。
当模组在成功接入网络后,它会返回 wifi 状态事件,我们利用 wifi 状态事件去启动 NTP网络时间的请求,获取具体事件位置在 gizwits_procuct.c 文件 gizwitsEventProcess()函数,如下图所示:
首先在 main.c文件中,定义一个 wifi_sta 变量,用来记录 wifi 连接状态,当模组连上机智云的服务器时,会返回WIFI_CON_M2M 的事件,断开时返回WIFI_DISCON_M2M,所以我们就在这两个地方添加标志位并且要引入外部变量,否则会报错,如下图所示:
连接成功后,wifi_sta变量标志就会为1,接着我们就要在userHandle 函数内数据采集逻辑(我的userHandle 函数保留在main.c内),代码如下:
验证结果如图
相关推荐:
入门教程1:如何在机智云上创建自己的第一个设备
入门教程2:机智云自动生成代码工程及原理介绍
入门教程3:如何给ESP8266烧录Gagent固件,快速接入机智云实现透传功能
入门教程4:教你STM32F407标准库移植机智云代码(控制LED灯)
机智云轻网关方案,让智能设备套件开发更便捷、成本更低
扫一扫,开启您的IoT开发之旅