Raspberry Pi(ラズパイ) を Node-RED でAWS IoTに接続するための設定方法
目次
はじめに
本記事では Raspberry Pi のインストールされている Node-REDという機能を使用し、AWS IoTにMQTTというプロトコルを使用し、データを送信するところまでの内容を説明します。
Node-REDとは
Javascriptという言語を記述するためのフローエディタと呼ばれるものです。通常、Javascriptはインターネットのブラウザに使われている言語なのですが、サーバ上でも動作します。
私の理解で説明をすると、このJavascriptをサーバーで動かすための仕組みがnode.js と呼ばれているものであり、このNode-REDはこのnode.jsをフローベースで分かりやすく記述するためのエディタ・ツールと考えて頂くのがよいと思います。
なぜ、Node-REDでやるの?
というと必ずしもNode-REDでやる必要はありません。しかし、後々例えばRaspberry Piに何かセンサを繋いだり、BLEの信号を受信したりする場合、どうやってコード書けば良いんだっけ?という手間を大幅に削減ができるものと考えています。
AWS側で必要な作業について
証明書の発行
AWSのサービスとしてはAWS IoTを使用します。該当のサービスに移動し、左のメニューから証明書をクリックして下さい。
次に画面右上の作成ボタンをクリックして下さい。
1-Click 証明書作成を選択します。
ここで手順を間違えると大変です。確実にこのモノの証明書、パブリックキー、プライベートキーをダウンロードしておいてください。
ルートCAのダウンロードも必要です。こちらをクリックすると…
以下のページが開きますのでAmazon Root CAファイルをダウンロードしておいてください。
最後に有効化をクリックし、ポリシーのアタッチをクリックして下さい。
ここまでで以下のファイルがあることを確認しておいてください。
- XXXXXXXXXX-certificate.pem.crt … このモノの証明書
- XXXXXXXXXX-private.pem.key … パブリックキー
- XXXXXXXXXX–public.pem.key … プライベートキー
- AmazonRootCA1.pem … ルートCA
ポリシーのアタッチ
最初は新規ポリシーの作成をクリックして下さい。
名前は任意の名前を、アクションにはiot:* 、リソースARNは * としてください。
ポリシーの作成後、改めて先ほど作成した証明書を開き、画面右上のアクションタブからポリシーのアタッチを選択してください。
最後にアタッチをクリックします。
MQTTの送信先の確認
AWS IoTの左のメニューから設定をクリックして下さい。以下のようにエンドポイント(MQTTデータの送信先)が確認できます。
長くなりましたが、ここまででAWS側の設定は完了です。あともう一息!
Raspberry Piでやること
Raspbian OSを使用していた場合、Node-REDがデフォルトでインストール済になっているはずなので、以下のコマンドで実行しておきます。
- sudo systemctl enable nodered.service
- sudo systemctl start nodered
この後、以下のURLをブラウザから開いてください。
http://raspberrypi.local:1880/
アクセスすると以下のような画面が表示されるかと思います。
ここで処理したい内容を記述していきます。
MQTTでデータを送信するのに必要なノードは以下の3つのみです。
1.) Inject(タイムスタンプ)
こちらはデータの送信トリガ(契機)に使用します。
設定例としては以下となります。
2.) Function(create payload)
MQTTで送信するデータの作成を行います。
設定例としては以下となります。こちらはcolorがredで、temperatureが100のデータをAWS IoTに送るためのサンプルとなります。
3.) mqtt out(myMQTT)
AWS IoT にデータ送信を行うノードがこちらです。
こちらは設定が少々複雑になります。
ここでのトピックは AWS IoTと通信するためのトピック名となりますので、任意の名前にはなりますが、myTopic/mqttのようなわかりやすい名前をオススメします。
ここでサーバの鉛筆マークをクリックして詳細な設定を行っていきます。
サーバの欄には先ほど確認したMQTTの宛先を設定してください。その他の項目はそのままお使いいただくのがよいと思います。次にTLS設定の欄の鉛筆マークをクリックして下さい。
証明書には先ほどダウンロードしたXXXXXXXXXX-certificate.pem.crtを設定し、秘密鍵にはXXXXXXXXXX-private.pem.keyを、CA証明書にはAmazonRootCA1.pemを設定してください。
これで設定は完了です。ここまで設定が正しく完了していれば以下のように、mqtt outのノードの下に接続済の文字が表示されているかと思います。
もし表示されていないようであれば、一度設定を見直してみてくださいね。
動作の確認
AWS IoTのメニューからテストを選択してください。
以下の画面が表示されますので、トピックの欄には先ほど設定したトピック名を設定してください。その後、トピックへのサブスクライブをクリックして下さい。
以下のような画面が表示されるかと思います。
ここでNode-REDの画面に戻り、Inject(タイムスタンプ)のノードの左のボタンをクリックして下さい。問題がなければMQTTのデータが送信されているはずです。
AWS IoTの画面を見ると、以下のようにRaspberry Piから送信したデータが正しく受信できていることが確認できるかと思います。
最後に
無事、Raspberry PiからAWS IoTにデータは送れましたでしょうか?ここまで出来れば、Raspberry Pi側は好きなデータをAWS IoTに送信することが可能になりますし、AWS IoTの機能を使って他のAWSサービスと連携したアプリケーションを作成することも可能になります。
是非、トライしてみてください。
ディスカッション
コメント一覧
とても分かりやすかったです。ありがとうございます:)
moui-san,
本当ですか!お役に立てたようで良かったです!
何かありましたら是非ご相談下さいね。