
#星计划#OpenHarmony轻量系统-获取当地时间 原创 精华
前言
在轻量设备里面,我们常常需要获取本地时间,用于时间显示,log记录,帮助RTC芯片纠正时间等等。我们在之前设计了一个智慧时钟,需要使用到本地当前时间,因此本篇文章想在OpenHarmony上实现SNTP获取本地时间,并将此功能集成为一个模块,便于我们的主程序调用。
环境
OpenHarmony3.1
润和hispark_pegasus Hi3861开发板
DevEco Device Tool
串口调试助手
SNTP介绍
SNTP(Simple Network Time Protocal简单网络时间协议),用于跨广域网或局域网同步时间的协议,主要用来同步因特网中的计算机时钟,具有较高的精确度(几十毫秒)。
SNTP协议相对于NTP,优化了网络传播延时的影响,同时也能保证时间达到一定的精确度。
SNTP协议采用客户端/服务器的工作方式,可以采用单播(点对点)或者广播(一点对多点)模式操作。SNTP服务器通过接收 GPS信号或自带的原子钟作为系统的时间基准。单播模式下,SNTP客户端能够通过定期访问 SNTP服务器获得准确的时间信息,用于调整客户端自身所在系统的时间,达到同步时间的目的。
时间戳
SNTP发送回来的时间戳是NTP时间戳。
NTP时间戳和UTC时间戳的主要区别在于它们的起始时间:
NTP时间戳的起始点是1900年1月1日00:00:00。
UTC时间戳(Unix时间戳)的起始点是1970年1月1日00:00:00。
软件设计流程
流程图
文件树状图
使用方法
- 下载源码
- 将
SNTP
文件夹放入applications/sample/wifi-iot/app
路径下 - 在
applications/sample/wifi-iot/app/BUILD.gn
的features
内添加以下代码
- 在自己的主程序中引用
sntp_test.h
文件,调用set_sntp_init()
函数初始化,随后即可通过访问sntp_time_sec
变量获取当前时间(NTP时间戳0时区)
流程介绍
连接WIFI
连接的WIFI需要可以访问互联网,否则设备无法联网获取时间
WIFI当前设置为:(配置在/sntp/test/sntp_test.h
)
- SSID:M20P
- PSK:12345678
设置SNTP服务器
常用SNTP服务器有以下四个:
在本文章中,SNTP_SERVER_DNS
默认为0,因此我们使用IP进行配置SNTP服务器
SNTP初始化以及获取时间
时间显示
本样例源码仅作为一个底层模块,因此尚未有主程序。可以自行创建一个主程序进行测试获取时间,或者按照以下方式修改源码:
在sntp/test/sntp_test.c
的SntpSetServers函数末尾添加以下代码(显示获取到的时间):
在sntp/test/sntp_test.c
末尾添加以下代码(开机自启动):
测试
