物联网平台提供NTP服务,为资源受限的嵌入式设备,解决无法实时地获取时间的问题。您可以通过配置C Link SDK,设备端获取UTC时间。

前提条件

背景信息

阿里云物联网平台提供NTP(Network Time Protocol,网络时间协议)服务,更多信息,请参见NTP服务

使用流程

如下功能时序图,以设备的应用程序demos/ntp_basic_demo.c为例,介绍NTP服务的使用流程。

image..png

步骤一:设备初始化

  1. 创建设备句柄,完成设备建连。

    static void* demo_device_init(char *product_key, char *device_name, char *device_secret, char *host, uint16_t port)
    {
        int32_t res = STATE_SUCCESS;
        /* 创建设备 */
        void *device = aiot_device_create(product_key, device_name);
    	....
        ....
            
        res = aiot_device_connect(device);
        
    	....
        ....
        return device;
    }
  2. NTP模块配置。

    • 设置时间同步回调函数。

          /* 设置时间同步回调函数 */
          aiot_device_ntp_set_callback(device, demo_ntp_callback, NULL);

      参数说明

      参数

      说明

      device

      设备句柄。

      demo_ntp_callback

      回调函数,可自定义。

      NULL

      回调函数的上下文参数,示例为NULL

    • 设置时区。

          /* 这里用中国所在的东8区演示功能, 因此例程运行时打印的是北京时间 */
          aiot_device_ntp_set_zone(device, 8);

      参数说明

      参数

      说明

      device

      设备句柄。

      8

      时区 。取值示例:

      • 东8区,取值为8。

      • 西3区,取值为-3。

步骤二:发起时间同步请求

  1. 发送时间同步请求。

    /* 发送时间同步请求 */
    aiot_device_ntp_request(device);
  2. 请求时间同步回调函数。

    /* 时间同步回调函数 */
    static void demo_ntp_callback(void *device, const aiot_ntp_time_t *recv_time, void *userdata)
    {
        printf("ntp recv time %d-%d-%d %d:%d:%d %d\r\n", 
            recv_time->year, recv_time->mon, recv_time->day, 
            recv_time->hour, recv_time->min, recv_time->sec, recv_time->msec);
    }

    参数说明

    参数

    说明

    device

    设备句柄。

    recv_time

    返回的时间,您可直接使用。

    userdata

    回调的上下文,示例中为NULL

步骤三:设备反初始化

 /* 断开设备连接,并回收设备资源 */
 demo_device_deinit(device);