alios things ntp获取时间

本文介绍在AliOS Things中使用NTP服务进行时间校准的方法。设备端通过发送特定Topic给云端并携带本地时间戳,云端回复时提供接收与发送时间,设备端据此计算与云端的时间差,实现精确时间获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

alios things 中还有另一种获取时间的方法,使用ntp服务获取时间,物联网平台借鉴NTP协议原理,将云端作为NTP服务器。设备端发送一个特定Topic给云端,payload中带上发送时间。云端回复时在payload中加上云端的接收时间和发送时间。设备端收到回复后,再结合自己本地当前时间,得出一共4个时间。一起计算出设备端与云端的时间差,从而得出端上当前的精确时间。

注意:只有设备端与云端成功建立连接之后,才能通过NTP服务进行校准

步骤:

  1. 设备端订阅/ext/ntp/${YourProductKey}/${YourDeviceName}/responseTopic。
    //回调函数,当发送请求topic后,用此函数接收时间
    static void request_topic_handle_func(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
    {
        
        iotx_mqtt_topic_info_t     *topic_info = (iotx_mqtt_topic_info_pt) msg->msg;
            switch (msg->event_type) {
                case IOTX_MQTT_EVENT_PUBLISH_RECEIVED:
                    /* print topic name and topic message */
                    EXAMPLE_TRACE("Payload: %.*s", topic_info->payload_len, topic_info->payload);
                    break;
                default:
                    break;
            }
    }
    #define RESPONSE_TOPIC         "/ext/ntp/a11YWzN48cV/fourswitch/response"
    IOT_MQTT_Subscribe(NULL,RESPONSE_TOPIC,IOTX_MQTT_QOS0,request_topic_handle_func,NULL);

     

  2. 设备端向/ext/ntp/${YourProductKey}/${YourDeviceName}/requestTopic发送一条QoS=0的消息,payload中带上设备当前的时间戳,单位为毫秒。示例如下:
    #define REQUEST_TOPIC         "/ext/ntp/a11YWzN48cV/fourswitch/request"
    char           *payload = "{\"deviceSendTime\":\"100\"}";
    IOT_MQTT_Publish_Simple(0,REQUEST_TOPIC,IOTX_MQTT_QOS0,payload,strlen(payload));

     

  3. 设备端收到服务端回复的消息,payload中包含以下信息:
    {
        "deviceSendTime":"100",//发送时设备端时间戳
        "serverRecvTime":"1010",//服务端接收时时间戳
        "serverSendTime":"1015",//服务端发送时时间戳
    }

     

  4. 设备端计算出当前精确的unix时间。

    设备端收到服务端的时间记为${deviceRecvTime},则设备上的精确时间为:(${serverRecvTime} + ${serverSendTime} + ${deviceRecvTime} - ${deviceSendTime}) / 2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值