Wio TerminalをAzure IoTに接続

本記事はBenjaminに許可をもらって、Connecting the Wio Terminal to Azure IoTを日本語訳したものです。
Benjamin-san, Thank you so much for a great article!

f:id:matsujirushix:20200811095714p:plain

Seeedから発売されたWio Terminalで遊び始めてから数ヶ月が経ちました。多くのIoTソリューションにパワーを与えるかなり完全なデバイスです。仕様を見てください!

ワイヤレス接続に拡張性、処理能力、、、紙の上では、Wio TerminalはIoT開発の理想的なプラットフォームであるに違いありません。皮肉なことに、箱から出しただけでは実際にIoTクラウドプラットフォームに接続することができません!

もうおわかりでしょう、、、この記事では、Wio TerminalをAzure IoTに接続する方法を学びます。さらに重要な点は、わたしの手順に従うことでAzure IoT Embedded Cライブラリを独自のIoTデバイスに移植するために必要なすべての情報を得られます。

Wio TerminalをAzure IoTに接続する

すぐに開始できるサンプルアプリケーションをまとめました。

Wio Terminalを入手する必要があります。もちろん、Azure IoT HubインスタンスWi-Fi環境も必要です。Wio TerminalはUSB経由であなたのPCに接続することでプログラミングします。(USB-Cポートを採用してくれてありがとう!)

Wio TerminalをAzure IoT Hubに接続する手順は次のとおりです。

  1. もし、Azureサブスクリプションを持っていないなら、始める前に作成してください。
  2. IoT Hubを作成し、新しいデバイスを登録(つまりWio Terminalのこと)してください。Azureポータルを使うのが易しい方法ですが、Azure CLIVSCode拡張を使用しても良いです。このサンプルは認証に対称キーを使います。
  3. VSCodeサンプルリポジトリをクローンしてオープンし、PlatformIO拡張機能がインストールされていることを確認してください。
  4. アプリケーション設定ファイル(include/config.h)に、Wi-Fi、IoT HubのURL、デバイスクレデンシャルを書いてください。
  5. プログラムをWio Terminalに書き込みます。コマンドパレット(Windows/Linuxの場合はCtrl+Shift+P、macOSの場合は⇧⌘P)を開いてPlatformIO: Uploadを実行してください。Wio Terminalのツールチェーンとサンプルアプリケーションの依存ファイルをダウンロードして、コードがコンパイル、デバイスへアップロードされるため、少し時間がかかります。
  6. コードが正常にアップロードされると、Wio TerminalのLCDが点灯しログが表示されます。PlatformIOシリアルモニターで確認することもできます(PlatformIO: Serial Monitor)。
> Executing task: C:\Users\kartben\.platformio\penv\Scripts\platformio.exe device monitor <
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at http://bit.ly/pio-monitor-filters
--- Miniterm on COM4  9600,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Connecting to SSID: WiFi-Benjamin5G
......
> SUCCESS.
Connecting to Azure IoT Hub...
> SUCCESS.

あなたのデバイスは2秒間隔に加速度センサーの値をAzure IoT Hubへ送信し、かつ、リモートからブザーを鳴らすコマンドを受け付けています。

サンプルが適切に動作しているかはAzure IoT Explorerで確認できます。アプリケーションのREADMEを参照してください。

https://blog.benjamin-cabe.com/wp-content/uploads/2020/08/azure-iot-explorer-send-command.gif.pagespeed.ce.pGBwUikBGE.gif

https://blog.benjamin-cabe.com/wp-content/uploads/2020/08/azure-iot-explorer-telemetry.gif.pagespeed.ce.EDVyA61zgb.gif

大事なことですが、このサンプルアプリケーションはIoT Plug and Playと互換性があります。これは、Wio Terminalの送信(テレメトリ)や受信(コマンド)のメッセージが明確に定義されていることを意味します。

この定義を以下に示します。これはとても簡単です。定義(DTDL - Digital Twin Description Language)のための専用のVSCode拡張を使用して作成しました。

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:seeed:wioterminal;1",
  "@type": "Interface",
  "displayName": "Seeed Studio Wio Terminal",
  "contents": [
    {
      "@type": [
        "Telemetry",
        "Acceleration"
      ],
      "unit": "gForce",
      "name": "imu",
      "schema": {
        "@type": "Object",
        "fields": [
          {
            "name": "x",
            "displayName": "IMU X",
            "schema": "double"
          },
          {
            "name": "y",
            "displayName": "IMU Y",
            "schema": "double"
          },
          {
            "name": "z",
            "displayName": "IMU Z",
            "schema": "double"
          }
        ]
      }
    },
    {
      "@type": "Command",
      "name": "ringBuzzer",
      "displayName": "Ring buzzer",
      "description": "Rings the Wio Terminal's built-in buzzer",
      "request": {
        "name": "duration",
        "displayName": "Duration",
        "description": "Number of milliseconds to ring the buzzer for.",
        "schema": "integer"
      }
    }
  ]
}

Wio Terminalサンプルアプリケーションは、IoT Hubに接続するとdtmi:seeed:wioterminal;1に準拠していると自己申告します。

これは、デバイスクラウドの会話のミスマッチがないことを確認することができます。

バイスをDTDLモデルに自動的に一致させることが役立つ優れた例は、Azure IoT Explorerで説明できます。デバイスはIoT Hubに接続するときに自己申告し、Azure IoT Explorerにはモデルのローカルコピーがあるため、ringBuzzerコマンドを送信するためのUIが自動的に表示されました。

f:id:matsujirushix:20200810214747p:plain

ありがとう、IoT Plug and Play。おかげでどのアプリケーションやツールでも、デバイスの機能を確認して活用できます。

Azure SDK for Embedded C

以前は、IoTデバイスにAzure IoTを対応させるのにAzure IoT C SDKもしくはAzure IoTのMQTTフロントエンドで実装していました。

Azure SDK for Embedded Cに飛び込もう!

Azure SDK for Embedded Cは、小さな組み込みデバイス(IoT)がAzureサービスと通信できるように設計されています。

最近、Azure SDKチームは組み込みデバイスや制限付きデバイスを対象にしたC SDKを用意しました。汎用でプラットフォーム非依存、バッファ操作やロギング、JSON操作、など。この軽量なインフラストラクチャの上に、Azure StorageやAzure IoTなどのクライアントライブラリが開発されました。

Azure IoTクライアントライブラリについてもっと知りたいなら、こちらを参照ください。簡単に言うと、Wio Terminalで使用するために実装しなければいけないものは次のとおりです。

  • このサンプルでは対称キーを使用して認証するため、セキュリティトークンの生成ができる必要があります。
  • Azure IoTクライアントライブラリはAzure IoT規則に合ったMQTTトピックの作成に役立ちます。ただし、独自でMQTT実装する必要があります。MQTT実装が内部に組み込まれたAzure IoT C SDKとは大きな違いです。サンプルアプリケーションはNick O’LearyのMQTTライブラリ、PubSubClientを使用しています。
  • そしてもちろん、独自のアプリケーションロジックを実装する必要があります。サンプルアプリケーションは、Wio TerminalのIMUドライバーを使って2秒間隔に加速度を取得しています。また、ringBuzzerコマンドを受けるとブザーを鳴らします。

結論

この投稿がお役に立てば幸いです。「Hey、わたしのWio Terminalは加速度データをクラウドに送れるんだぜ!」を超える、記事をすぐに公開する予定です。リモートファームウェアアップデートなど、高度な使用例に乞うご期待!