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

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

使用NTP,该如何同步时间?一文详解!的更多相关文章

  1. 一文详解Hexo+Github小白建站

    作者:玩世不恭的Coder时间:2020-03-08说明:本文为原创文章,未经允许不可转载,转载前请联系作者 一文详解Hexo+Github小白建站 前言 GitHub是一个面向开源及私有软件项目的托 ...

  2. 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)

    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)     概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...

  3. 剑指Offer——线程同步volatile与synchronized详解

    (转)Java面试--线程同步volatile与synchronized详解 0. 前言 面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现 ...

  4. 00007 - Linux时间date命令详解

    1.命令:date 2.命令功能:date 可以用来显示或设定系统的日期与时间. 3.命令参数 -d<字符串>:显示字符串所指的日期与时间.字符串前后必须加上双引号: -s<字符串& ...

  5. 1.3w字,一文详解死锁!

    死锁(Dead Lock)指的是两个或两个以上的运算单元(进程.线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁. 1.死锁演示 死锁的形成分为两个方面,一个是使用 ...

  6. 一文详解 WebSocket 网络协议

    WebSocket 协议运行在TCP协议之上,与Http协议同属于应用层网络数据传输协议.WebSocket相比于Http协议最大的特点是:允许服务端主动向客户端推送数据(从而解决Http 1.1协议 ...

  7. 无锁的同步策略——CAS操作详解

    目录 1. 从乐观锁和悲观锁谈起 2. CAS详解 2.1 CAS指令 2.3 Java中的CAS指令 2.4 CAS结合失败重试机制进行并发控制 3. CAS操作的优势和劣势 3.1 CAS相比独占 ...

  8. 一文详解 OpenGL ES 3.x 渲染管线

    OpenGL ES 构建的三维空间,其中的三维实体由许多的三角形拼接构成.如下图左侧所示的三维实体圆锥,其由许多三角形按照一定规律拼接构成.而组成圆锥的每一个三角形,其任意一个顶点由三维空间中 x.y ...

  9. 一文详解Redis键过期策略

    摘要:Redis采用的过期策略:惰性删除+定期删除. 本文分享自华为云社区<Redis键过期策略详解>,作者:JavaEdge. 1 设置带过期时间的 key # 时间复杂度:O(1),最 ...

  10. 高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏

    1. MySQL主从同步实现方式 MySQL主从同步是基于Bin Log实现的,而Bin Log记录的是原始SQL语句. Bin Log共有三种日志格式,可以binlog_format配置参数指定. ...

随机推荐

  1. sql server create table 给字段添加注释说明

    EXEC sys.sp_addextendedproperty @name=N'MS_Description',@level1name=N'a_jcgl_data',@level2name=N'id' ...

  2. 神经网络之卷积篇:详解卷积神经网络示例(Convolutional neural network example)

    详解卷积神经网络示例 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,想做手写体数字识别.32×32×3的RGB图片中含有某个数字,比如7,想识别它是从0-9这10个数字中的哪一 ...

  3. Unity 配置 SQLite

    原Github仓库链接: https://github.com/robertohuertasm/SQLite4Unity3d?tab=readme-ov-file All you have to do ...

  4. ChatGPT介绍与使用场景

    ChatGPT是OpenAI开发的一款基于GPT-3和GPT-4的人工智能聊天机器人."GPT"代表的是"Generative Pre-trained Transform ...

  5. 日志与追踪的完美融合:OpenTelemetry MDC 实践指南

    前言 在前面两篇实战文章中: OpenTelemetry 实战:从零实现分布式链路追踪 OpenTelemetry 实战:从零实现应用指标监控 覆盖了可观测中的指标追踪和 metrics 监控,下面理 ...

  6. TypeScript 高级教程 – 把 TypeScript 当强类型语言使用 (第一篇)

    前言 原本是想照着 TypeScript 官网 handbook 写个教程的. 但提不起那个劲... 所以呢, 还是用我自己的方式写个复习和进阶笔记就好了呗. 以前写过的 TypeScript 笔记: ...

  7. 解密Prompt系列38.多Agent路由策略

    常见的多智能体框架有几类,有智能体相互沟通配合一起完成任务的例如ChatDev,CAMEL等协作模式, 还有就是一个智能体负责一类任务,通过选择最合适的智能体来完成任务的路由模式,当然还有一些多智能体 ...

  8. 【原创】解决NasCab掉进程,NasCab进程维护

    最近对象吐槽家里服务器又连不上,看不了考研视频了. 我掏出手机一试,确实连不上.家里的服务器是Win11平台,用NasCab管理的视频文件,然后通过frpc做的内网穿透. 我们在外面的图书馆,连不上无 ...

  9. 三大硬核方式揭秘:Java如何与底层硬件和工业设备轻松通信!

    大家好,我是V哥,程序员聊天真是三句不到离不开技术啊,这不前两天跟一个哥们吃饭,他是我好多年前的学员了,一直保持着联系,现在都李总了,在做工业互联网相关的项目,真是只要 Java 学得好,能干一辈子, ...

  10. RedisTemplate设置的key,redis客户端取不到

    原因:RedisTemplate 在set key时,key被序列化 解决办法1: import org.springframework.context.annotation.Bean; import ...