文档

设备接入和上报数据

更新时间:

获取设备证书(ProductKey、DeviceName和DeviceSecret)后,通过MQTT协议将设备接⼊企业版实例。本文介绍使用物联网平台提供的C Link SDK,模拟设备开发并上报数据。

前提条件

已创建产品和设备。具体操作,请参见创建产品和设备

使用前必读

本文操作步骤以普通用户权限为例。如果您在操作过程中涉及到管理员权限才能执行的操作,可尝试使用sudo命令执行。

准备开发环境

  • 本文使用Linux下的设备端C语言SDK。该SDK的编译环境推荐使用64位的Ubuntu 20.04。

    本示例购买一台ECS实例,模拟实际设备接入物联网平台并上报数据。购买ECS实例的方法,请参见实例创建方式介绍

  • SDK的开发编译环境会用到以下软件:

    make(4.1及以上版本)、gcc(5.4.0及以上版本)。

    可以使用如下命令行安装:

    sudo apt-get install -y build-essential make gcc

获取设备端C Link SDK

  1. 登录物联网平台控制台

  2. 在控制台左上方,选择物联网平台设备所部署的地域。

  3. 实例概览页签,单击目标企业版实例。

  4. 在左侧导航栏单击文档与工具

  5. 设备接入SDK区域的Link SDK下,单击SDK定制

  6. 在SDK定制页面的高级能力下,单击物模型,其他参数使用默认配置。

    image.png
  7. 单击开始生成

    在本地会下载C语言SDK的ZIP文件,重命名为LinkSDK.zip

开发设备样例程序

说明

示例通过物模型相关Topic上报数据。您也可以通过自定义Topic,向设备发送数据,更多信息,请参见使用自定义Topic通信

  1. 登录ECS实例。登录方式,请参见连接方式概述

  2. 执行以下命令,安装GCC和Make。

    sudo apt-get install -y build-essential make gcc
  3. 上传LinkSDK.zip文件,然后解压。

    1. 上传本地文件到ECS实例

    2. 执行以下命令,安装unzip。

      apt update
      apt install unzip
    3. 进入LinkSDK.zip文件所在目录后,执行以下命令,解压文件。

      unzip LinkSDK.zip
  4. 打开/LinkSDK/demos路径下的data_model_basic_demo.c文件,配置设备接入认证的参数。

    /* TODO: 替换为自己设备的设备证书 */
    char *product_key       = "a2******";
    char *device_name       = "Device1";
    char *device_secret     = "8c684ef*************";
    
    ......
    
    char  *mqtt_host = "iot-cn-******.mqtt.iothub.aliyuncs.com";

    参数

    示例

    说明

    product_key

    a2******

    设备认证信息。即完成添加设备后,您保存至本地的设备证书。

    您也可以在物联网平台的设备详情页查看设备的认证信息。

    device_name

    Device1

    device_secret

    8c684ef*************

    mqtt_host

    iot-cn-******.mqtt.iothub.aliyuncs.com

    设备的MQTT接入域名。实例详情页面单击右上方的查看开发配置,在开发配置面板查看接入域名。

    实例的更多详细说明,请参见管理实例终端节点

  5. 修改以下代码,上报温度和湿度数据。

        /* 主循环进入休眠 */
        while (1) {
            /* TODO: 以下代码演示了简单的属性上报和事件上报, 用户可取消注释观察演示效果 */
            demo_send_property_post(dm_handle, "{\"temperature\": 30,\"humidity\": 42}");
            ......
    
            sleep(5);
        }
  6. 修改以下代码,订阅自定义Topic,用于后续接收云端下发的指令。

    aiot_mqtt_sub(mqtt_handle, "/a2******/Device1/user/get", NULL, 1, NULL);
  7. 在SDK根目录/LinkSDK下,执行以下命令,完成设备样例程序的编译。

    make clean
    make

    生成的样例程序data-model-basic-demo存放在./output目录下。

  8. 执行以下命令,运行样例程序。

    ./output/data-model-basic-demo

    运行成功后,返回如下日志:

    [1695199326.066][LK-0313] MQTT user calls aiot_mqtt_connect api, connect
    [1695199326.066][LK-032A] mqtt host: iot-cn-******.mqtt.iothub.aliyuncs.com
    [1695199326.066][LK-0317] user name: Device1&a2******
    establish tcp connection with server(host='iot-cn-******.mqtt.iothub.aliyuncs.com', port=[443])
    success to establish tcp, fd=3
    local port: 36030
    [1695199326.077][LK-1000] establish mbedtls connection with server(host='iot-cn-******.mqtt.iothub.aliyuncs.com', port=[443])
    [1695199326.122][LK-1000] success to establish mbedtls connection, (cost 45382 bytes in total, max used 48350 bytes)
    [1695199326.166][LK-0313] MQTT connect success in 92 ms
    AIOT_MQTTEVT_CONNECT
    [1695199326.166][LK-0309] sub: /a2******/Device1/user/get
    [1695199326.166][LK-0309] pub: /sys/a2******/Device1/thing/event/property/post
    
    [LK-030A] > 7B 22 69 64 22 3A 22 31  22 2C 22 76 65 72 73 69 | {"id":"1","versi
    [LK-030A] > 6F 6E 22 3A 22 31 2E 30  22 2C 22 70 61 72 61 6D | on":"1.0","param
    [LK-030A] > 73 22 3A 7B 22 74 65 6D  70 65 72 61 74 75 72 65 | s":{"temperature
    [LK-030A] > 22 3A 20 33 30 2C 22 68  75 6D 69 64 69 74 79 22 | ": 30,"humidity"
    [LK-030A] > 3A 20 34 32 7D 2C 22 73  79 73 22 3A 7B 22 61 63 | : 42},"sys":{"ac
    [LK-030A] > 6B 22 3A 31 7D 7D                                | k":1}}          
    
    [1695199326.244][LK-0309] pub: /sys/a2******/Device1/thing/event/property/post_reply
    
    [LK-030A] < 7B 22 63 6F 64 65 22 3A  32 30 30 2C 22 64 61 74 | {"code":200,"dat
    [LK-030A] < 61 22 3A 7B 7D 2C 22 69  64 22 3A 22 31 22 2C 22 | a":{},"id":"1","
    [LK-030A] < 6D 65 73 73 61 67 65 22  3A 22 73 75 63 63 65 73 | message":"succes
    [LK-030A] < 73 22 2C 22 6D 65 74 68  6F 64 22 3A 22 74 68 69 | s","method":"thi
    [LK-030A] < 6E 67 2E 65 76 65 6E 74  2E 70 72 6F 70 65 72 74 | ng.event.propert
    [LK-030A] < 79 2E 70 6F 73 74 22 2C  22 76 65 72 73 69 6F 6E | y.post","version
    [LK-030A] < 22 3A 22 31 2E 30 22 7D                          | ":"1.0"}        
    
    [1695199326.244][LK-0A08] DM recv generic reply
    demo_dm_recv_handler, type = 0
    demo_dm_recv_generic_reply msg_id = 1, code = 200, data = {}, message = success
  9. 登录物联网平台控制台,单击目标企业版实例,查看设备状态和运行状态。

    1. 左侧导航栏选择设备管理 > 设备,找到目标设备Device1,查看设备状态。设备状态显示为在线,则表示设备与物联网平台成功连接。

      image.png
    2. 单击设备对应操作列的查看,在设备详情页面,单击物模型数据页签,在运行状态下查看设备的运行状态。

      文件data_model_basic_demo.c中代码示例,上报了温度湿度的值。

      image.png

后续步骤

数据转发到表格存储