0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发-OpenHarmony轻量系统之获取当地时间

jf_46214456 ? 来源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-22 17:48 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在轻量设备里面,我们常常需要获取本地时间,用于时间显示,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。

软件设计流程

流程图

文件树状图

.
├── include  //sntp库
│   └── lwip
│       └── apps
│           ├── sntp.h
│           └── sntp_opts.h
├── src     //sntp源文件
│   ├── BUILD.gn
│   ├── sntp.c
│   ├── sntp_debug.c
│   ├── sntp_port.c
│   └── sntp_port.h
└── test    //模块主代码
    ├── BUILD.gn
    ├── sntp_test.c //模块源代码
    ├── sntp_test.h //模块接口、wifi配置
    ├── wifi_connecter.c    //wifi连接库
    └── wifi_connecter.h

使用方法

  1. 下载源码
  2. 将SNTP文件夹放入applications/sample/wifi-iot/app路径下
  3. 在applications/sample/wifi-iot/app/BUILD.gn的features内添加以下代码
"sntp/src:sntp",
"sntp/test:sntp_test",
  1. 在自己的主程序中引用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服务器有以下四个:

"cn.ntp.org.cn", // 中国 NTP 快速授时服务

"ntp.ntsc.ac.cn", // 国家授时中心 NTP 服务器

"time.pool.aliyun.com", // 阿里云公共 NTP 服务器

"cn.pool.ntp.org", // 国际 NTP 快速授时服务

在本文章中,SNTP_SERVER_DNS默认为0,因此我们使用IP进行配置SNTP服务器

#if SNTP_SERVER_DNS
static const char* g_ntpServerList[] = {
    // refers from https://dns.icoa.cn/ntp/#china
    "cn.ntp.org.cn", // 中国 NTP 快速授时服务
    "ntp.ntsc.ac.cn", // 国家授时中心 NTP 服务器
    "time.pool.aliyun.com", // 阿里云公共 NTP 服务器
    "cn.pool.ntp.org", // 国际 NTP 快速授时服务
};
#define SNTP_SERVERS ARRAY_SIZE(g_ntpServerList)

void SntpSetServernames(void)
{
    for (size_t i = 0; i < SNTP_SERVERS; i++) {
        sntp_setservername(i, g_ntpServerList[i]);
    }
}

#else

ip4_addr_t g_ntpServerList[SNTP_MAX_SERVERS];

void SntpSetServers(void)
{
    IP4_ADDR(&g_ntpServerList[0], 114, 67, 237, 130); // cn.ntp.org.cn
    IP4_ADDR(&g_ntpServerList[1], 114, 118, 7, 163);  // ntp.ntsc.ac.cn
    IP4_ADDR(&g_ntpServerList[2], 182, 92, 12, 11); // time.pool.aliyun.com
    IP4_ADDR(&g_ntpServerList[3], 193, 182, 111, 12); // cn.pool.ntp.org
#define SNTP_SERVERS 4
    for (size_t i = 0; i < SNTP_SERVERS; i++) {
        sntp_setserver(i, (ip_addr_t*)&g_ntpServerList[i]);
    }
}
#endif

void set_sntp_init(void)
{
/****************************/
#if SNTP_SERVER_DNS
    ip4_addr_t dnsServerAddr;
    IP4_ADDR(&dnsServerAddr, 192, 168, 1, 1);
    dns_setserver(0, (struct ip_addr *)&dnsServerAddr);
    dns_init();

    SntpSetServernames();
#else
    SntpSetServers();
#endif
/****************************/
}

SNTP初始化以及获取时间

sntp_setoperatingmode(SNTP_OPMODE_POLL);
    sntp_init();

    printf("sntp_enabled: %drn", sntp_enabled());
    for (size_t i = 0; i < SNTP_SERVERS; i++) {
        printf("sntp_getreachability(%d): %drn", i, sntp_getreachability(i));
    }

    osDelay(500);
    for (size_t i = 0; i < SNTP_SERVERS; i++) {
        printf("sntp_getreachability(%d): %drn", i, sntp_getreachability(i));
    }

时间显示

本样例源码仅作为一个底层模块,因此尚未有主程序。可以自行创建一个主程序进行测试获取时间,或者按照以下方式修改源码: 在sntp/test/sntp_test.c的SntpSetServers函数末尾添加以下代码(显示获取到的时间):

time_t ut;
ut = (unsigned int)((unsigned int)sntp_time_sec + ((unsigned int)2085978496L)); //转换成UTC时间(0时区)
struct tm *now_time = gmtime(&ut);
printf("%d %d %dn", now_time- >tm_hour, now_time- >tm_min, now_time- >tm_sec);

在sntp/test/sntp_test.c末尾添加以下代码(开机自启动):

SYS_RUN(set_sntp_init);

本文主要是对鸿蒙开发技术OpenHarmony中的轻量系统-获取当地时间; 更多的鸿蒙实战开发可以去主页阅读,或找我保存一下鸿蒙开发技术文档

鸿蒙开发技术分布路线图如下,高清完整版找我保存

最后结果

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    460

    文章

    52734

    浏览量

    443995
  • RTC
    RTC
    +关注

    关注

    2

    文章

    624

    浏览量

    69224
  • sntp
    +关注

    关注

    0

    文章

    6

    浏览量

    3831
  • 鸿蒙
    +关注

    关注

    60

    文章

    2656

    浏览量

    44336
  • OpenHarmony
    +关注

    关注

    30

    文章

    3865

    浏览量

    18961
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙开发必备!OpenHarmony替换Full SDK全攻略

    本文介绍开源鸿蒙OpenHarmony替换FullSDK的方法,演示设备为触觉智能PurplePiOH鸿蒙开发获取FullSD
    的头像 发表于 06-06 18:11 ?337次阅读
    开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>必备!<b class='flag-5'>OpenHarmony</b>替换Full SDK全攻略

    DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗

    作为鸿蒙应用开发者,在使用ArkUI现有能力进行弹窗开发时,总会遇到一些让人纠结的交互问题:应用内进行消息提示时,既要求消息内容支持图文混排,又要求弹窗本身不能打断用户交互(页面滑动、页面
    发表于 04-03 17:30

    鸿蒙北向开发OpenHarmony5.0 DevEco Studio开发工具安装与配置

    本文介绍OpenHarmony5.0 DevEco Studio开发工具安装与配置,鸿蒙北向开发入门必备!由触觉智能Purple Pi OH鸿蒙
    的头像 发表于 03-28 18:05 ?963次阅读
    <b class='flag-5'>鸿蒙</b>北向<b class='flag-5'>开发</b><b class='flag-5'>OpenHarmony</b>5.0 DevEco Studio<b class='flag-5'>开发</b>工具安装与配置

    【北京迅为】iTOP-RK3568开发鸿蒙OpenHarmony系统南向驱动开发实操-HDF驱动配置UART

    【北京迅为】iTOP-RK3568开发鸿蒙OpenHarmony系统南向驱动开发实操-HDF驱动配置UART
    的头像 发表于 03-25 11:02 ?802次阅读
    【北京迅为】iTOP-RK3568<b class='flag-5'>开发</b>板<b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b>南向驱动<b class='flag-5'>开发</b>实操-HDF驱动配置UART

    鸿蒙北向开发OpenHarmony4.1 DevEco Studio开发工具安装与配置

    OpenHarmony4.1 DevEco Studio开发工具安装与配置,鸿蒙北向开发入门必备!
    的头像 发表于 02-07 17:35 ?917次阅读
    <b class='flag-5'>鸿蒙</b>北向<b class='flag-5'>开发</b><b class='flag-5'>OpenHarmony</b>4.1 DevEco Studio<b class='flag-5'>开发</b>工具安装与配置

    鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用

    NEXT的原生页面高性能解决方案,从页面滑动、跳转及应用冷启动等关键环节,为开发者提供全面的支持。目前,这些解决方案均已上线OpenHarmony开源社区,可在OpenHarmony三方库中心仓进行搜索,欢迎
    发表于 01-02 18:00

    OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

    本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程,触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持开
    的头像 发表于 12-30 10:08 ?917次阅读
    <b class='flag-5'>OpenHarmony</b>源码编译后烧录镜像教程,RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    OpenHarmony怎么修改DPI密度值?触觉智能RK3566鸿蒙开发板演示

    开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处
    的头像 发表于 12-24 11:46 ?832次阅读
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?触觉智能RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    OpenHarmony默认30秒熄屏太麻烦?触觉智能鸿蒙开发板教你轻松取消

    OpenHarmony系统开机后 30 秒会自动息屏,教大家两招轻松取消自动息屏,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新Open
    的头像 发表于 12-09 11:45 ?899次阅读
    <b class='flag-5'>OpenHarmony</b>默认30秒熄屏太麻烦?触觉智能<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板教你轻松取消

    戈帅《OpenHarmony系统从入门到精通50例》开发板与传感器配置说明

    戈帅《OpenHarmony系统从入门到精通50例》开发板与传感器配置说明,请查看附件*附件:《Op
    发表于 12-03 15:46

    OpenHarmony属性信息怎么修改?触觉智能RK3566鸿蒙开发板来演示

    本文介绍开源鸿蒙OpenHarmony系统下,修改产品属性信息的方法,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新
    的头像 发表于 11-27 09:31 ?829次阅读
    <b class='flag-5'>OpenHarmony</b>属性信息怎么修改?触觉智能RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板来演示

    如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示

    本文介绍开源鸿蒙OpenHarmony系统下,开启/关闭SELinux权限的方法,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新
    的头像 发表于 11-18 19:03 ?933次阅读
    如何在开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b>开启SELinux模式?RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    开源鸿蒙OpenHarmony系统更换开机Logo方法,RK3566鸿蒙开发板备战第九届华为ICT大赛

    本文适用开源鸿蒙OpenHarmony系统更换开机Logo,本次使用了触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566,Laval官方社区主荐的一款
    的头像 发表于 09-26 09:18 ?1543次阅读
    开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b>更换开机Logo方法,RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板备战第九届华为ICT大赛

    【开源鸿蒙】使用QEMU运行OpenHarmony系统

    本文将会介绍如何从源码安装QEMU 6.2.0,以及如何使用QEMU运行OpenHarmony系统。通过本文,你将会对QEMU和OpenHarm
    的头像 发表于 09-14 08:51 ?1487次阅读
    【开源<b class='flag-5'>鸿蒙</b>】使用QEMU运行<b class='flag-5'>OpenHarmony</b><b class='flag-5'>轻</b><b class='flag-5'>量</b><b class='flag-5'>系统</b>

    瑞芯微RK3566鸿蒙开发OpenHarmony标准系统应用兼容性测试指导

    本文OpenHarmony标准系统应用兼容性测试指导,适用鸿蒙系统软件开发测试的新手入门学习课程,设备为触觉智能的瑞芯微RK3566开发板,
    的头像 发表于 09-10 11:56 ?1401次阅读
    瑞芯微RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板<b class='flag-5'>OpenHarmony</b>标准<b class='flag-5'>系统</b>应用兼容性测试指导