はじめに
マイコンで取得したセンサーのデータなどをサーバにアップしてグラフ化したいという要求はいろいろなところであると思います。
Web開発メインで業務をされている旧世代の人間(私)はこの要求に対して
-
サーバを用意して
-
データベースを用意して
-
データを保存するAPIを用意して
-
マイコンからAPIたたいて
-
グラフ表示のフロントを用意して
という流れがまぁ一般的かな?と考えるのですが、AWS IoT Coreを使用した場合はどういう流れになって何ができて何うれしいのかを実際に手を動かしながら学んでいきたいと思います。
この記事で説明すること
-
AWS IoT Coreで”モノ”を作成する
-
Raspberry Pi Pico WにMQTTライブラリを入れてデータをpublishする
-
publishされたデータをCloudWatchでグラフ表示する
この記事で説明しないこと
-
AWSのアカウント取得まで
-
CloudWatchのアラート設定
-
Raspberry Pi Pico W でWi-Fiに接続するところ
モノの作成
AWS IoTの管理メニューの”モノ”から “モノを作成” → ひとつのモノを作成
適当に名前をつけていきます。タイプやグループ等はたくさんのモノを管理する時に考えることにします。
証明書を設定していきます
ポリシーはJSONタブから以下の設定を行いました。
ポイントとしてはClientIDやtopic名は任意でOKですがマイコンで動かすプログラム側と合わせること、Actionとして必要なものをいれること。※Publishしたいだけの場合ConnectとPublishを定義しておけばOK。
上記で作ったポリシーをチェックしてモノを作成
証明書をダウンロードしておきましょう
これでモノの作成は一旦OKです。
Raspberry Pi Pico WにMQTTライブラリを入れて接続
次にマイコン側を用意します。今回は話をシンプルにするためにスイッチ押したらPublishが行われる形とします。Raspberry Pi PicoはGPIOに内部のプルアップが使えるためこの接続のみで通常時1、プッシュ時0が可能となります。
今回のコードはこちら
始めは AWSのブログ を見ながら始めたのですがエラーでうまく動かず…この mqttのライブラリ が下位互換性の無い更新が入っていたようで引数が呼び出しと合ってませんでした。
このあたり の記事や各種先人さまたちの記事を参考に以下の様に認証鍵をder変換してパラメータにセットすることでうまくいきました。
接続テスト
接続テストはこちらの”テスト”メニューの”MQTTテストクライアント”で行います。
トピックに上記プログラムで設定しているpublishのトピック名を記載して”サブスクライブ”します。
うまく接続されていれば、スイッチをポチっとするたびに画面下のほうにデータが追加されていきます。
CloudWatchでグラフ化する
まずCloudWatchへのデータ投入を許可するためのルール/ポリシーを作成します。
IoT Coreでルールを作成します
-
「メッセージのルーティング」 から「ルール」の作成画面に進みます
-
トピックに投げ込まれてきた任意のデータを選択します。
-
ルールアクションではアクションに「CloudWatch metric」を、IAMロールに先ほど作成したロールを選択します。
CloudWatchで確認します
「すべてのメトリクス」 - 「IoT」- 「ルールメトリクス 」 に先ほどのルールが作成され、データがポイントされていました。万歳!
まとめ
-
いろいろハマりポイントがあって爆速ではなかったですが、次からは爆速でいけると思います。
-
ルールアクションでDynamoDBやAmazonSNSなどいろいろサービスが選択できますので、データベースにデータを保存したい、メール通知したい、などの要望にも迅速に対応できそうです。
-
表示のさせ方はもちろん好みもあると思いますが、そこに目をつぶると特に認証周りの実装が不要になることや、Web開発側の知識が不要でグラフ表示までできるので、自前でAPIを用意するより断然魅力的に思えました。
-
【宣伝】本格的に学びたい方はこちらファクトリー・サイエンティストの講座をおすすめしておきます!