デバイス証明書 (ProductKey、DeviceName、およびDeviceSecret) を取得したら、MQTT (Message Queuing Telemetry Transport) を介してデバイスをEnterprise Editionインスタンスに接続できます。 このトピックでは、IoT PlatformのLink SDK for Cを使用してシミュレートされたデバイスを設定し、データを送信する方法について説明します。
前提条件
プロダクトとデバイスが作成されます。 詳細については、「プロダクトとデバイスの作成」をご参照ください。
始める前に
この例では、通常ユーザーの権限を使用してすべての操作を実行します。 管理者権限を必要とする特定の操作を実行する場合は、sudo
コマンドを実行します。
開発環境の準備
この例では、Link SDK for CはLinuxオペレーティングシステムで使用されています。 SDKをコンパイルするには、64ビットUbuntu 20.04を使用することを推奨します。
この例では、ECS (Elastic Compute Service) インスタンスが購入され、シミュレートされたデバイスとして使用されます。 シミュレートされたデバイスはIoT Platformに接続され、データの送信に使用されます。 ECSインスタンスの購入方法の詳細については、「作成方法」をご参照ください。
SDKの開発とコンパイルには、次のソフトウェアが必要です。
make (バージョン4.1以降) およびgcc (バージョン5.4.0以降)
次のコマンドを実行して、ソフトウェアをインストールします。
sudo apt-get install -y build-essential make gcc
C用リンクSDKの取得
LinK SDK for C V4.x圧縮パッケージをダウンロードし、パッケージの名前をLinkSDK.zip
に変更します。
デバイスのサンプルプログラムを開発する
この例では、TSL (Thing Specification Language) 固有のトピックを使用してデータを送信します。 カスタムトピックを使用して、デバイスにデータを送信することもできます。 詳細については、「カスタムトピックの使用」をご参照ください。
ECS インスタンスにログインします。 ECSインスタンスへのログイン方法の詳細については、「接続方法の概要」をご参照ください。
次のコマンドを実行してGCCとMakeをインストールします。
sudo apt-get install -y build-essential make gcc
LinkSDK.zip
ファイルをアップロードして解凍します。次のコマンドを実行してunzipをインストールします。
apt更新 apt install unzip
LinkSDK.zip
ファイルが存在するディレクトリに移動し、次のコマンドを実行してファイルを解凍します。unzip LinkSDK.zip
/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 ******
検証に使用されるデバイス証明書。 この証明書は、デバイスの追加後にオンプレミスサーバーに保存されます。
IoT Platformコンソールの [デバイスの詳細] ページでデバイス証明書を表示することもできます。
device_name
デバイス1
device_secret
8c684ef *************
mqtt_host
iot-cn-****** .mqtt.iothub.aliyuncs.com
MQTTエンドポイント。 [インスタンスの詳細] ページの右上隅にある [開発設定の表示] をクリックします。 [開発設定] パネルで、エンドポイントを表示します。
インスタンスの詳細については、「インスタンスのエンドポイントの管理」をご参照ください。
次のサンプルコードを変更して、温度と湿度のデータを送信します。
/* メインスレッドはスリープ状態になります。 */ while (1) { /* TODO: 次のサンプルコードは、プロパティとイベントを送信する方法を示しています。 サンプルコードのコメントを解除して結果を表示できます。 */ demo_send_property_post(dm_handle, "{\" temperature\": 30,\" humidity\": 42}"); ...... 睡眠 (5); }
カスタムトピックをサブスクライブするには、次のサンプルコードを変更します。 カスタムトピックは、IoT Platformからコマンドを受信するために使用されます。
aiot_mqtt_sub(mqtt_handle、"/a2 ******/Device1/user/get" 、NULL、1、NULL);
/LinkSDK
のルートディレクトリで、次のコマンドを実行してサンプルプログラムをコンパイルします。はきれいにする 作る
生成された
data-model-basic-demo
ファイルはに保存されます。/出力
ディレクトリ。次のコマンドを実行して、サンプルプログラムを実行します。
. /output/data-model-basic-demo
サンプルプログラムが期待どおりに実行されると、次のログが生成されます。
[1695199326.066][LK-0313] MQTTユーザーがaiot_mqtt_connect apiを呼び出し、connect [1695199326.066][LK-032A] mqttホスト: iot-cn-****** .mqtt.iothub.aliyuncs.com [1695199326.066][LK-0317] ユーザー名: Device1&a2 ****** サーバーとのtcp接続を確立します (host='iot-cn-****** .mqtt.iothub.aliyuncs.com '、port=[443]) tcp、fd=3を確立するための成功 ローカルポート: 36030 [1695199326.077][LK-1000] サーバーとのmbedtls接続を確立します (host='iot-cn-****** .mqtt.iothub.aliyuncs.com '、port=[443]) [1695199326.122][LK-1000] mbedtls接続を確立する成功 (合計で45382バイト、最大使用48350バイト) [1695199326.166][LK-0313] MQTTは92 msで成功を接続します AIOT_MQTTEVT_CONNECT [1695199326.166][LK-0309] サブ: /a2 ******/Device1/user/get [1695199326.166][LK-0309] パブ: /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 69 69 74 79 22 | ": 30、" 湿度" [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ジェネリック返信 demo_dm_recv_handler、type = 0 demo_dm_recv_generic_reply msg_id = 1, code = 200, data = {}, message = success
IoT Platformコンソールにログインし、管理するEnterprise Editionインスタンスを見つけ、インスタンスの名前をクリックして [インスタンスの詳細] ページに移動します。 [インスタンスの詳細] ページで、デバイスのステータスを表示します。
左側のナビゲーションウィンドウで、
を選択します。 デバイスページで、Device1を見つけて、デバイスのステータスを表示します。 State/Enabled列の値Onlineは、デバイスがIoT Platformに接続されていることを示します。[操作] 列の [表示] をクリックします。 デバイスの詳細ページで、[TSLデータ] をクリックします。 [TSLデータ] タブで、[ステータス] をクリックします。 [ステータス] タブで、デバイスのステータスを表示します。
この例では、
data_model_basic_demo.c
ファイルのサンプルコードを使用して、温度データと湿度データがIoT Platformに送信されます。