前回までで「AWS(アマゾンウェブサービス)」の「AWS IoT」を使用したIoTの環境が整いました。
今回からは実際にM5Stack社のデバイス(モノ)を使うことを例として「AWS IoT」を使用したクラウド経由の遠隔操作、データ監視を行う方法を詳しく紹介します。
「AWS IoT」の使い方、初期設定等については以下のリンクで詳しく紹介しています。
![](https://logikara.blog/wp-content/uploads/2023/01/AWS_setup_eye-160x90.webp)
今回はシンプルな相互データ通信のみですが、これができれば遠隔操作もデータ監視もできることになります。サーバーにデータを蓄積して管理、解析等行う方法は「AWS」で提供されているので、まずは基本的な相互データ通信の方法を確認してみましょう。
AWSの利用料金については以下のリンクにてご確認ください。
![](https://logikara.blog/wp-content/uploads/cocoon-resources/blog-card-cache/c94cb44bac0b155cad9e923137017c79.png)
私は好奇心だけで無知なまま始めたので、使い方を間違って¥5,000程捨ててしまいましたw
これについては失敗談として以下のリンクで詳しく紹介しています。
こうならないためには「AWS」の「請求状況の確認」と「意図しない課金が発生した場合の停止方法」を知っておくことが大切なため、この方法も以下のリンクで紹介しています。
![](https://logikara.blog/wp-content/uploads/2023/01/AWS_beginner_eye-160x90.webp)
1.今回実現したいこと
・動作紹介、全体の構成
・使うもの
・UiFlow(ビジュアルプログラミング)とは
2.AWS(Amazon Web Services)とは
3.通信方式 MQTTとは
4.UiFlow(ビジュアルプログラミング)で動作確認
・UiFlowでMQTT通信する方法
・その他使用するブロックの紹介
・ホスト(親機)側サンプルプログラム
・ローカル(子機)側サンプルプログラム
・動作確認
5.まとめ
1.今回実現したいこと
今回はインターネットに接続可能な2個のデバイス(M5Stack社製)を使用して、クラウド経由での遠隔操作とデータ監視を行います。
以下から動作や全体の構成、使用するものやプログラミング環境について詳しく紹介します。
・動作紹介、全体の構成
遠隔操作の例としては、親機側(CORE2)から子機側(M5StickC Plus)のLEDを操作します。
子機側からの信号を親機側が受けた時には画面の色を一瞬変化させます。
データ監視の例としては、子機側で測定した温湿度、気圧のデータを親機側からの操作で取得して親機に表示させます。子機側からの操作でも測定データを送信して親機に表示させます。
通信にはMQTTを使用し、全体の構成は下画像のようになります。
![AWS MQTT接続でIoT 簡単遠隔操作、監視](https://logikara.blog/wp-content/uploads/2023/01/mqtt_block_01-1024x384.webp)
・使うもの
使うものとしては下画像のように「M5Stack社」製の2つのデバイス(モノ)とセンサーを使用します。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_08.webp)
親機としては「CORE2(画像左側)」を使用し、子機には「M5StickC Plus」に環境センサ「ENVⅢ」を接続(画像右側)して温湿度と気圧を測定し表示します。
「CORE2」「M5StickC Plus」「ENVⅢ」については以下のリンクで詳しく紹介しています。
![](https://logikara.blog/wp-content/uploads/2022/02/CORE2_eye-160x90.jpg)
![](https://logikara.blog/wp-content/uploads/2022/01/M5StickC_Plus_eye_01-160x90.jpg)
![](https://logikara.blog/wp-content/uploads/2023/01/Arduino_i2c_eye-160x90.webp)
使用するものは以下になりますが、今回は「UiFlow」を使用するため「M5Stack社」のデバイスなら何でも良いので、慣れた方なら手持ちのデバイスに置き換えて動作確認してみると、より理解が深まると思います。
・UiFlow(ビジュアルプログラミング)とは
「UIFlow」とは「M5Stackシリーズ」のための「ビジュアルプログラミング」の開発環境で、無償で使用することができます。
「ビジュアルプログラミング」では、日本語で「もし〜なら〜する」というように日本語の書かれたブロックを組み合わせていくだけです。
プログラミングはブラウザを使用して作成を行います。
プログラムの実行、書込みはWi-Fi通信経由で行うため、Wi-Fi環境のある場所で使用する必要があります。
有線接続の「インストール版」もありますが「ブラウザ版」より更新が遅く、使える機能が少なかったりするので「ブラウザ版」の使用をおすすめします。
UiFlowでプログラムを行うためには専用のソフト「M5Burner」を使用してデバイス本体に「ファームウェア」を書き込む必要があります。
UiFlowの使い方については以下のリンクで詳しく紹介しています。
![](https://logikara.blog/wp-content/uploads/2022/01/UIFlow_eye-160x90.png)
2.AWS(Amazon Web Services)とは
「AWS」とは「Amazon Web Services」の略で「アマゾン」がインターネット経由で200以上のサービスを提供している「クラウドコンピューティングサービス」のことです。
「AWS」ではクラウドサーバーを使用して情報処理から大容量データ記録、データベースによるデータ管理から機械学習、AIによるデータ分析等、用途に応じて最適なツールを選択して使用することができます。
料金については、各サービスの中から必要なものを使用した分だけ支払えば良いため、長期の契約や複雑なライセンスは必要ありません。
今回使用するIoTの機能「AWS IoT Core」にも様々な機能があり、何十億ものデバイスを安全に接続、管理でき、様々な業種向けにデータ収集、保存、分析するツールも提供されています。
詳細は以下リンクの「AWS」の公式ページでご確認ください。
![](https://logikara.blog/wp-content/uploads/cocoon-resources/blog-card-cache/c94cb44bac0b155cad9e923137017c79.png)
3.通信方式 MQTTとは
今回クラウド経由のデータ通信を行う方法としてMQTT (Message Queuing Telemetry Transport)を使用します。MQTTとは、データパケットの小さい軽量な通信手段です。
HTTP通信では、送信側のリクエストと、受信側のレスポンスデータそれぞれに詳細な情報を含むヘッダーを使用しますが、MQTTのヘッダーは通信に必要な最小限の情報のみです。
通信方法は「パブリッシュ(送信)ー サブスクライブ(受信)」パターンを使用して、デバイス間でメッセージを送受信します。これにはブローカーという中継サーバーを使用します。
データの送信先は「トピック」として任意の名前を設定して「トピック」宛に送受信を行います。
- パブリッシュ(Publish)とは
メッセージを送信するデバイスが、送信先としてトピック(Topic)を指定して、ブローカーに対してメッセージを発行(送信)することです。 - サブスクライブ(Subscribe)とは
メッセージを受信するデバイスが、受信先としてトピック(Topic)を指定して、ブローカーに対してメッセージを購読(受信)することです。 - ブローカー(Broker)とは
ブローカーは「パブリッシュ」されたメッセージを「サブスクライブ」しているデバイスに対して、メッセージを配信します。
トピックに対してのアクセス制御や認証などのセキュリティ機能も提供することができます。
MQTTではシステムやネットワークが、障害や故障などの予期しない状況に対して、影響を最小限に抑えるための複数のバックアップや代替手段を持っています。
例えば、ブローカーAとブローカーBがあって、ブローカーAが故障した場合、ブローカーBが自動的にブローカーAの役割を引き継ぎ、通信を継続することができるため、確実にデータを送信することができます。
4.UiFlow(ビジュアルプログラミング)で動作確認
実際に「UiFlow」を使用して2つのデバイス「M5Stack」社の「CORE2」と「M5StickC Plus」に環境センサ「ENVⅢ」を接続して「AWS IoT」のクラウド経由で「MQTT」通信で遠隔操作、データ監視を行う方法を紹介します。
「AWS IoT」の初期設定、デバイスの登録方法や「UiFlow」の使い方は以下のリンクで詳しく紹介しています。
![](https://logikara.blog/wp-content/uploads/2023/01/AWS_setup_eye-160x90.webp)
![](https://logikara.blog/wp-content/uploads/2022/01/UIFlow_eye-160x90.png)
・UiFlowでMQTT通信する方法
「UiFlow」で「MQTT」通信するには「AWS IoT」で登録したデバイス情報とクライアント認証ファイルを使用して以下のように行います。
MQTTを使用するには下画像のように[高度なブロック]をクリックして表示される[MQTT]のブロックを使用します。
![UiFlowでMQTT通信する方法 初期設定](https://logikara.blog/wp-content/uploads/2023/01/MQTT_setup_01-950x1024.webp)
「MQTT」の通信設定は以下のように行います。
下画像のオレンジの文字部は「AWS IoT」で設定した情報を入力します。
![UiFlowでMQTT通信する方法 初期設定](https://logikara.blog/wp-content/uploads/2023/01/MQTT_setup_02-1024x526.webp)
「プライベートキー」と「クライアント証明書」ファイルは下画像のようにファイルアイコンをクリックして下画像のように選択して読み込みます。
![UiFlowでMQTT通信する方法 初期設定](https://logikara.blog/wp-content/uploads/2023/01/MQTT_setup_03-1024x571.webp)
2つのファイル読み込むと、それぞれ以下のように選択できるようになるので選択して設定します。
![UiFlowでMQTT通信する方法 初期設定](https://logikara.blog/wp-content/uploads/2023/01/MQTT_setup_04.webp)
「AWS IoT」のエンドポイントの確認やデバイス登録の方法、プライベートキーとクライアント認証ファイルの発行方法は以下のリンクで詳しく紹介しています。
![](https://logikara.blog/wp-content/uploads/2023/01/AWS_setup_eye-160x90.webp)
・その他使用するブロックの紹介
その他使用するブロックについても紹介しておきます。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_11-1024x836.webp)
[NetWork]では「SSID」と「パスワード」を設定することで「Wi-Fi接続」を行うことができます。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_08-1024x836.webp)
[画面]では液晶画面の背景色等を設定できます。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_07-1024x836.webp)
[ラベル]では液晶画面に配置した[Label]に表示する内容を設定できます。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_03-1024x836.webp)
[テキスト]を使用することで表示内容や送信する文字列を設定できます。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_02-1024x836.webp)
[数学]では数値を設定したり、計算式を入力することができます。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_01-1024x836.webp)
[変数]ではデータを格納する変数を設定することができます。[変数の作成]で変数を作成すると上画像のように使用することができます。
今回は「data」という変数を作成しています。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_04-1024x836.webp)
[Map]を使用することで「キー」と「値(バリュー)」の組み合わせでデータを扱うことができるようになり、変数に格納して使用します。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_05-1024x836.webp)
[JSON]を使用することで「MAP」のデータと「JSON」データの相互変換を行うことができ「MQTT」通信で送受信するデータとして使用します。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_09-1024x836.png)
[LED]はLEDを搭載したデバイスのLEDのON/OFF制御に使用します。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_10-1024x836.webp)
[イベント]の「ずっと」の中には繰り返し処理する処理を記入します。
ボタンの使用もここで設定します「wasPressed」は「ボタンが押された時」の処理を意味します。
![UiFlowの使い方 その他ブロック](https://logikara.blog/wp-content/uploads/2023/01/UiFlow_Block_06-1024x836.webp)
[タイマー]でプログラム内での遅延時間を設定することができます。
・ホスト(親機)側サンプルプログラム
「CORE2」を使用したホスト(親機)側のサンプルプログラムは以下になります。
画面の表示は「Label」を画面上にドラッグして以下のような「Font」設定にして作成しています。
![UiFlowでMQTT通信する方法 CORE2](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_core2_03-1024x541.webp)
メインのプログラムは以下のようになります。
![UiFlowでMQTT通信する方法 CORE2](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_core2_01-1024x507.webp)
定期的にデータを送り続けたい場合は以下のように「ずっと」の部分を追加します。
下画像の場合は5秒ごとにデータを送信するプログラムになります。
![UiFlowでMQTT通信する方法 CORE2](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_core2_02.webp)
・ローカル(子機)側サンプルプログラム
「M5StickC Plus」を使用したローカル(子機)側のサンプルプログラムは以下になります。
画面の表示は「Label」を画面上にドラッグして以下のような「Font」設定にして作成しています。
![UiFlowでMQTT通信する方法 M5StickC Plus](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_stickc_02-1024x590.webp)
温湿度を測定する環境センサ「ENVⅢ」は以下のように設定します。
![UiFlowでMQTT通信する方法 センサENVⅢの設定](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_stickc_03-1024x456.webp)
上画像のように「Units」の「+」アイコンをクリックします。
![UiFlowでMQTT通信する方法 センサENVⅢの設定](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_stickc_04-1024x520.webp)
使用できるセンサの一覧が表示されるので「ENVⅢ」をクリックして選択します。
「port:」は「A」を選択して[OK]ボタンをクリックします。
下画像のように[Units]をクリックすると[環境]が選択できるようになって「ENVⅢ」用のブロックが使用できるようになります。
![UiFlowでMQTT通信する方法 センサENVⅢの設定](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_stickc_05.webp)
メインのプログラムは以下のようになります。
![UiFlowでMQTT通信する方法 M5StickC Plus](https://logikara.blog/wp-content/uploads/2023/01/uiflow_iot_stickc_01-1024x794.webp)
・動作確認
実際に動作確認してみましょう。
MQTTの通信データ確認には「AWS IoT」の「MQTTテストクライアント」を使用します。
「MQTTテストクライアント」は下画像のように「AWS IoT」のページからアクセスできます。
![AWS IoT MQTTテストクライアントの使い方](https://logikara.blog/wp-content/uploads/2023/01/mqtt_01-1024x299.webp)
「MQTTクライアント」の使用方法は以下のリンクで詳しく紹介しています。
![](https://logikara.blog/wp-content/uploads/2023/01/AWS_setup_eye-160x90.webp)
サンプルプログラムを書き込んだ2つのデバイスを並べて動作確認を行います。
画像の左側が親機の「CORE2」、右側が子機の「M5StickC Plus」に環境センサ「ENVⅢ」を接続したものです。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_01.webp)
「CORE2」は電源ON時に「M5SickC」のデータを1回取得します。
この時に「M5StickC」の電源が入っていないと上画像のように「CORE2」にはデータは表示されません。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_02.webp)
「CORE2」のボタンAを押すと、トピック[device/01/local]に空のJOSNデータ「{“”:””}」をパブリッシュ(送信)します。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_03.webp)
「CORE2」の画面が青色になり、画像ではわかりにくいですが「M5StickC」の赤LEDが点灯します。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_04.webp)
「M5StickC」はトピック[device/01/local]へのサブスクライブ(受信)によって、センサのデータを「CORE2」用のトピック[device/host]にJSON形式でパブリッシュ(送信)します。
ここまでの動作を「MQTTテストクライアント」で確認すると下画像のようになります。
トピック[device/01/local]のサブスクライブを受けて[device/host]へ測定データがパブリッシュされているのが確認できます。
![AWS IoT MQTTテストクライアント動作確認](https://logikara.blog/wp-content/uploads/2023/01/MQTT_test_01-1024x645.webp)
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_05.webp)
「CORE2」がデータを受信すると、画面にデータを表示し、画面が青から白色に変わります。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_06.webp)
「M5StickC」のボタンAを押すと「CORE2」のトピック[device/host]へ測定データをJSON形式でパブリッシュ(送信)します。
ここまでの動作を「MQTTテストクライアント」で確認すると下画像のようになります。
トピック[device/host]へ測定データがパブリッシュされているのが確認できます。
![AWS IoT MQTTテストクライアント動作確認](https://logikara.blog/wp-content/uploads/2023/01/MQTT_test_02-1024x645.webp)
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_07.webp)
「CORE2」のトピック[device/host]へのサブスクライブ(受信)によって「CORE2」では受信したJSONデータを処理して画面に表示します。
画面の色は青に変化します。
![AWS IoT 動作テスト](https://logikara.blog/wp-content/uploads/2023/01/AWS_IoT_Test_08.webp)
「CORE2」画面のデータ更新が完了すると画面は白に変わります。
5.まとめ
M5Stack社の「CORE2」と「M5StickC Plus」に「ENVⅢ」を接続して「AWS IoT」を使用したクラウド経由の遠隔操作、データ監視を行う方法を紹介しました。
「AWS IoT」を使用して、デバイスの登録を行うことで、個別の「セキュリティ証明書」と「秘密鍵」を作成することができ、クラウド経由での安全なデータ通信を行うことができます。
通信にはデータパケットの小さい「MQTT」通信で行い、設定した「トピック」宛に「パブリッシュ(送信)ー サブスクライブ(受信)」パターンを使用して、中継サーバーのブローカー(Broker)経由で行われます。
「M5Stack」社のビジュアルプログラミング環境「UiFlow」を使用することで、プログラミングをやったことがない方でも、比較的簡単にMQTT通信を使用したクラウド経由の遠隔操作、データ監視を体験することができます。
今回はシンプルな相互データ通信の方法を紹介しましたが、これができれば複雑な遠隔操作やデータ監視もできることになります。サーバーにデータを蓄積して管理、解析等行う方法は「AWS」で提供(制限付き無償期間あり)されているので、ここでも無償で利用できる範囲で色々紹介していければと思います。
![](https://logikara.blog/wp-content/uploads/2023/02/AWS_Arduino_eye-160x90.webp)
![](https://logikara.blog/wp-content/uploads/2023/01/AWS_beginner_eye-160x90.webp)
コメント