RaspberryPiとAWS IoTの接続設定
基本的な接続方法はAWS IoTの開発ガイドに従うのが簡単だ。
ただし、2つの方法があり、両方試してみた。ここでは、簡単ではるかに早く設定できた「接続ウィザード」を使った方法を説明する。(準備ができていれば所要時間は約30分)
環境
- RaspberryPi 3B:
- Raspbian GNU/Linux 10 (buster)
- Python 2.7.16 (default, Oct 10 2019, 22:02:15)
- ここでは、AWS IoTのPython SDKを利用するため
- gitが導入されていること
- GitHubから、SDK(aws-iot-device-sdk-python)がクーロンされる
- OpenSSL 1.1.1d 10 Sep 2019
- インターネットに接続できる環境。(AWSのIoTサービスに接続できる)
- AWSのアカウントがあること
- AWS IoTサービスを利用する
- 下記は2020年4月時点の手順です。
設定手順
- PCからAWS IoTメニューに入る
- PCにダウンロードしたファイルを解凍する
- 解凍したディレクトリ名:connect_device_package
- 以下のファイルがある
- RaspberryPi_test.cert.pem
- RaspberryPi_test.private.key
- RaspberryPi_test.public.key
- start.sh
- READMEの記述によると、通信の暗号化はTLSプロトコルでX.509証明書が使用される
- PCにダウンロードしたファイルをRespberryPiへ転送する
- RaspberryPiに任意のディレクトリを作成する
- PCからscpコマンドでディレクトリ毎、RaspberryPiへコピーする
- PCのコマンドターミナルを開く
- $ scp -r コピー元ディレクトリ名 ユーザー名@IPアドレス:RaspberryPiのパス
- RaspberryPiのターミナルからコピーしたシェルを実行する
- $ sudo ./start.sh
- 筆者の環境では以下のエラーが発生した
- start.sh: 19: ./start.sh: pushd: not found
- start.shの1行目に #!/bin/bashを追加して再度実行する
- gitからaws-iot-device-sdk-pythonがクーロンされる
- 筆者の環境では以下のエラーが発生した
- クラウドと接続され無事MQTTサンプルアプリケーションが実行され接続の確認ができた!
- 実行されるサンプルアプリケーションのディレクトリ:aws-iot-device-sdk-python/samples/basicPubSub
- 実行されるサンプルシェル:basicPubSub.py
- 実行されるサンプルアプリケーションのディレクトリ:aws-iot-device-sdk-python/samples/basicPubSub
- $ sudo ./start.sh
別の接続方法
- AWS IoT開発ガイドの「AWS IoT Coreの使用の開始」から一つ一つ進めることも可能だ。
- RaspberryPiとの接続の観点からは、メニューに「RaspberryPiでのAWS IoT Device SDKの使用」があるのがすばらしい。IoTデバイスまたは学習用として、RaspberryPiが普及しているからだろう。ただし、開発ガイドにPython SDKの解説がないのは残念なところか。今のところ、「RaspberryPiでのAWS IoT Device SDKの使用」メニューには、AWS IoT Device SDK for Embedded Cの使用とAWS IoT Device SDK for JavaScriptおよびNodeを利用するのみ。
以上、接続までの方法でした。2つの方法を試した経験から、「オンボード」メニューから設定する方がはるかに簡単であることがわかった。
考慮点
接続方法をいろいろ試していると、接続時にキーと証明書が合わないエラーが出てきた。opensslコマンドで確認する方法が便利だった。Qiitaリンク
pub/subプログラムによる接続確認は別のQiita記事で記述します。
参考資料
AWS IoTのPython SDKについてはGitHubにスクリプトの解説がある。