M5Stackシリーズの従来機でM5Stack Core2 for AWSを実現か?!
はじめに
データアナリティクス事業本部の藤川です。
昨年末にIoTデバイスの新製品発表が多くありました。M5Paper
やRaspberry Pi Pico
など、Arduino系の動きがやや活発でしょうか。M5Paper
やM5Stack CoreInk
など電子ペーパー系M5Stackシリーズのラインナップ追加から目が離せませんが、忘れてならないのは、M5Stack Core2 for AWS
でしょう。
AWS IoT EduKitプログラム
対応やタッチスクリーン標準装備、ハードウェア暗号化チップ内蔵など、エッジコンピューティング環境を簡単に構築できる至れり尽くせりのデバイスとして魅力的です。Powered by AWS
のロゴが映えます。
でも、既存のM5Stackに進化がない訳ではありませんでした。ファームウェア1.7.xに対応したUIFlow Beta
では、証明書付きのMQTT
に対応していました。しかも、NTP
にも対応しているじゃないですか!
今回は、AWS IoT Core
で発行した証明書を使用し、M5Paper
をMQTT
クライアントに設定してみようと思います。
ゴール
前回の記事(Node-REDでAWS IoT Coreを使ってみた | DevelopersIO)と合わせて、次のようなMQTT Pub/Subメッセージングモデルの構成を組むことができます。
準備
- M5Stackシリーズ本体 ※M5PaperでもOK
- UiFlow ※アカウント登録不要
※ファームウェア1.4.x対応のUIFlow
では、証明書付きMQTT
に非対応でしたので、M5Burner
でファームウェアを1.7.xにアップグレードしておきましょう!
設定方法
図のような環境を構築します。
AWS IoT Coreで証明書を発行
- 前回の記事(Node-REDでAWS IoT Coreを使ってみた | DevelopersIO)と同様に、AWS IoT Coreで証明書を発行します。
- M5Stackシリーズ本体にアップロードする場合、ファイル名は10文字(拡張子を除いて?)という制限があるため、証明書のファイル名をリネームして、10文字に短縮します。幸い、AWS IoT Coreが発行するIDが10桁なので、この部分だけ残します。
証明書の種類 表示されているファイル名 実際にダウンロードされるファイル名 今回、使用する? M5Stackにアップロード このモノの証明書 *.cert.pem *-certificate.pem.crt 使用 certFile=*.crt パブリックキー *.public.key *-public.pem.key 不要 プライベートキー *.private.key *-private.pem.key 使用 keyFile=*.pem AWS IoTのルートCA ※なし AmazonRootCA1.pem 不要
ファームウェアをアップグレード
M5Burner
でM5Stackシリーズ本体のファームウェアを1.7.xにアップグレードします。
UIFlowにアクセス
- UiFlowにアクセスします。
UiFlow Beta
を選択します。Api key
を入力します。
MQTTを設定
- 受信したメッセージを表示するよう、スクリーン上に
Label
オブジェクトをドロップしておきます。 -
UI
直下にラベル
が表示されるので、これを開き、ラベルに文字列を表示するコードブロックをドラッグ&ドロップします。 -
M5Paperの場合は、
UI
直下にある画面
を開き、Set screen show
コードブロックをドラッグ&ドロップしておきます。 -
高度なブロック
にあるMQTT
を開きます。 -
Publish
、Subscribe
をそれぞれ開き、表示されたコードブロックをドラッグ&ドロップします。 -
Subscribe
でドロップしたコードブロックから、受信データをシリアル出力する
コードブロックを取り外します。 - 先ほど作成しておいた、ラベルに文字列を表示するコードブロックと
Set screen show
コードブロックと入れ替えます。 - ラベルに表示する文字列を取り外した
受信データ
コードブロックに差し替えます。 -
~~をシリアル出力する
コードブロックは削除して構いません。 -
MQTT
のコードブロックにAWS IoT Core
の設定を入力します。MQTT
コードブロックの設定項目AWS IoT Core
の設定項目設定値 MQTTブローカーとクライアントID モノの名前 <モノの名前> サーバーアドレス カスタムエンドポイント <*-ats>.iot.ap-northeast-1.amazonaws.com ポート番号 ※指定なし 8883 ユーザー名 ※指定なし ※空白のまま パスワード ※指定なし ※空白のまま Keepaliveで接続 ※指定なし 300 SSL ※指定なし True keyFile *-private.pem.key ※要リネーム *.pem certFile *-certificate.pem.crt ※要リネーム *.crt -
トピック~~
というコードブロックが2か所あります。これらに、前述のMQTTブローカーとクライアントID
と同じ値をセットします。 -
トピック~~に~~をパブリッシュ
というコードブロックの後半に、送信したい文字列(この例では、Hello world!
)を入力します。 -
RUN
ボタンをクリックし、UIFlowを実行します。
さいごに
デバイスを屋外に設置する場合、タンパープルーフ(いたずら防止対策)
を検討すべきでしょう。証明書ファイルを本体に保存する方法をご紹介しましたが、この点ではハードウェア暗号化チップを内蔵しているM5Stack Core2 for AWS
が有利でしょう。持ち去られてしまってはどうしようもありませんが、ハードウェア暗号化チップなら書き換えできませんので、発信元を辿れば回収できるかもしれません。
今回のAWS IoT Core
対応だけでは、AWS IoT EduKitプログラム
に対応できているか分かりませんが、非常に簡単にMQTT
環境を構築できるため、今後様々な応用が考えられます。