この記事では、Link SDK for Cを移植して、マイクロコントローラユニット (MCU) とセルラーモジュールを統合したデバイスをIoT Platformに接続する方法について説明します。
背景情報
インターネットに直接接続できないデバイスは、MCUとセルラーを統合できます。 MCUは、ATコマンドを使用することによってセルラーモジュールを制御する。 このようにして、デバイスをインターネットに接続できます。 Link SDK for Cを移植することで、デバイスをIoT Platformに接続できます。
この記事では、MCU開発ボードでLink SDK for Cを移植し、デバイスをIoT Platformに接続する方法について説明します。 この例では、デバイスは共通のMCUとセルラーモジュールを統合しています。 デバイスをIoT Platformに接続した後、IoT Platformを使用してデバイスを管理し、デバイスデータを分析できます。

始める前に
Link SDKを移植する前に、次のコンポーネントを準備する必要があります。
- ハードウェア:
ハードウェアタイプ 説明 MCU開発ボード - 名前: STM32 Nucleoボード
- モデル: STM32L476RG
- システム: FreeRTOS
- リファレンス: NUCLEO-L476RG
セルラー通信ボード SIMカード - インタフェースモデル: Micro
- 信号: 4G
- 開発ツール:
ツール 説明 STM32CubeMX MCU周辺機器の初期化コードを生成するために使用される開発ツール。 バージョン: 6.1.2。 MDK-アーム 開発環境とデバッグコードを統合するために使用される開発ツール。 バージョン: 5.26.2.0. シリアルポートデバッガ デバイスの接続とデバッグに使用されるツール。 ボーレート: 115,200。 - C用リンクSDK:
IoT Platformコンソールにログインします。 [SDKのカスタマイズ] ページで、SDKを取得します。
説明サンプルプロジェクトファイルをダウンロードして、移植例を表示できます。 次に、設定を参照して、Link SDK for Cをデバイスにポートできます。
- デバイス認証情報:
Link SDKを移植する前に、IoT Platformコンソールで製品とデバイスを作成し、デバイス認証情報を取得する必要があります。 この例では、デバイス固有証明書認証方式が使用されます。 詳細については、「デバイスごとの固有証明書検証の情報の取得」をご参照ください。
手順
- ハードウェアをインストールします。
- SIMカードをセルラー通信ボードのSIM0カードスロットに挿入します。
- MCU開発ボードのUART1シリアルポートを、デュポン回線を使用してセルラー通信ボードのUART1シリアルポートに接続します。 次の図はピンを示しています。
- MCU開発ボードのUART3シリアルポートを開発ツールのシリアルポートにデュポン回線を使用して接続します。 次の図はピンを示しています。
デュポンラインNo. MCU開発ボードのシリアルポートピン 開発ツールのシリアルポートピン ① PC4 RXD ② PC5 TXD ③ GND GND MCU開発ボードのピンの図の詳細については、STM32 Nucleo-64ボードの記事の35ページの図24を参照してください。
- 2つのボードの電源を入れるのにマイクロUSBインターフェイスを使用し、コミュニケーションボードの開始を長く押して下さい。
ボードの電源を入れた後、PWRライトは赤、NETライトは黄色に点滅し、LTEライトは青になります。

- プロジェクトを移植します。
- CubeMXを開いて、基本プロジェクトコードを作成および生成します。
CubeMX開発ツールの使用方法の詳細については、CubeMX公式Webサイトをご覧ください。
シリアルポートとシステムの設定を次の図に示します。
説明 次の表では、UART1のボーレートとFREERTOSのメモリサイズが推奨値です。 ビジネスニーズに基づいて値を設定できます。シリアルポートまたはシステム 説明 UART1 - 出力: 非同期
- ボーレート: 230,400
- DMA: 有効
- 割り込みの受信: 有効
UART3 - 出力: 非同期
- ボーレート: 115,200
FREERTOS メモリサイズ: 81,920 - MDK-Armを使用してプロジェクトファイルを開き、取得したLink SDK for Cをプロジェクトにインポートします。 SDKでは、を除きます。/LinkSDK/demoフォルダは、すべての
をインポートする必要があります。cと。h他のフォルダ内のファイルをプロジェクトにします。 詳細については、「プロジェクトへのソースファイルの追加」をご参照ください。 - プロジェクトにコードを記述して、基になるシステム依存関係を設定します。 依存関係は、
aiot_sysdep_portfile_t g_aiot_sysdep_portfileグローバル変数に含まれます。 詳細については、「Link SDK For Cをポートする方法の例」をご参照ください。サンプルプロジェクトをダウンロードしてを表示できます。/Linkkit/portfiles/aiot_port/freertos_tcp_modem_port.cのサンプルコードファイル。
- セルラーモジュールを駆動するためのコードをプロジェクトに記述します。
- 適応のためのATコマンドの設定: を開きます。/Linkkit/portfiles/aiot_port/aiot_at_api.c
- 適応のためのシリアルポートの設定:
- aiot_at_setopt操作を呼び出して、ATモジュールのデータ送信インターフェイスを設定します。
- シリアルポートがデータを受信した後、aiot_at_uart_recv操作を呼び出してATコマンドを解析します。
サンプルプロジェクトをダウンロードしてを表示できます。/Linkkit/portfiles/aiot_port/linkkit_wrapper.cのサンプルコードファイル。
- を開きます。/linkkit_mcu_cellular_project/LinkKit/portfiles/aiot_port/mqtt_at_basic_demo.cファイルで、デバイス認証情報を設定します。 下表に、各パラメーターを説明します。
パラメーター 例 説明 url iot-as-mqtt.cn-shanghai.aliyuncs.com エンドポイント。 この例では、中国 (上海) リージョンのパブリックインスタンスが使用されています。 - パブリックインスタンスを使用する場合は、
cn-shanghaiをインスタンスが存在するリージョンのIDに置き換えます。 IoT Platformコンソールの左上隅にリージョンを表示できます。 リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。 - Enterprise Editionインスタンスを使用している場合、 [インスタンスの詳細] ページで [開発設定の表示] をクリックして、デバイスに関するMQTT接続情報を表示できます。
product_key a18wP ****** デバイス認証情報。 このパラメーターは、デバイスの開発時に取得されるデバイス証明書を示します。 IoT Platformコンソールの [デバイスの詳細] ページで情報を表示することもできます。
device_name stm32l4_mbedtls_cat1 device_secret uwMTmVAMnGGHaAkqmeDY6cHxxB ****** - パブリックインスタンスを使用する場合は、
- CubeMXを開いて、基本プロジェクトコードを作成および生成します。
- コードをコンパイルして実行します。
- をクリックしてプロジェクトファイルをコンパイルします。
アイコンをクリックして、実行可能なサンプルコードファイルをMUC開発ボードにダウンロードします。 - をクリックして、MUC開発ボードで実行可能なサンプルコードファイルを実行します。
実行結果
- デバイスでログを表示できます。
- 次のログデータは、デバイスがIoT Platformに接続されていることを示します。
linkkit_init[2.222][LK-0313] MQTTユーザーがaiot_mqtt_connect apiを呼び出し、connect [2.266][LK-0317] stm32l4_mbedtls_cat1&a18wP ****** [2.277][LK-0318] B4C45425D73E24B2935D73C1E98B6079A630FBE03F61E2A2031CEE7867 ****** unknown option, 2 unknown option, 5 [2.377][LK-1000] サーバーとのmbedtls接続を確立します (host='a18wP ****** .iot-as-mqtt.cn-shanghai.aliyuncs.com '、port=[443]) [7.311][LK-1000] mbedtls接続を確立する成功 (合計で18686バイト、最大使用21294バイト) [7.500][LK-0313] MQTT接続成功で5286 ms - 次のログデータは、デバイス時刻がサーバー時刻と同期していることを示しています。 詳細については、「NTPサービス」をご参照ください。
AIOT_MQTTEVT_CONNECT [7.544][LK-0309] パブ: /ext/ntp/a18wP ******/stm32l4_mbedtls_cat1/request [LK-030A] > 7B 22 64 65 76 69 63 65 53 6E 64 54 69 6D 65 | {"deviceSendTime [LK-030A] > 22 3A 22 37 35 33 39 22 7D | ":" 7539 "} [7.688][LK-0309] パブ: /ext/ntp/a18wP ******/stm32l4_mbedtls_cat1/response 現地時間: 1620915828805、2021/05/13-22:23:48:805 ハートビート応答 - 次のログデータは、デバイスがThing Specification Language (TSL) データをIoT Platformに送信することを示しています。 詳細については、「TSLモデルとは」をご参照ください。.
[1620915829.788][LK-0309] パブ: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/config/log/get [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 67 65 74 54 79 70 65 22 3A 22 63 | s ":{" getType ":" c [LK-030A] > 6F 6E 74 65 6E 74 22 2C 22 63 6F 6E 66 69 67 53 | ontent "," configS [LK-030A] > 63 6F 70 65 22 3A 22 64 65 76 69 63 65 22 7D | cope ":" device "}} [1620915830.011][LK-0309] パブ: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/config/log/get_reply [1620915830.033][LK-1507] LOGPOSTユーザーログ設定が到着しました ログスイッチの状態: 1 [1620915835.066][LK-0309] パブ: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/log/post [LK-030A] > 7B 22 69 64 22 3A 22 32 22 2C 22 76 65 72 73 69 | {"id":"2","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 5B 7B 22 75 74 63 54 69 6D 65 22 3A 22 | s ":[{" utcTime ":" [LK-030A] > 32 30 32 31 2F 35 2F 31 33 20 32 32 3A 32 33 3A | 2021/5/13 22:23: [LK-030A] > 35 35 22 2C 22 6C 6F 67 4C 65 76 65 6C 22 3A 22 | 55 "," logLevel ":" [LK-030A] > 44 45 42 55 47 22 2C 22 6D 6F 64 75 6C 65 22 3A | DEBUG "、" モジュール ": [LK-030A] > 22 41 50 50 22 2C 22 63 6F 64 65 22 3A 22 32 30 | "APP" 、"code":"20 [LK-030A] > 30 22 2C 22 74 72 61 63 65 43 6F 6E 74 65 78 74 | 0 "、" traceContext [LK-030A] > 22 3A 22 30 22 2C 22 6C 6F 67 43 6F 6E 74 65 6E | ":" 0 "," logConten [LK-030A] > 74 22 3A 22 6C 6F 67 20 69 6E 20 77 68 69 6C 65 | t ":" ログインしながら [LK-030A] > 28 31 29 22 7D 5D 7D | (1)"}]} [1620915836.855][LK-0309] パブ: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/event/property/post [LK-030A] > 7B 22 69 64 22 3A 22 33 22 2C 22 76 65 72 73 69 | {"id":"3","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 20 30 7D 2C 22 73 79 73 22 3A 7B 22 61 63 | ": 0}," sys ":{" ac [LK-030A] > 6B 22 3A 31 7D 7D | k ":1}} [1620915837.099][LK-0309] パブ: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/event/Error/post [1620915837.122][LK-0309] pub: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/event/property/post_reply [1620915837.177][LK-0A08] DM recvジェネリック返信 demo_dm_recv_handler、type = 0 msg_id = 3, code = 200, data = {}, message = success [1620915837.311][LK-0309] パブ: /sys/a18wP ******/stm32l4_mbedtls_cat1/thing/event/Error/post_reply [1620915837.344][LK-0A08] DM recvジェネリック返信 demo_dm_recv_handler、type = 0 msg_id = 4, code = 200, data = {}, message = success
- 次のログデータは、デバイスがIoT Platformに接続されていることを示します。
IoT Platformコンソールにログインして、デバイスのステータスと操作ログを表示できます。
- 左側のナビゲーションウィンドウで、 を選択します。 次に、デバイスを見つけてオンラインステータスを表示します。 [状態] 列の値 [オンライン] は、デバイスがIoT Platformに接続されていることを示します。
- 左側のナビゲーションウィンドウで、 を選択します。 デバイスログを表示する製品を選択します。