全部產品
Search
文件中心

IoT Platform:裝置接入和上報資料

更新時間:Jun 30, 2024

擷取裝置認證(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

下載C SDK 4.x壓縮包,重新命名為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接入網域名稱。執行個體詳情頁面單擊右上方的查看開發配置,在開發配置面板查看接入網域名稱。

    執行個體的更多詳細說明,請參見查看和配置執行個體終端節點資訊(Endpoint)

  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

後續步驟

資料轉寄到Table Store