使用NTP,该如何同步时间?一文详解!

news/2025/1/21 13:05:13/文章来源:https://www.cnblogs.com/luatos/p/18512905

一、NTP通信概述

很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作。但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为了开发者要解决的重要问题。对于Cat.1模块,移动/电信卡,通常会下发基站时间,那么sntp就不是必要的,而联通卡通常不会下发,就需要sntp了。

NTP(NetworkTimeProtocol,网络时间协议)是用于同步系统时间的协议。它通过网络连接多个设备,确保这些设备的系统时钟保持一致。

本例程展示了如何使用SNTP授时服务来同步时间。

NTP和简化版的SNTP主要区别在于精确度和复杂性。
SNTP(SimpleNetworkTimeProtocol)通常用于不需要高精度同步的设备,如嵌入式系统。而NTP则用于要求较高时间精度的场景。

 

二、演示功能概述

本demo将连接NTP服务器进行时间同步。

三、准备硬件环境

3.1 Air780E开发板一套

包括天线、USB数据线;

3.2 PC电脑

WINDOWS系统。

3.3 SIM卡

请准备一张可正常上网的SIM卡,该卡可以是物联网卡或您的个人手机卡。

特别提醒:请确保SIM卡未欠费且网络功能正常,以便顺利进行后续操作。

3.4 数据通信线

typec接口USB数据线即可。

四、软件环境

4.1 下载调试工具

使用说明参考Luatools下载和详细使用

五、获取NTP授时软硬件资料

5.1 文档和工具

  • 780E模块使用固件:SDK&Demo-合宙文档中心,本demo使用的固件版本是:

    LuatOS-SoC_V1112_EC618_FULL.soc

  • 本教程使用的demo:

    https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/sntp

  • 将固件和脚本烧录到模块中:Luatools下载和使用教程-合宙模组资料中心

  • 源码和固件已打包,如下所示:右键点我,另存为,下载完整压缩文件包

5.2 demo使用api介绍

socket.sntp(sntp_server)

作用:sntp时间同步

传入值类型 解释

string/table

sntp服务器地址选填

int

适配器序号,
只能是socket.ETH0(外置以太网),
socket.LWIP_ETH(内置以太网),
socket.LWIP_STA(内置WIFI的STA),
socket.LWIP_AP(内置WIFI的AP),
socket.LWIP_GP(内置蜂窝网络的GPRS),
socket.USB(外置USB网卡),

如果不填,优先选择soc平台自带能上外网的适配器,
若仍然没有,选择最后一个注册的适配器。

返回值

os.time(mytime)

作用:时间戳函数

参数

传入值类型 解释

table

日期时间的table

return

时间戳

返回值

os.date(fmt,time)

作用:日期函数

参数

传入值类型 解释

string

格式化字符串,可以是nil

table

日期时间的table

返回值

返回值类型 解释

table/string

根据fmt的不同,返回值不同

json.encode(obj,t)

作用:将对象序列化为json字符串

参数

传入值类型 解释

obj

需要序列化的对象

string

浮点数精度和模式,
这项不存在的时候,为默认值”7f”,
数字只支持”0~14”,模式只支持”f/g”

返回值

返回值类型 解释

string

序列化后的json字符串,
失败的话返回nil

string

序列化失败的报错信息

json.decode(str)

作用:将字符串反序列化为对象

参数

传入值类型 解释

string

需要反序列化的json字符串

返回值

返回值类型 解释

obj

反序列化后的对象(通常是table),
失败的话返回nil

result

成功返回1,否则返回0

err

反序列化失败的报错信息

六、代码示例

6.1 使用ntp服务器,同步时间

6.1.1 demo介绍

 

图片

编辑

6.1.2 将程序下载到开发板

参考:将固件和脚本烧录到模块中:Luatools下载和使用教程-合宙模组资料中心(https://docs.openluat.com/Luatools/)

七、功能验证

 

图片

编辑

八、总结

本demo介绍了如何使用ntp服务器同步时间。

九、扩展

常见问题

 

9.1 多长时间ntp同步一次?

正常使用,一小时一次,已经足够了,甚至1天一次也可以。

9.2 ntp同步时间后,这个clock精度高吗,需要多久同步一次?

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

9.3 这个函数socket.sntp()后每次在程序中调用os.time也是实时时间了吗?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823671.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

prometheus: 给grafana增加dashboard(仪表板/数据面板)

一,查看可用的dashboard(数据面板) 手动添加dashboard,需要一个个手动操作, 但事实上我们需要的数据多数都已经规范化, 所以grafana上有现成的dashboard可以导入, 数据面板的查看地址: https://grafana.com/grafana/dashboards/ 如图:二,安装一个dashboard 在左侧的data so…

spring的schedule定时任务

日常中,如果定时任务比较多,可以采用xxl-job这样第三方工具,当然,如果只有一两个,可以使用spring的schedule,方便好用,接下去就让我们去了解下 一、使用; 二、关于注解中一些属性的使用; 实现本质是基于 java 中的 ScheduledExecutorService 类的 schedule 方法。 OK,…

Vue基础-列表渲染v-for

列表渲染v-for基本使用 ◼ v-for的基本格式是 "item in 数组":数组通常是来自data或者prop,也可以是其他方式;item是我们给每项元素起的一个别名,这个别名可以自定来定义; ◼ 我们知道,在遍历一个数组的时候会经常需要拿到数组的索引:如果我们需要索引,…

为什么Linux一定需要虚拟内存

Linux之所以需要虚拟内存,是为了提供更大的地址空间和更好的内存管理。虚拟内存允许Linux将物理内存和硬盘空间结合起来,以满足运行程序的需求。同时,虚拟内存还实现了内存的保护和隔离,提高了系统的稳定性和安全性。Linux作为一个现代的操作系统也需要虚拟内存来提供更好的…

linux-账号管理与ACL权限设置

一.用户概述 1.Linux用户有以下三类,每一个用户都有一个数值,称为UID。2.Linux用户相关文件A.passwd文件介绍 (1)/etc/passwd 文件每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割。(2)每一段的解释: 账号名称 :密码 : UID : GID : 个人资料 : …

产品-权限设计

1、功能权限设计2、数据权限设计

Educational Codeforces Round 171 (Rated for Div. 2)题解记录

比赛链接:https://codeforces.com/contest/2026 A. Perpendicular Segments题目说了必定有答案,直接对角线即可 #include<iostream> #include<queue> #include<map> #include<set> #include<vector> #include<algorithm> #include<de…

BUUCTF相册

BUUCTF相册 定位函数 根据题目提示:邮箱 全局搜索mail 然后找到一个sendMailByJavaMail方法在这里定义了一个C2静态类,保存了发送邮件的一些常量 跟进c2这里发现mailform未初始化,而在下面用base64解码初始化了mailform 而这个使用了loadlibrary函数,加载了core.so文件中的…

烽火光猫不要超密不改桥接的前提下关闭 ipv6 防火墙

背景众所周知,运营商给的光猫默认都是带 ipv6 的防火墙的,会导致所有默认的入站流量都被丢弃; 网上能找到的关闭 ipv6 防火墙的方法,主要有两种:获取超级管理员权限,然后在光猫后台中关闭 ipv6 防火墙; 光猫改桥接,由路由器拨号,然后在路由器中关闭防火墙。然而,这两…

敏捷开发工具有哪些

# 敏捷开发工具有哪些 在当今快速变化的软件开发环境中,敏捷开发工具成为了推动项目高效运行的关键。这些工具主要包括:JIRA、Trello、Asana、Scrumwise和Sprintly。其中,JIRA因其强大的功能和灵活性而受到广泛的青睐,特别是在任务跟踪、问题管理以及报告方面的能力。通过使…

陈志侠第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 编写实现命令行计数统计文本程序姓名-学号 陈志侠 2022329301009码云地址 https://gitee.com/chen-zhixia666/second-assignment一、项目简介及其相关的用法 1.1项目简介 本项目旨在利用PyCharm实…

windows平台有哪些好用的屏幕取词翻译工具

windows平台好用的屏幕取词翻译工具:1. 深度翻译(DeepL);2. 划词翻译(Capture2Text);3. 谷歌翻译(Google Translate);4. 考拉翻译(有道词典);5. 欧路词典(eudic);6. 轻译(QTranslate)。深度翻译是一款强大的翻译工具,不仅支持文本翻译,还能通过屏幕取词实现…