首页 > 其他分享 >如何使用NTP同步时间?

如何使用NTP同步时间?

时间:2024-10-26 10:42:06浏览次数:1  
标签:同步 socket sntp NTP 如何 时间 返回值 序列化

一、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数据线;

 

图片

编辑

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

Air780E产品手册:
https://docs.openluat.com/air780e/product/
<<开发板Core_Air780E使用说明V1.0.5.pdf>>,X.X.X指版本号;核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。

3.2 SIM卡

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

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

3.3 数据通信线

typec接口USB数据线即可。

3.4 PC电脑

WINDOWS系统。

四、准备软件环境

4.1 基本的下载调试工具

使用说明参考Luatools下载和详细使用:
https://docs.openluat.com/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同步时间后,这个clock精度高吗,需要多久同步一次?

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

9.2 多长时间ntp同步一次?

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

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

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

标签:同步,socket,sntp,NTP,如何,时间,返回值,序列化
From: https://www.cnblogs.com/luatos/p/18503749

相关文章

  • 【Python中的匿名函数】如何高效使用lambda表达式!
    Python中的匿名函数:如何高效使用lambda表达式Python中的匿名函数,也被称为lambda表达式,是一种简洁的函数定义方式。它们在某些场景中能够显著简化代码结构,提升可读性和代码执行效率。本文将详细讨论lambda表达式的使用方法、优缺点、适用场景以及使用技巧,帮助你更高效地应用......
  • 【探讨Python中的浅拷贝与深拷贝】如何避免共享引用带来的问题!
    探讨Python中的浅拷贝与深拷贝:如何避免共享引用带来的问题在Python编程中,拷贝(Copy)是一个常见的操作,尤其在数据处理、对象传递等情况下,经常会涉及数据的复制操作。浅拷贝和深拷贝的概念对于了解如何复制对象而不影响原始对象至关重要。本文将深入讨论这两种拷贝的原理、区别......
  • 阿里面试:秒杀的分布式事务, 是如何设计的?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 如何通俗解释Docker是什么_1
    Docker是一种开源的应用容器引擎、它允许开发者将应用及其依赖打包成一个轻量级、可移植的容器,并确保这个容器在任何Docker引擎上都能运行无误。Docker利用容器来把应用与底层系统分离,从而达到快速部署、持续集成以及在不同环境之间无缝迁移的效果。容器可以被看作是一个独立的......
  • 如何在PHP中实现自动加载
    ###如何在PHP中实现自动加载在PHP中实现自动加载可以极大地简化代码管理、提高项目的可维护性,并且优化性能。这一机制允许我们在需要时才加载PHP文件,避免了在脚本开始时就包含(require)或包含一次(require_once)所有文件的需要。自动加载的关键在于使用PHP的`spl_autoload_register......
  • 编程小白如何成为大神?大学新生的最佳入门攻略
    编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?让我们一起探讨大学新生入门编程的最佳路径,为你的大学生活和未来职业发展打下坚实基础。刚入学的大学新生若想从编......
  • Laravel开发:如何使用Laravel Excel处理Excel文件
    ​​在Laravel项目中,处理Excel文件通常是一项经常性的任务。本文将教你如何使用LaravelExcel扩展包进行Excel的导入、导出和操作:1.安装LaravelExcel扩展包;2.导入Excel数据到数据库;3.从数据库导出数据到Excel;4.操作Excel文件中的数据。首先,我们需要安装和配置LaravelExcel......
  • 如何使用Service Workers_1
    使用ServiceWorkers的步骤:1.了解ServiceWorkers;2.检查浏览器支持;3.注册ServiceWorker;4.创建ServiceWorker文件;5.安装和激活ServiceWorker;6.拦截和处理请求;7.测试ServiceWorker等。首先,要了解ServiceWorkers是什么以及它们的作用。1.了解ServiceWorkers首先,要......
  • 【移动应用开发】ContentProvider实现我的图书馆
    续上一篇博客【移动应用开发】Android持久化技术-CSDN博客目录一、具体步骤二、运行截图三、源代码1.在SharePreferences项目下新建一个DatabaseProvider2.在AndroidManifest.xml中声明权限和注册该provider3.新建一个名为ProviderTest的应用程序4.布局文件①act......
  • git reset后如何找回代码
    在使用gitreset后恢复丢失代码的步骤:一、理解gitreset的作用;二、使用reflog查找丢失提交;三、利用checkout命令恢复代码;四、确保代码安全。​在开发过程中,开发者可能因误操作或其他原因使用了gitreset命令,从而导致代码丢失,恢复丢失代码的关键在于对git内部机制的理解以及正确的......