すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:例:

最終更新日:Apr 17, 2025

このトピックでは、Link SDK for CのAPI操作を呼び出してHTTPSリクエストをIoT Platformに送信し、デバイスを動的に登録し、デバイスのアクティブ化に必要な検証情報を取得する方法について説明します。 この例では、という名前のサンプルコードファイルを示します。/demos/dynreg_basic_demo.c 使用されます。

背景情報

HTTPSベースの動的登録の詳細については、「概要」をご参照ください。

手順1: クライアントインスタンスの初期化

  1. ヘッダーファイルを追加します。

    # 「aiot_state_api.h」を含める
    # 「aiot_sysdep_api.h」を含む
    # 「aiot_dynreg_api.h」
    を含む
  2. 基になる依存関係を追加し、ログ出力機能を設定します。

    aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb); 
  3. aiot_dynreg_init関数を呼び出して、dynregという名前のクライアントインスタンスを作成し、デフォルトパラメーターを設定します。

    dynreg_handle = aiot_dynreg_init();
        if (dynreg_handle == NULL) {
            printf("aiot_dynreg_init failed\n");
            return -1;
        }

ステップ2: 必要な機能の設定

aiot_dynreg_init関数を呼び出して、次の項目を設定します。

  1. 接続パラメーターの設定

  2. メッセージコールバックの設定

  3. 詳細については、「HTTPSベースの動的登録」をご参照ください。

  4. 接続パラメーターの設定

    • サンプルコード:

      char * url = "iot-auth.cn-shanghai.aliyuncs.com"; 
          ……
          char * product_key = "a18wP ******";
          char * product_secret = "CpIlPVCXI7 ******";
          char * device_name = "LightSwitch";
          ……
          ……
          /* サーバーのエンドポイントを指定します。  */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_HOST, (void *)host);
          /* サーバーのポートを指定します。  */
          aiot_dynreg_setopt(dynreg_handle、AIOT_DYNREGOPT_PORT、(void *)&port);
          /* デバイスが属するプロダクトのProductKeyを指定します。  */
          aiot_dynreg_setopt(dynreg_handle、AIOT_DYNREGOPT_PRODUCT_KEY、(void *)product_key);
          /* デバイスが属する製品のProductSecretを指定します。  */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_SECRET, (void *)product_secret);
          /* デバイスのDeviceNameを指定します。  */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_DEVICE_NAME, (void *)device_name);
          /* 接続のセキュリティ資格情報を指定します。  */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_NETWORK_CRED, (void *)&cred);
          ……
          ……
    • パラメータ:

      パラメーター

      説明

      url

      iot-auth.cn-shanghai.aliyuncs.com

      HTTPSサーバーのエンドポイント。

      デバイスを接続するエンドポイントを取得するために、サンプルコードのcn-shanghaiをIoT Platformがアクティブ化されているリージョンのIDに置き換えます。

      IoT Platformコンソールの左上隅にリージョンを表示できます。 リージョンIDの詳細については、「」をご参照ください。サポートされているリージョン

      この例では、中国 (上海) リージョンに存在するパブリックインスタンスが使用されています。

      説明

      中国 (北京) および中国 (深セン) リージョンはサポートされていません。

      product_key

      a18wP ******

      IoT Platformコンソールでプロダクトを作成したときに保存したProductKeyとProductSecret。 詳細については、「プロダクトの作成」をご参照ください。

      product_secret

      CpIlPVCXI7 ******

      device_name

      LightSwitch

      デバイスのDeviceNameをします。 このパラメーターの値は、IoT Platformでデバイスを製品に追加したときに指定したDeviceNameと同じである必要があります。

      IoT Platformは、デバイスがアクティベーション要求を開始するときにDeviceNameをチェックします。 デバイスから取得できる識別子をDeviceNameとして使用することを推奨します。 識別子は、デバイスのMACアドレス、International Mobile Equipment Identity (IMEI) 番号、またはシリアル番号 (SN) とすることができる。

      重要

      このパラメーターの値は、IoT Platformコンソールでデバイスを追加したときに指定したDeviceNameと同じである必要があります。

  5. メッセージコールバックの設定

    1. メッセージコールバック関数を指定します

      • サンプルコード:

        int main(int argc, char * argv[])
        {
            …… 
            ……
            aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_RECV_HANDLER, (void *)demo_dynreg_recv_handler);
            aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_USERDATA, (void *)&demo_info);
            …… 
            ……
        }
      • パラメータ:

        パラメーター

        説明

        AIOT_DYNREGOPT_RECV_HANDLER

        demo_dynreg_recv_handler

        メッセージコールバック関数。 メッセージが受信されると、コールバック関数が呼び出されて必要な操作が実行されます。

        AIOT_DYNREGOPT_USERDATA

        &demo_info

        コンテキスト。 demo_dynregmq_recv_handler関数が呼び出されると、関数から取得した値が返されます。

    2. メッセージコールバック関数を定義します。

      void demo_dynreg_recv_handler(void * handle, const aiot_dynreg_recv_t * packet, void * userdata)
      {
          demo_info_t * demo_info = (demo_info_t *)userdata;
          switch (packet->type) {
              ケースAIOT_DYNREGRECV_STATUS_CODE: {
                  demo_info->code = packet->data.status_code.code;
              }
              break;
              /* TODO: コールバックポイントのパケットパラメータの領域を保存する必要があります。 コールバックが実装された後、スペースは解放されます。  */
              case AIOT_DYNREGRECV_DEVICE_INFO: {
                  demo_info->device_secret = malloc(strlen(packet->data.de vice_info.device_secret) + 1);
                  if (demo_info->device_secret != NULL) {
                      memset(demo_info->device_secret, 0, strlen(packet->data.de vice_info.device_secret) + 1);
                      memcpy(demo_info->device_secret, packet->data.de vice_info.device_secret,
                             strlen(packet->data.de vice_info.device_secret);
                  }
              }
              break;
              default: {
              }
              break;
          }
      }

ステップ3: リクエストを送信する

aiot_dynregmq_send_request操作を呼び出して、動的登録リクエストをサーバーに送信します。 パラメーターの設定方法については、「接続パラメーターの設定」をご参照ください。

/* 動的登録リクエストを送信します。 */
    res = aiot_dynreg_send_request(dynreg_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_dynreg_send_request failed: -0x % 04X\n", -res);
        return -1;
    }

ステップ4: 応答を受け取る

登録リクエストが送信されると、IoT Platformはレスポンスを返します。 デバイスはaiot_dynreg_recv操作を呼び出して応答データを受信し、メッセージコールバック関数を呼び出してデータを処理します。

res = aiot_dynreg_recv(dynreg_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_dynreg_recv failed: -0x % 04X\n", -res);
        return -1;
    }  

この例では、応答データが印刷される。 返されたデバイス検証情報をオンプレミスに保存するロジックを指定する必要があります。 検証情報は、デバイスがIoT Platformに接続するときに使用されます。

if (demo_info.device_secret != NULL) {
        printf("device secret: % s\n", demo_info.device_secret);
        無料 (demo_info.device_secret);
    }

ステップ5: プログラムを終了

aiot_dynreg_deinit関数を呼び出して、dynregクライアントインスタンスを削除し、関連するリソースをリリースします。

res = aiot_dynregmq_deinit(&dynregmq_handle);
            

次のステップ

  • サンプルコードファイルを設定したら、ファイルをコンパイルして実行可能ファイルを生成します。 この例では、という名前の実行可能ファイル。/output/mqtt-basic-demoが生成されます。

    詳細については、「環境の準備」をご参照ください。

  • 実行結果の詳細については、「ログの表示」をご参照ください。