このトピックでは、C Link SDK を使用して、シミュレートされたデバイス (この例ではナイトライトスイッチ) を MQTT 経由で IoT Platform に接続し、カスタム Topic にデータをパブリッシュする方法について説明します。
前提条件
IoT Platform が有効化されていること。
プロダクトとデバイスの作成
-
IoT Platform コンソールにログインし、ターゲットインスタンスのカードをクリックします。
-
左側のナビゲーションウィンドウで、 を選択し、[プロダクトの作成] をクリックします。
-
[プロダクトの作成] ページで、[プロダクト名] パラメーターを NightLightSwitch に、[カテゴリ] パラメーターをカスタムカテゴリに設定します。他のパラメーターはデフォルト値を使用します。その後、[OK] をクリックします。
[プロダクトの作成] ページで、[デバイスの追加] セクションの [追加] をクリックします。
[デバイス] ページで、[デバイスの追加] をクリックします。
-
[デバイスの追加] ダイアログボックスで、デバイス名を入力します。例:LightSwitch。その後、[OK] をクリックします。
[ニックネーム] には、
クイックスタートと入力します。 [デバイスが追加されました。] ダイアログボックスで、[デバイス証明書のコピー] をクリックします。次に、デバイス証明書情報をオンプレミスサーバーに保存します。詳細については、「デバイス証明書」をご参照ください。
開発環境の準備
この例では、開発環境は Ubuntu 16.04、開発ツールは gcc と make です。詳細については、「プロジェクト設定」をご参照ください。
Ubuntu 16.04 をインストールします。
詳細については、「Ubuntu」をご参照ください。
次のコマンドを実行して gcc と make をインストールします。
sudo apt-get -y install gcc make
SDK の設定
デモファイル からデモパッケージを開発環境にダウンロードし、パッケージを解凍します。
IoT Platform では、Link SDK のカスタム機能を開発できます。詳細については、「C 言語用 Link SDK の取得」をご参照ください。
-
./LinkSDK/demos/mqtt_basic_demo.cファイルを開き、関連するパラメーターを設定します。-
デバイス接続情報を指定するパラメーターを設定して、デバイスを IoT Platform に接続します。パラメーターの説明を次の表に示します。サンプルコード:
char *product_key = "a18wP******"; char *device_name = "LightSwitch"; char *device_secret = "uwMTmVAMnGGHaAkqmeDY6cHxxB******"; char *mqtt_host = "a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com";パラメーター
例
説明
mqtt_host
a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com
デバイスの接続先となるエンドポイント。
-
Enterprise Edition インスタンスと新しいパブリックインスタンスの場合:[インスタンス詳細] ページの [開発設定] パネルでエンドポイントを確認します。
以前のバージョンのパブリックインスタンスを使用する場合、パブリックインスタンスのエンドポイントは
${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.comフォーマットです。
インスタンスとエンドポイントの詳細については、「インスタンスのエンドポイントの表示」をご参照ください。
product_key
a18wP******
デバイス証明書情報。デバイス証明書は、デバイスの作成後にオンプレミスサーバーに保存されます。
デバイス証明書は、IoT Platform コンソールの [デバイス詳細] ページで表示できます。詳細については、「デバイス認証情報の取得」をご参照ください。
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
-
-
デバイスが IoT Platform からのメッセージを受信するためにサブスクライブする Topic を指定します。例:
/a18wP******/LightSwitch/user/get。サンプルコード:説明この機能を使用するには、スラッシュとアスタリスクの組み合わせ (/**/) で囲まれたコードのコメントを解除してください。
{ char *sub_topic = "/a18wP******/LightSwitch/user/get"; res = aiot_mqtt_sub(mqtt_handle, sub_topic, NULL, 1, NULL); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }パラメーター
例
説明
sub_topic
/a18wP******/LightSwitch/user/get
デバイスがサブスクライブ権限を持つ Topic。デバイスはこの Topic を使用して IoT Platform からメッセージを受信できます。
カスタム Topic は IoT Platform コンソールで表示できます。[プロダクト詳細] ページの [Topic カテゴリ] タブをクリックします。表示されたタブで、[Topic カテゴリ] をクリックします。詳細については、「Topic とは」をご参照ください。
この例では、デフォルトのカスタム Topic が使用されます。パラメーターの説明:
a1oGs******は、デバイスの [ProductKey] を示します。LightSwitchはデバイスの [DeviceName] を示します。
-
デバイスがメッセージを送信するために使用できる Topic を指定します。例:
/a18wP******/LightSwitch/user/update。次に、送信するメッセージのコンテンツを指定します。サンプルコード:説明この機能を使用するには、スラッシュとアスタリスクの組み合わせ (/**/) で囲まれたコードのコメントを解除してください。
{ char *pub_topic = "/a18wP******/LightSwitch/user/update"; char *pub_payload = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"; res = aiot_mqtt_pub(mqtt_handle, pub_topic, (uint8_t *)pub_payload, (uint32_t)strlen(pub_payload), 0); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }パラメーター
例
説明
pub_topic
/a18wP******/LightSwitch/user/update
デバイスがパブリッシュ権限を持つ Topic。デバイスはこの Topic を使用して IoT Platform にメッセージを送信できます。
カスタム Topic は IoT Platform コンソールで表示できます。[プロダクト詳細] ページの [Topic カテゴリ] タブをクリックします。表示されたタブで、[Topic カテゴリ] をクリックします。詳細については、「Topic とは」をご参照ください。
この例では、デフォルトのカスタム Topic が使用されます。パラメーターの説明:
a1oGs******は、デバイスの [ProductKey] を示します。LightSwitchは、デバイスの [DeviceName] を示します。
pub_payload
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
IoT Platform に送信されるメッセージ。
この例では、カスタム Topic が使用されます。カスタムメッセージフォーマットを使用できます。
-
SDK のルートディレクトリで、make コマンドを実行します。
./output/mqtt-basic-demo実行可能サンプルコードファイルが生成されます。
実行結果
SDK のルートディレクトリで、次のコマンドを実行して実行可能ファイルを実行します。
./output/mqtt-basic-demo-
デバイスで実行結果を表示できます。
-
次のログデータは、
LightSwitchデバイスが IoT Platform に接続されたことを示しています。[1619768570.433][LK-0313] MQTT user calls aiot_mqtt_connect api, connect [1619768570.433][LK-0317] LightSwitch&a18wP****** [1619768570.433][LK-0318] 933FE333F78F42E2AAD384F629C771277E06D459577942EA1F04ACFDFE****** core_sysdep_network_establish host a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com port 8883, type 0 establish tcp connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[8883]) success to establish tcp, fd=3 local port: 49122 [1619768570.599][LK-1000] establish mbedtls connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[8883]) [1619768570.600][LK-1000] success to establish mbedtls connection, (cost 45134 bytes in total, max used 47870 bytes) [1619768570.644][LK-0313] MQTT connect success in 212 ms AIOT_MQTTEVT_CONNECT -
次のログデータは、
LightSwitchデバイスが/a18wP******/LightSwitch/user/getTopic をサブスクライブしたことを示しています。[1620373302.144][LK-0309] sub: /a18wP******/LightSwitch/user/getデバイスが Topic へのサブスクライブに成功したら、IoT Platform コンソールに戻ります。[デバイス詳細] ページの [トピック] タブで Topic を見つけ、「操作」列の [メッセージを公開] をクリックします。[メッセージを公開] ダイアログボックスで、たとえば これは Alibaba Iot Platform からのテストメッセージです。 のようなメッセージを入力して、IoT Platform からデバイスにメッセージを送信するシミュレーションをします。
-
次のログデータは、
LightSwitchデバイスが/a18wP******/LightSwitch/user/updateTopic を使用して IoT Platform にメッセージを送信したことを示しています。[1619768570.644][LK-0309] pub: /a18wP******/LightSwitch/user/update [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 4C 69 67 68 74 53 77 69 74 63 68 | s":{"LightSwitch [LK-030A] > 22 3A 30 7D 7D
-
IoT Platform コンソールにログインして、デバイスのステータスと操作ログを表示できます。
左側のナビゲーションウィンドウで、 を選択します。次に、デバイスを探し、デバイスのステータスを確認します。状態/有効列の値が [オンライン] の場合、デバイスは IoT Platform に接続されています。
左側のナビゲーションウィンドウで、 を選択します。[デバイスログ] ページで、NightLightSwitch プロダクトを選択します。そのプロダクトのデバイスがオンラインになったとき、トピックをサブスクライブしたとき、およびメッセージを送信したときのログを表示できます。
デバッグ中にエラーが発生した場合は、プロンプトに従ってエラーを修正してください。詳細については、「デバイスが受信するエラーコード」をご参照ください。