Wio LTE+SORACOM Air/Beamを使いThingScaleに接続する
- Toru Murasawa
本チュートリアルでは、株式会社ソラコム様より販売されているArduino互換LTE対応マイコンボードWio LTEを"SORACOM Air"のSIMでLTE接続し、クラウド連携サービス"SORACOM Beam"でThingScaleに接続する手順とサンプルコードを掲載しています。
またここでは、"SORACOM Beam"経由によりThingScaleのビルトインMQTTブローカに接続しPublish API経由でデバイスにメッセージをプッシュする方法を学びます。
SORACOMの使い方について
本チュートリアルでは"SORACOM Air" "SORACOM Beam"の詳細については説明していません。
SORACOMサービス全般についてはSORACOM の概要をごらんください。
1. チュートリアルでやること
Wio LTEとThingScale接続するために、"SORACOM Air"のNano-SIMを装着してインターネット接続できるようにします。
概要については株式会社ソラコム様の以下Blogを参照してください。
今回は製造元のSeeed株式会社様が提供されているサンプルコードをベースにWioLTEの内蔵LEDをThingScaleのPublish APIを利用してインターネット側からoff/onします。
また、サンプルコードは定期的にWioLTEの起動時間(uptime)をJSONメッセージでThingScaleに送信(MQTT Publish)します。
2. WioLTEのセットアップ
ここからWioLTEからThingScaleのビルトインMQTTブローカに接続(Subscribe)するための設定を行います。
また、ThingScaleとの接続に必要なMQTTライブラリ(Arduino Client for MQTT)をArduino IDEのライブラリにインポートしておきます。
ThingScaleでは、クラウドからデバイスへのプッシュはデバイス側で特定のMQTTトピックをSubscribeする事で行います。
Publish APIにより、デバイスレジストリに登録済みのデバイスに対してダイレクトにメッセージをPublishします。
サンプルコード
- WioLTE_ThingScale
サンプルコード(github):thingscale_sample1.ino
ユーザID/デバイストークン
ThingScaleの30日間トライアルアカウントを取得しておきます。(オンラインサインアップ:30日フリートライアルの開始)
ユーザIDとデバイストークンはDev Consoleの'Admin Profile'ページからを確認できます。
お使いの環境に応じて、MQTTトピックを設定(変更)してください。
(snip) // ThingScale #define OUT_TOPIC "<デバイストークン>/json" #define IN_TOPIC "<デバイストークン>/<SIMのIMSI番号>/subscribe" (snip)
MQTT接続時の認証について
"SORACOM Beam"を経由する場合は、MQTTブローカーに接続する時に必要なIDとパスワードはデバイスに埋め込む必要はなく"SORACOM Beam"側に入力します。
また、TLSが利用できないデバイスでも"SORACOM Beam"側が暗号化をオフロードするためThingScaleとの接続においてはセキュアな通信が保証されます。
MQTT接続の場合、username/passwordそれぞれがThingScaleのユーザID(Uで始まるユーザID)/ デバイストークンとなります。
3."SORACOM Beam"の設定
WioLTEの接続先として"SORACOM Beam”を利用するための設定を行います。
WioLTEにSIMを挿入する時の注意点等についてはソラコム様の以下Blogをご確認ください。
WioLTEに挿入した"SORACOM Air"のSIMに"SORACOM Beam”用の任意のグループを作成し、以下内容で設定してください。
(転送先)
- プロトコル:MQTTS
- ホスト名:m.thingscale.io
- ポート番号:8883
- ユーザ名:<ThingScale_User_ID>
- パスワード:<Device_Token>
(オプション)
- IMSI付与:ON
"SORACOM Beam"について
"SORACOM Beam"はIoT デバイスにかかる暗号化等の高負荷処理や接続先の設定を、クラウドにオフロードできるサービスです。
詳しくはこちらをごらんください。SORACOM Beamについて
4. WioLTEを実行する。
サンプルコードをコンパイルしWioLTEにアップロードします。動作確認はArduino IDE1.8.5で行いました。
シリアルモニタ(ここではputtyを利用)を確認し、正しく動作しているか確認します。
fig.1 シリアルモニタ
5. WioLTEを新規デバイスとして登録する。
サンプルコードを実行すると、WioLTEが自動的にSORACOMのAPNに接続し"SORACOM Beam”が付与したIMSIの名前がデバイスIDとして登録されています。
オートプロビジョニング
新規デバイスを接続し、ThingScaleにデータを送信(Publish)すると、ThingScaleは未使用状態(unused)でデバイスを登録します。(オートプロビジョニング)
今回は、デバイスからのデータ収集(uptime)も行いますのでチャネルの作成とデバイスへのチャネルの紐付けが必要です。
fig.2 管理コンソールの'Device'メニュー->'Device Management'ページより、WioLTEが認識されているか確認します。(click to enlarge)
WioLTEのIMSI番号をクリックして、チャネル設定を行います。
事前に'Channel'メニュー->'+ New Channel'より新規のチャネル作成を行っておいてください。(ここでは事前に作成したCH2をマップしています)
オートプロビジョニング直後はデバイスが無効となっているため"Enabled:"を"true"に変更するのを忘れないでください。
fig.3 デバイスの編集とチャネルマップ
6. WioLTEから送信されてくるデータを確認する。
'Stream'ページから5.で設定したチャネルにWioLTEからの送信データ(uptime)が格納されていることを確認します。
fig.4 ストリームの確認
7. パブリッシュAPIでWioLTEに制御ペイロードを送る
'Publish'メニューより、WioLTEに対してledのoff/onを指示するペイロードを送信します。
WioLTE側のサンプルプログラムでは常時、ThingScaleのビルトインMQTTブローカの特定トピックをSubscribeしており、Publish APIにてデバイスへPublishされたMQTTメッセージを受け取り、ペイロードの内容に応じてledのoff/onを実行します。
LEDをONする
ペイロードに'led:on'を入力後、デバイスID<IMSI番号>に対してMQTTメッセージをPublishします。
WioLTE側ではコンソールに"led:on"表示が出力され、LEDが点灯します。
fig.5-1 Management Consoleから'led:on'をPublishする。
fig5-2 シリアルモニタ
LEDをOFFする
ペイロードに'led:off'を入力後、デバイスID:<IMSI番号>に対してMQTTメッセージをPublishします。
WioLTE側では「led:off」表示が出力され、LEDが消灯します。
8. まとめ
ここまでで以下を学びました。
- WioLTEで"SORACOM Air" "SORACOM Beam"を使ってIoTデバイスとして活用する。
- "SORACOM Beam"とThingScaleの連携の仕組みを学ぶ
- ThingScaleでのデバイス管理とチャネルの仕組みを学ぶ
- MQTTによるPub/Subの概念を学ぶ
ThingScaleに蓄積されたデータはREST API経由(/wiki/spaces/TD/pages/8454146)でアプリケーションから利用できます。
デバイスへのコマンド配信はREST API経由(/wiki/spaces/TD/pages/8454180)で利用が可能になります。
ThingScaleの役割
ThingScaleがデバイス管理と認証、データ蓄積、双方向通信フレームワークを提供するためアプリケーション開発者は特にMQTTやデバイス管理といった低レベルのロジックを意識する事なく、IoTアプリケーションとしての本質的なコーディングのみ集中する事が可能になります。
※SORACOM、SORACOM AirおよびSORACOM Beamは、株式会社ソラコムの登録商標または商標です。
SORACOM、SORACOM AirおよびSORACOM Beamは、株式会社ソラコムの登録商標または商標です。
(商標に関する表示)SORACOM、SORACOM AirおよびSORACOM Beamは、株式会社ソラコムの登録商標または商標です。する表示)SORACOM、SORACOM AirおよびSORACOM Beamは、株式会社ソラコムの登録商標または商標です。
Steps:
© 2014-2022 SENSINICS,LLC