c++ 如何获取网络时间_入门教程5:STM32F407如何通过机智云获取NTP网络时间

2028ac1a7e89c62723e5f685e25b8477.gif

摘要:在机智云自助开发平台开发一款智能设备有很多在线工具快速实现,若需要获取时间,依靠MCU本身自带的时钟比较麻烦,是否可以直接使用函数调用外界时间呢?机智云有什么API可以用来获取网络时间呢?

答案是有这么一个函数gizwitsGetNTP( )可以获取网络时间,我们机友用这个函数实现了水墨画定时控制系统、节点的时间同步、采集地震的波形时进行每个节点的数据同步。

6bf699e7242127155953521caf6b37c8.png

[ 什么是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服务器进行获取。

6bf699e7242127155953521caf6b37c8.png

STM32F407如何通过机智云获取NTP网络时间 ]

1、什么是NTP

NTP 是网络时间协议(Network Time Protocol),他用来同步网络中各个计算机时间的协议。在机智云串口协议中,支持获取 NTP 网络同步时间的功能。

2、查找gizwitsGetNTP函数

NTP 网络时间请求 API 函数位置在 gizwits_protocol.c 文件中,如图所示:

f4e24408bf62c09c989ee1f7d4b0e5d9.png

3、代码修改

我们直接拷贝《第四步》移植协议时创建的点亮LED的代码工程,在这基础上进行修改即可。

当模组在成功接入网络后,它会返回 wifi 状态事件,我们利用 wifi 状态事件去启动 NTP网络时间的请求,获取具体事件位置在 gizwits_procuct.c 文件 gizwitsEventProcess()函数,如下图所示:

ba2123203dd3d9da2f26d7efb4edea96.png

首先在 main.c文件中,定义一个 wifi_sta 变量,用来记录 wifi 连接状态,当模组连上机智云的服务器时,会返回WIFI_CON_M2M 的事件,断开时返回WIFI_DISCON_M2M,所以我们就在这两个地方添加标志位并且要引入外部变量,否则会报错,如下图所示:

37d826041ff08afd4f11b4c2a2d18142.png

连接成功后,wifi_sta变量标志就会为1,接着我们就要在userHandle 函数内数据采集逻辑(我的userHandle 函数保留在main.c内),代码如下:

6184a9c4f6864b5b41d81a92840a419a.png

验证结果如图

dcb0bcdbfe2ddb5333aa1e0db1fc007e.png

相关推荐:

  1. 入门教程1:如何在机智云上创建自己的第一个设备

  2. 入门教程2:机智云自动生成代码工程及原理介绍

  3. 入门教程3:如何给ESP8266烧录Gagent固件,快速接入机智云实现透传功能

  4. 入门教程4:教你STM32F407标准库移植机智云代码(控制LED灯)

  5. 机智云轻网关方案,让智能设备套件开发更便捷、成本更低

14bfd6aeaf61b2f3b141fc8e1727a282.png

扫一扫,开启您的IoT开发之旅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值