AWS IoT Coreを使ってラズパイを制御する

今回はAWS IoT Coreを使ってRaspberryPiを制御してみよう。
ラズパイにセンサーモジュールを取り付けて遠隔で何かしらの制御を行っていきたいと思います。

制御するセンサーはLEDでもブザーでもなんでもいいんです。
(遠隔からラズパイを制御できることに意味がある!!)

そんな僕は遠隔での自動水やり機の構築のため、AWS IoT Coreを使って水やり(ポンプ)センサーを動かしてみたいと思う。(どやっ)

目次

AWS IoT Coreの操作

さて、AWS IoT Coreのセットアップ方法を記事に起こすぞと気合いを入れ腕をまくったところで、かなり良記事を見つけたので貼っておく。(この記事があれば僕が手順を書く必要はない。)

AWS IoT CoreをRaspberry Piで使ってみた その1

この記事を参考にしてAWS IoT Coreのセットアップを行ってください。
(この記事に飛んだ後、僕の記事に戻ってくることはなくても構いません。どうかお元気で)

基本的には、以下をを行っておきます。
①モノを作成
②ポリシーをアタッチ
③証明書とキーをダウンロード

AWS IoT Coreとラズパイの連携準備

上記セットアップが終わりましたら、連携の準備を行います。
(証明書やらポリシーやらサンプルコードやら)

AWS IoT SDKのダウンロード

AWS IoT Coreと連携するためのSDKも用意されていますので、今回はこちらを使用してみましょう。(サクッと作成できますので)

ラズパイ環境にgitからクローンしてきます

git clone https://github.com/aws/aws-iot-device-sdk-python.git 

クローンが完了したら、使用するのはaws-iot-device-sdk-python/samples/basicPubSub/basicPubSub.pyになります。

証明書の準備(配置)

その前に先程取得した証明書とキーを以下の階層に用意しておきます。
(basicPubSubディレクトリ内にcertsディレクトリを作成。その中に以下を配置)
AmazonRootCA1.pem
abc123..abc123-certificate.pem.crt
abc123..abc123-private.pem.key

aws-iot-device-sdk-python/
┣ basicPubSub
┃  ┣ certs
┃  ┃  ┣ AmazonRootCA1.pem
┃  ┃  ┣ abc123..abc123-certificate.pem.crt
┃  ┃  ┗ abc123..abc123-private.pem.key
┃  ┣ basicPubSub.py

エンドポイントの確認

その他必要な情報としてデバイスのエンドポイントを取得します。

AWS IoT Coreコンソール画面から設定>デバイスデータエンドポイントを控えます

デバイスデータエンドポイント

ポリシーのアタッチ

ポリシーのアタッチに関しては以下の記事を参考にすると、非常に分かりやすいです。

AWS IoT CoreをRaspberry Piで使ってみた その2

AWS IoT Coreとラズパイの連携

さて、ここまで準備ができたらAWS IoT Coreとラズパイの相互通信(Pub/Sub)が可能です。

ラズパイからPublish

ラズパイからPublishしてみます。
用途としてラズパイのセンサー情報等を定期的に収取する際はラズパイからPublishを行います。

コンソールから実行する場合は以下の引数とともにpythonを実行

python basicPubSub.py --endpoint abc123-ats.iot.ap-northeast-1.amazonaws.com --rootCA ./certs/AmazonRootCA1.pem --cert ./certs/abc123..abc123-certificate.pem.crt --key ./certs/abc123..abc123-private.pem.key

すると、1秒間隔でMQTTのPublishが行われます。
このPublishはJson形式で以下から確認できます。

SDKデフォルトのtopicは sdk/test/Python です

AWS IoT Core コンソール Sbuscribe
ちゆり

Publishメッセージをセンサーから読み取った値等にすれば
センサーデータの収集が可能になりますね。

ラズパイでSubscribe

次は、ラズパイでSubscribeしてみます。

用途として遠隔(AWS IoT Core)からPublishを行うことでラズパイのセンサー等を制御することが可能になります。

コンソールから実行する場合は以下の引数とともにpythonを実行
(-m subscribe オプションを付与する)

python basicPubSub.py --endpoint abc123-ats.iot.ap-northeast-1.amazonaws.com --rootCA ./certs/AmazonRootCA1.pem --cert ./certs/abc123..abc123-certificate.pem.crt --key ./certs/abc123..abc123-private.pem.key -m subscribe

JSON形式でメッセージを作成しPublishしてみます
SDKデフォルトのtopicは sdk/test/Python です

AWS IoT Core コンソール Publish

サブスクライブしているラズパイにメッセージが届きました。

Received a new message: 
b'{\n  "message": "Hello World!!"\n}'
from topic: 
sdk/test/Python
ちゆり

特定のメッセージをサブスクライブしたらセンサーモジュールを制御する仕組みを組み込めば遠隔でセンサーの制御ができますね

もちろん、PublishとSubscribeの両方同時に行うことも可能です。
-m bothのオプションを付与することで可能です。

python basicPubSub.py --endpoint abc123-ats.iot.ap-northeast-1.amazonaws.com --rootCA ./certs/AmazonRootCA1.pem --cert ./certs/abc123..abc123-certificate.pem.crt --key ./certs/abc123..abc123-private.pem.key -m both

コンソールの引数指定が面倒だ

pythonを実行する際に長ったらしい引数で証明書やキーを指定するのが面倒なので、ソースコードに直に証明書やキーのパスを書いてあげればスッキリとしたpythonコマンドで実行が可能になる

host = "abc123-ats.iot.ap-northeast-1.amazonaws.com"
rootCAPath = "./certs/AmazonRootCA1.pem"
certificatePath = "./certs/abc123..abc123-certificate.pem.crt"
privateKeyPath = "./certs/abc123..abc123-private.pem.key"

pythonの実行

python basicPubSub.py -m publish(またはsubscribeまたはboth)

これでAWS IoT Coreとラズパイの連携ができました。
特定のtopicまたはメッセージ受信時にセンサーデバイス制御を組み込むことでAWS IoT Coreを使ってラズパイを制御することが可能ですね。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる