AWS IoTの使い方② M5Stack UiFlowで簡単MQTT通信 遠隔操作 監視の方法

AWS IoT UiFlowでMQTT通信する方法

前回までで「AWS(アマゾンウェブサービス)」の「AWS IoT」を使用したIoTの環境が整いました。

今回からは実際にM5Stack社のデバイス(モノ)を使うことを例として「AWS IoT」を使用したクラウド経由の遠隔操作、データ監視を行う方法を詳しく紹介します。


「AWS IoT」の使い方、初期設定等については以下のリンクで詳しく紹介しています。

AWS IoTの使い方① 初期設定、デバイス登録、MQTT接続テスト方法。
AWS IoTを使用したクラウド経由での遠隔操作とデータ監視の方法を数回に分けて紹介。今回はAWS IoTを使うための準備方法と動作確認方法を詳しく紹介します。
まずはクラウドとの通信方法の確認として、プログラムには「ビジュアルプログラミング」の「UiFlow」を使用します。プログラミングをやったことがない方でも比較的簡単に実現できてクラウドサーバーの理解にもつながると思います。

今回はシンプルな相互データ通信のみですが、これができれば遠隔操作もデータ監視もできることになります。サーバーにデータを蓄積して管理、解析等行う方法は「AWS」で提供されているので、まずは基本的な相互データ通信の方法を確認してみましょう。

「AWS」を使用するにはアカウントの作成が必要です。通信のみであれば非常に安価(メッセージ100万件あたり1.2ドル)ですが、データのモニターや解析等のサービスを使用するにはそれなりに費用が発生します。一定期間は無料で使用できるものも多いですが、少なからず費用が発生する可能性があることをご理解の上、自己責任で実施をお願いいたします。

AWSの利用料金については以下のリンクにてご確認ください。

AWS の料金 - クラウドによるコスト削減 | AWS公式
AWS のご利用料金の仕組みとクラウドを活用したコスト削減方法をはじめ、料金やコスト削減額を簡単に計算できる各種ツールについてご紹介しています。 AWS の料金モデルは。水道や電気などの公共料金のようにサービスを消費した分だけ支払う従量課金制です。利用を停止したときの追加コストや解約料金は発生しません。

私は好奇心だけで無知なまま始めたので、使い方を間違って¥5,000程捨ててしまいましたw
これについては失敗談として以下のリンクで詳しく紹介しています。
こうならないためには「AWS」の「請求状況の確認」と「意図しない課金が発生した場合の停止方法」を知っておくことが大切なため、この方法も以下のリンクで紹介しています。

気軽にAWSでIoTやったら無知で痛い目見た話。課金の止め方。
クラウドでIoTやりたい!好奇心だけでAWS(アマゾンウェブサービス)の無料枠で手軽にできると思ってやったら無知すぎて無駄な課金で¥5,000以上捨ててしまった話。
スポンサーリンク

1.今回実現したいこと

今回はインターネットに接続可能な2個のデバイス(M5Stack社製)を使用して、クラウド経由での遠隔操作とデータ監視を行います。
以下から動作や全体の構成、使用するものやプログラミング環境について詳しく紹介します。

・動作紹介、全体の構成

遠隔操作の例としては、親機側(CORE2)から子機側(M5StickC Plus)のLEDを操作します。
子機側からの信号を親機側が受けた時には画面の色を一瞬変化させます。

データ監視の例としては、子機側で測定した温湿度、気圧のデータを親機側からの操作で取得して親機に表示させます。子機側からの操作でも測定データを送信して親機に表示させます。

通信にはMQTTを使用し、全体の構成は下画像のようになります。

AWS MQTT接続でIoT 簡単遠隔操作、監視

・使うもの

使うものとしては下画像のように「M5Stack社」製の2つのデバイス(モノ)とセンサーを使用します。

AWS IoT 動作テスト

親機としては「CORE2(画像左側)」を使用し、子機には「M5StickC Plus」に環境センサ「ENVⅢ」を接続(画像右側)して温湿度と気圧を測定し表示します。


「CORE2」「M5StickC Plus」「ENVⅢ」については以下のリンクで詳しく紹介しています。

M5Stack CORE2について、デモ画面、基本仕様、端子配列(機能)等を詳しく紹介
CORE2について工場出荷時デモ画面の動作確認方法や外観紹介から基本仕様、端子配列(一覧表にまとめました)、端子機能等を詳しく紹介します。
M5StickC Plusの使い方、初期設定、サンプルプログラム、M5StickCとの違い等を詳しく紹介
M5StickC PlusをArduino IDEやPlatformIOで使うための初期設定やサンプルプログラムでの動作確認の方法です。ビジュアルプログラミングのUiFlowの初期設定についても紹介します。
I2C通信の使い方をサンプルプログラムで詳しく紹介(Arduinoコマンド)
温度と湿度の測定できるセンサ(ENV Ⅲ)からライブラリ使用せずにデータを取得する方法を例にI2C通信の使い方を紹介します。データはM5StickC Plusの液晶表示器に表示します。

使用するものは以下になりますが、今回は「UiFlow」を使用するため「M5Stack社」のデバイスなら何でも良いので、慣れた方なら手持ちのデバイスに置き換えて動作確認してみると、より理解が深まると思います。


・UiFlow(ビジュアルプログラミング)とは

「UIFlow」とは「M5Stackシリーズ」のための「ビジュアルプログラミング」の開発環境で、無償で使用することができます。

「ビジュアルプログラミング」では、日本語で「もし〜なら〜する」というように日本語の書かれたブロックを組み合わせていくだけです。

基本的には「ビジュアルプログラミング」でプログラムを作成しますが、「python(micro python)」のプログラムも自動で生成されており、切り替えて使用することができます。
※「python」から「ビジュアルプログラム」への変換はできません。

プログラミングはブラウザを使用して作成を行います。
プログラムの実行、書込みはWi-Fi通信経由で行うため、Wi-Fi環境のある場所で使用する必要があります。
有線接続の「インストール版」もありますが「ブラウザ版」より更新が遅く、使える機能が少なかったりするので「ブラウザ版」の使用をおすすめします。

UiFlowでプログラムを行うためには専用のソフト「M5Burner」を使用してデバイス本体に「ファームウェア」を書き込む必要があります。

「ファームウェア」を書き込むことでパソコン上のプログラムを実行し本体で動作確認できるようになるため、毎回プログラムの全てを書き込む必要がなくなります。
最終的に完成したプログラムを単体で動作させたい時に書き込み(ダウンロードという)を行います。

UiFlowの使い方については以下のリンクで詳しく紹介しています。

最新版UIFlowの使い方。初期設定から動作確認まで詳しく紹介
M5Stack CORE2,StickC,ATOM LITE等でビジュアルプログラミング(ブロックプログラミング)の開発環境UIFlowを使うための使い方を詳しく紹介します。
スポンサーリンク

2.AWS(Amazon Web Services)とは

「AWS」とは「Amazon Web Services」の略で「アマゾン」がインターネット経由で200以上のサービスを提供している「クラウドコンピューティングサービス」のことです。

「AWS」ではクラウドサーバーを使用して情報処理から大容量データ記録、データベースによるデータ管理から機械学習、AIによるデータ分析等、用途に応じて最適なツールを選択して使用することができます。
料金については、各サービスの中から必要なものを使用した分だけ支払えば良いため、長期の契約や複雑なライセンスは必要ありません。

今回使用するIoTの機能「AWS IoT Core」にも様々な機能があり、何十億ものデバイスを安全に接続、管理でき、様々な業種向けにデータ収集、保存、分析するツールも提供されています。

詳細は以下リンクの「AWS」の公式ページでご確認ください。

アマゾン ウェブ サービス(AWS クラウド)- ホーム
Amazon Web Services は、信頼性と拡張性に優れたクラウドコンピューティングサービスを低料金で提供します。アカウント作成は無料。料金はご利用分だけです。
スポンサーリンク

3.通信方式 MQTTとは

今回クラウド経由のデータ通信を行う方法としてMQTT (Message Queuing Telemetry Transport)を使用します。MQTTとは、データパケットの小さい軽量な通信手段です。

HTTP通信では、送信側のリクエストと、受信側のレスポンスデータそれぞれに詳細な情報を含むヘッダーを使用しますが、MQTTのヘッダーは通信に必要な最小限の情報のみです。

MQTTは多くの情報を、高速で、少ない電力で通信することができるため、バッテリ等で動作する携帯デバイス、特にIoTによる遠隔操作、データ監視に最適な通信方法です。

通信方法は「パブリッシュ(送信)サブスクライブ(受信)」パターンを使用して、デバイス間でメッセージを送受信します。これにはブローカーという中継サーバーを使用します。

データの送信先は「トピック」として任意の名前を設定して「トピック」宛に送受信を行います。

  • パブリッシュ(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」の使い方は以下のリンクで詳しく紹介しています。

AWS IoTの使い方① 初期設定、デバイス登録、MQTT接続テスト方法。
AWS IoTを使用したクラウド経由での遠隔操作とデータ監視の方法を数回に分けて紹介。今回はAWS IoTを使うための準備方法と動作確認方法を詳しく紹介します。
最新版UIFlowの使い方。初期設定から動作確認まで詳しく紹介
M5Stack CORE2,StickC,ATOM LITE等でビジュアルプログラミング(ブロックプログラミング)の開発環境UIFlowを使うための使い方を詳しく紹介します。

・UiFlowでMQTT通信する方法

「UiFlow」で「MQTT」通信するには「AWS IoT」で登録したデバイス情報とクライアント認証ファイルを使用して以下のように行います。

MQTTを使用するには下画像のように[高度なブロック]をクリックして表示される[MQTT]のブロックを使用します。

UiFlowでMQTT通信する方法 初期設定

「MQTT」の通信設定は以下のように行います。
下画像のオレンジの文字部は「AWS IoT」で設定した情報を入力します。

UiFlowでMQTT通信する方法 初期設定

「プライベートキー」と「クライアント証明書」ファイルは下画像のようにファイルアイコンをクリックして下画像のように選択して読み込みます。

UiFlowでMQTT通信する方法 初期設定

2つのファイル読み込むと、それぞれ以下のように選択できるようになるので選択して設定します。

UiFlowでMQTT通信する方法 初期設定

「AWS IoT」のエンドポイントの確認やデバイス登録の方法、プライベートキーとクライアント認証ファイルの発行方法は以下のリンクで詳しく紹介しています。

AWS IoTの使い方① 初期設定、デバイス登録、MQTT接続テスト方法。
AWS IoTを使用したクラウド経由での遠隔操作とデータ監視の方法を数回に分けて紹介。今回はAWS IoTを使うための準備方法と動作確認方法を詳しく紹介します。

・その他使用するブロックの紹介

その他使用するブロックについても紹介しておきます。

UiFlowの使い方 その他ブロック

[NetWork]では「SSID」と「パスワード」を設定することで「Wi-Fi接続」を行うことができます。

UiFlowの使い方 その他ブロック

[画面]では液晶画面の背景色等を設定できます。

UiFlowの使い方 その他ブロック

[ラベル]では液晶画面に配置した[Label]に表示する内容を設定できます。

UiFlowの使い方 その他ブロック

[テキスト]を使用することで表示内容や送信する文字列を設定できます。

UiFlowの使い方 その他ブロック

[数学]では数値を設定したり、計算式を入力することができます。

UiFlowの使い方 その他ブロック

[変数]ではデータを格納する変数を設定することができます。[変数の作成]で変数を作成すると上画像のように使用することができます。
今回は「data」という変数を作成しています。

UiFlowの使い方 その他ブロック

[Map]を使用することで「キー」と「値(バリュー)」の組み合わせでデータを扱うことができるようになり、変数に格納して使用します。

UiFlowの使い方 その他ブロック

[JSON]を使用することで「MAP」のデータと「JSON」データの相互変換を行うことができ「MQTT」通信で送受信するデータとして使用します。

UiFlowの使い方 その他ブロック

[LED]はLEDを搭載したデバイスのLEDのON/OFF制御に使用します。

UiFlowの使い方 その他ブロック

[イベント]の「ずっと」の中には繰り返し処理する処理を記入します。
ボタンの使用もここで設定します「wasPressed」は「ボタンが押された時」の処理を意味します。

UiFlowの使い方 その他ブロック

[タイマー]でプログラム内での遅延時間を設定することができます。


・ホスト(親機)側サンプルプログラム

「CORE2」を使用したホスト(親機)側のサンプルプログラムは以下になります。

画面の表示は「Label」を画面上にドラッグして以下のような「Font」設定にして作成しています。

UiFlowでMQTT通信する方法 CORE2

メインのプログラムは以下のようになります。

UiFlowでMQTT通信する方法 CORE2

定期的にデータを送り続けたい場合は以下のように「ずっと」の部分を追加します。
下画像の場合は5秒ごとにデータを送信するプログラムになります。

UiFlowでMQTT通信する方法 CORE2
定期的にデータを送信するために「[秒]停止」のブロックを使用しましたが、「[ミリ秒]停止」のブロックと間違えると、大量にデータを送信することになるので注意してください!

・ローカル(子機)側サンプルプログラム

「M5StickC Plus」を使用したローカル(子機)側のサンプルプログラムは以下になります。

画面の表示は「Label」を画面上にドラッグして以下のような「Font」設定にして作成しています。

UiFlowでMQTT通信する方法 M5StickC Plus

温湿度を測定する環境センサ「ENVⅢ」は以下のように設定します。

UiFlowでMQTT通信する方法 センサENVⅢの設定

上画像のように「Units」の「+」アイコンをクリックします。

UiFlowでMQTT通信する方法 センサENVⅢの設定

使用できるセンサの一覧が表示されるので「ENVⅢ」をクリックして選択します。
「port:」は「A」を選択して[OK]ボタンをクリックします。

下画像のように[Units]をクリックすると[環境]が選択できるようになって「ENVⅢ」用のブロックが使用できるようになります。

UiFlowでMQTT通信する方法 センサENVⅢの設定

メインのプログラムは以下のようになります。

UiFlowでMQTT通信する方法 M5StickC Plus

・動作確認

実際に動作確認してみましょう。
MQTTの通信データ確認には「AWS IoT」の「MQTTテストクライアント」を使用します。

「MQTTテストクライアント」は下画像のように「AWS IoT」のページからアクセスできます。

AWS IoT MQTTテストクライアントの使い方

「MQTTクライアント」の使用方法は以下のリンクで詳しく紹介しています。

AWS IoTの使い方① 初期設定、デバイス登録、MQTT接続テスト方法。
AWS IoTを使用したクラウド経由での遠隔操作とデータ監視の方法を数回に分けて紹介。今回はAWS IoTを使うための準備方法と動作確認方法を詳しく紹介します。

サンプルプログラムを書き込んだ2つのデバイスを並べて動作確認を行います。
画像の左側が親機の「CORE2」、右側が子機の「M5StickC Plus」に環境センサ「ENVⅢ」を接続したものです。

AWS IoT 動作テスト

「CORE2」は電源ON時に「M5SickC」のデータを1回取得します。
この時に「M5StickC」の電源が入っていないと上画像のように「CORE2」にはデータは表示されません。

AWS IoT 動作テスト

「CORE2」のボタンAを押すと、トピック[device/01/local]に空のJOSNデータ「{“”:””}」をパブリッシュ(送信)します。

AWS IoT 動作テスト

「CORE2」の画面が青色になり、画像ではわかりにくいですが「M5StickC」の赤LEDが点灯します。

AWS IoT 動作テスト

「M5StickC」はトピック[device/01/local]へのサブスクライブ(受信)によって、センサのデータを「CORE2」用のトピック[device/host]にJSON形式でパブリッシュ(送信)します。

ここまでの動作を「MQTTテストクライアント」で確認すると下画像のようになります。
トピック[device/01/local]のサブスクライブを受けて[device/host]へ測定データがパブリッシュされているのが確認できます。

AWS IoT MQTTテストクライアント動作確認
AWS IoT 動作テスト

「CORE2」がデータを受信すると、画面にデータを表示し、画面が青から白色に変わります。

AWS IoT 動作テスト

「M5StickC」のボタンAを押すと「CORE2」のトピック[device/host]へ測定データをJSON形式でパブリッシュ(送信)します。

ここまでの動作を「MQTTテストクライアント」で確認すると下画像のようになります。
トピック[device/host]へ測定データがパブリッシュされているのが確認できます。

AWS IoT MQTTテストクライアント動作確認
AWS IoT 動作テスト

「CORE2」のトピック[device/host]へのサブスクライブ(受信)によって「CORE2」では受信したJSONデータを処理して画面に表示します。
画面の色は青に変化します。

AWS IoT 動作テスト

「CORE2」画面のデータ更新が完了すると画面は白に変わります。

今回はそれぞれのボタンを操作することでデータの送受信を行なっています。
自動でデータの送受信をする場合はUiFlowの「ずっと」ブロックを使用して行いますが、送受信間隔を短くし過ぎると大量にデータを送信して課金に関わるカウントが増えることになるため、よく確認してから行ってください!
「AWS IoT」の「MQTTテストクライアント」でサブスクリプションに「#」を指定すると全ての受信データを表示することができます。
無駄な課金が発生しないように、サインアウトする前や、デバイスを使用していない時に、意図しないデータの送受信が行われていないかを必ず確認するようにしましょう。
デバイス使用時には送受信をしていなくても接続時間として課金のカウントがされています。課金額としては微小(初回12ヶ月は225万分/月まで無料)ですので数台程度なら大丈夫と思いますが、デバイス数が複数になるとカウントも増えますので、使用しないデバイスの通信接続は遮断しておきましょう。

5.まとめ

M5Stack社の「CORE2」と「M5StickC Plus」に「ENVⅢ」を接続して「AWS IoT」を使用したクラウド経由の遠隔操作、データ監視を行う方法を紹介しました。

「AWS IoT」を使用して、デバイスの登録を行うことで、個別の「セキュリティ証明書」と「秘密鍵」を作成することができ、クラウド経由での安全なデータ通信を行うことができます。

証明書と秘密鍵は紛失や流出をしないよう大切に管理しましょう。
紛失や流出の可能性がある場合は、個別に無効化できるように証明書と秘密鍵は各デバイス個別に設定しておきましょう。

通信にはデータパケットの小さい「MQTT」通信で行い、設定した「トピック」宛に「パブリッシュ(送信)ー サブスクライブ(受信)」パターンを使用して、中継サーバーのブローカー(Broker)経由で行われます。

「M5Stack」社のビジュアルプログラミング環境「UiFlow」を使用することで、プログラミングをやったことがない方でも、比較的簡単にMQTT通信を使用したクラウド経由の遠隔操作、データ監視を体験することができます。

今回はシンプルな相互データ通信の方法を紹介しましたが、これができれば複雑な遠隔操作やデータ監視もできることになります。サーバーにデータを蓄積して管理、解析等行う方法は「AWS」で提供(制限付き無償期間あり)されているので、ここでも無償で利用できる範囲で色々紹介していければと思います。

今回はビジュアルプログラミングでMQTT通信を体験してみましたが、次回はより自由度の高い「Arduinoコマンド」を使用した「C言語」でクラウド経由でMQTT通信する方法をサンプルプログラムも以下のリンクで紹介しています。
AWS IoTの使い方③ Arduinoコマンドで簡単MQTT通信 遠隔操作 監視の方法
M5Stack社のCORE2とM5StickC PlusでC言語ベースのArduinoコマンドでAWS IoTを使用したクラウド経由の遠隔操作、データ監視を行う方法を詳しく紹介。
「AWS」には「AWS IoT」以外にも様々なサービスがあります。
登録して1年間はサービスごとに無料枠が設定されており、その範囲内であれば無料で使用できますが、無料枠の範囲外になると課金が始まるものも出てくるため、ご自身でよく確認してご利用ください。

私はよく確認せずに外部サービスのチュートリアルを安易に利用したために失敗しました・・・
こうならないためにも、以下のリンクの失敗談の中で請求状況の確認方法等を紹介しています。私の環境での確認方法となりますが、ご参考までにご確認ください。
気軽にAWSでIoTやったら無知で痛い目見た話。課金の止め方。
クラウドでIoTやりたい!好奇心だけでAWS(アマゾンウェブサービス)の無料枠で手軽にできると思ってやったら無知すぎて無駄な課金で¥5,000以上捨ててしまった話。

コメント

タイトルとURLをコピーしました