Proactive Cybernetics

Raspberry PiをAWS IoT Coreに接続

タグ :IoTデバイス Webサーバーサイド 2020年11月18日 by proactive-cybernetics

あらまし

以前の記事ではRaspberry Piで動くDiscordボットをPythonで作る方法を紹介しました。
今回はこのDiscordボットに修正を加え、AWS IoT Coreに接続する方法を説明します。

AWS側の準備

AWSのサービスコンソールから「AWS IoT Core」を開き、「管理」/「モノ」を選択します。


「モノ」を開いたら、「作成」を選択し、「単一のモノを作成する」を選択します。


続いて、モノの名前を入力し、「次へ」を選択します。


続いて、「証明書を作成」を選択します。


証明書が作成された旨が表示されるので、証明書3つと
AWS IoTのルートCAをローカルファイルに保存しておきます。

Raspberry Piに暗号鍵を保存

AWS IoT のモノの登録時にダウンロードした証明書ファイル(4つ)をRaspberry Piにコピーします。

Pythonスクリプトの修正

ボットプログラムの開始時に以下のコードを実行するようにします。
コード中の<エンドポイントURL>は、AWS IoTのコンソールから作成したモノを選択して「相互作用」を開くと確認できます。
AWSでモノの登録をしたときにダウンロードした証明書ファイルはconfigureCredential()の引数で参照しています。

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
myMQTTClient = AWSIoTMQTTClient("raspi-home")
myMQTTClient.configureEndpoint("<エンドポイントURL>", 443)
myMQTTClient.configureCredentials("./cert/root.pem", "./cert/f0e00cdc2f-private.pem.key", "./cert/f0e00cdc2f-certificate.pem.crt")
myMQTTClient.configureOfflinePublishQueueing(-1)
myMQTTClient.configureDrainingFrequency(2)
myMQTTClient.configureConnectDisconnectTimeout(10)
myMQTTClient.configureMQTTOperationTimeout(5)


以下のコードで、JSON形式データをAWS IoT Coreにパブリッシュ(送出)します。
パブリッシュ先のトピック名は「test」としています。

sensor_data = bme680tph.get_sensor()
json_data = json.dumps({"temp": sensor_data[0], "pres": sensor_data[1], "moist": sensor_data[2], "datetime": datetime.now().strftime("%Y/%m/%d %H:%M:%S")})
myMQTTClient.publish("test", json_data, 0)


まとめ

今回は、AWS IoT Coreにモノを登録する方法と
Raspberry Pi上のPythonプログラムからAWS IoT Coreにデータを送信する方法を紹介しました。

次回は、送信されたJSONデータをデータベース(DynamoDB)に保存する方法について説明します。

↑先頭に戻る