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

IoT Platform:例:

最終更新日:Apr 09, 2025

配布デバイス。。/demos/bootstrap_posix_demo.cサンプルコードファイルが使用されています。

背景情報

  • デバイス配布の詳細については、「概要」をご参照ください。

  • デバイス配布機能を使用してデバイスの接続情報を取得した後、デバイスをIoT Platformに接続できます。 MQTT接続の詳細については、「概要」をご参照ください。

ステップ1: クライアントの初期化

  1. ヘッダーファイルを追加
    ...
    ...
    
    # 「aiot_bootstrap_api.h」
    を含む

  2. 基になる依存関係を追加し、ログ出力機能を設定します。

    aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb); 
  3. aiot_bootstrap_init操作を呼び出して、ブートストラップを作成します
    bootstrap_handle = aiot_bootstrap_init();
        if (bootstrap_handle == NULL) {
            printf("aiot_bootstrap_init failed\n");
            return -1;
        }

ステップ2: 機能の設定

aiot_bootstrap_setopt操作を呼び出して、次の項目を設定します。

  1. .
    重要 TLS接続タイプをAIOT_SYSDEP_NETWORK_CRED_SVRCERT_CAに設定する必要があります。
    • int32_t res = STATE_SUCCESS;
          void * bootstrap_handle = NULL, * mqtt_handle = NULL;
          aiot_sysdep_network_cred_t cred;
          demo_info_t demo_info;
      
          /* TODO: 次のパラメーターの値を、デバイスのProductKey、DeviceName、およびDeviceSecretに置き換えます。 */
          char * product_key = "a18wP ******";
          char * device_name = "LightSwitch";
          char * device_secret = "uwMTmVAMnGGHaAkqmeDY6cHxxB ******";
          ...
          ...
          memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t));
          cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA; /* RSA証明書を使用してMQTTブローカーを検証します。 */
          cred.max_tls_fragment = 16384; /* フラグメントの長さは最大16 KBです。 その他のオプション値には、4 KB、2 KB、1 KB、および0.5 KBが含まれます。 */
          cred.sni_enabled = 1; /* TLS接続を確立するときにサポートされるサーバー名インジケーター。 */
          cred.x509_server_cert = ali_ca_cert; /* MQTTブローカーの検証に使用されるRSAルート証明書。 */
          cred.x509_server_cert_len = strlen(ali_ca_crt); /* MQTTブローカーの検証に使用されるRSAルート証明書の長さ。 */
          ...
          ...
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_HOST, (void *)host);
          aiot_bootstrap_setopt(bootstrap_handle、AIOT_BOOTSTRAPOPT_PORT、(void *)&port);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_PRODUCT_KEY, (void *)product_key);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_DEVICE_NAME, (void *)device_name);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_NETWORK_CRED, (void *)&cred);
      
          ...
          ...
    • パラメーター説明
      product_keya18wP ******

      取得したエンドポイントとポート番号を使用してMQTT接続を確立する場合は、device_secretパラメーターが必要です。

      device_nameLightSwitch
      device_secretuwMTmVAMnGGHaAkqmeDY6cHxxB ******
  2. メッセージコールバックを設定します。
    • aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_RECV_HANDLER, (void *)demo_bootstrap_recv_handler); 
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_USERDATA, (void *)&demo_info); 
    • パラメーター説明
      AIOT_BOOTSTRAPOPT_RECV_HANDLERdemo_bootstrap_recv_handlerデバイス配布メッセージを受信すると、このコールバックが呼び出されます。
      AIOT_BOOTSTRAPOPT_USERDATAdemo_infoコンテキストを設定します。 demo_bootstrap_recv_handlerコールバックが呼び出されると、userdataパラメーターが返されます。 このパラメーターを使用する前に、データ型を変換する必要があります。
  3. .

    1. void demo_bootstrap_event_handler(void * handle, const aiot_bootstrap_event_t * event, void * userdata)
      {
          switch (event->type) {
              case AIOT_BOOTSTRAPEVT_INVALID_RESPONSE: {
                  printf("AIOT_BOOTSTRAPEVT_INVALID_RESPONSE\n");
              }
              break;
              ケースAIOT_BOOTSTRAPEVT_INVALID_CMD: {
                  printf("AIOT_BOOTSTRAPEVT_INVALID_CMD\n");
              }
              break;
              default: {
      
              }
              break;
          }
      }


      • aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_EVENT_HANDLER, (void *)demo_bootstrap_event_handler);
        します。
      • パラメーター説明
        AIOT_BOOTSTRAPOPT_EVENT_HANDLERdemo_bootstrap_event_handler

        デバイス接続のステータスが変更されると、コールバックが呼び出されて必要な操作が実行されます。


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

重要 デバイス配布リクエストを送信する前に、デバイスがIoT Platformで配布されていることを確認してください。 それ以外の場合、デバイスの現在のエンドポイントとポート番号が返されます。.

aiot_bootstrap_send_request操作を呼び出して、HTTPSリクエストをサーバーに送信します。 リクエストのパラメーターの詳細については、前の手順をご参照ください。

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

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

  1. aiot_bootstrap_recv操作をして、応答データを受信し、メッセージコールバックを使用してデータを処理します。
    res = aiot_bootstrap_recv(bootstrap_handle);
        if (res < STATE_SUCCESS) {
            printf("aiot_bootstrap_recv failed, res: -0x % 04X\n", -res);
            return -1;
        }
  2. コールバックの処理ロジックを指定します。
    コールバックの処理ロジックを指定する場合は、次の項目に注意してください。
    メッセージタイプ説明
    AIOT_BOOTSTRAPRECV_STATUS_CODEIoT Platformによって返されるHTTPステータスコード。 詳細は、「HTTPステータスコード」をご参照ください。

    この例では、受信したステータスコードを処理するロジックは指定されていません。 ビジネスニーズに基づいてロジックを指定できます。

    AIOT_BOOTSTRAPRECV_CONNECTION_INFOIoT Platformによって返される応答メッセージ。

    aiot_bootstrap_recv_tはメッセージタイプを示します。 hostおよびportパラメーターをオンプレミスに保存する必要があります。

    この例では、応答メッセージが印刷される。

    AIOT_BOOTSTRAPRECV_NOTIFYIoT Platformによって送信されるデバイス配布メッセージ。

    デバイスがIoT Platformで配布されると、IoT Platformはデバイスにメッセージを送信します。

    この例では、メッセージが印刷される。 デバイスを切断し、デバイス配布要求を再開始するロジックを指定する必要があります。

    void demo_bootstrap_recv_handler(void * handle, const aiot_bootstrap_recv_t * packet, void * userdata)
    {
        demo_info_t * demo_info = (demo_info_t *)userdata;
    
        switch (packet->type) {
            ケースAIOT_BOOTSTRAPRECV_STATUS_CODE: {
                demo_info->code = packet->data.status_code.code;
            }
            break;
            case AIOT_BOOTSTRAPRECV_CONNECTION_INFO: {
                demo_info->host = malloc(strlen(packet->data.connection_info.host) + 1);
                if (demo_info->host != NULL) {
                    memset(demo_info->host, 0, strlen(packet->data.connection_info.host) + 1);
                    /* TODO: デバイス配布メッセージを指定された場所に保存し、メモリスペースを解放します。 */
                    memcpy(demo_info->host、packet->data.connection_info.host、strlen(packet->data.connection_info.host));
                    demo_info->port = packet->data.connection_info.port;
                }
            }
            break;
            ケースAIOT_BOOTSTRAPRECV_NOTIFY: {
                printf("AIOT_BOOTSTRAPRECV_NOTIFY, cmd: % d\n", packet->data.notify.cmd);
    
            }
            default: {
    
            }
            break;
        }
    }

(オプション) ステップ5: MQTT接続を確立する

必要なエンドポイントとポート番号を取得したら、デバイスをMQTT経由でIoT Platformに接続します。 MQTT接続の詳細については、「概要」をご参照ください。

MQTT接続が確立されたら、次の手順を実行してデバイスを配布します。

  1. MQTT接続ハンドルとの関連付け aiot_bootstrap_setopt操作を呼び出します。
    • aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle);
    • パラメーター説明
      AIOT_BOOTSTRAPOPT_MQTT_HANDLEmqtt_handleデバイスがIoT Platformによって送信された配布メッセージを受信すると、このコールバックが呼び出されます。
  2. IoT Platformコンソールにログインし、デバイスを配布します。
  3. デバイスがメッセージを受信すると、デバイスはオフラインになります。 再実行 ステップ1からステップ4へ エンドポイントを取得し、デバイスをIoT Platformに再接続します。

ステップ6:

aiot_bootstrap_deinit操作を呼び出して、ブートストラップを破棄します。

res = aiot_bootstrap_deinit(&bootstrap_handle);
    if (res < 0) {
        printf("demo_start_stop failed\n");
        return -1;
    }

次のステップ

  • この例では、。/demos/bootstrap-posix-demo実行ファイルが生成されます。

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

  • [ログの表示]します。