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サービスと連携したアプリケーションを作成することも可能になります。

是非、トライしてみてください。