あらまし
以前の記事では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)に保存する方法について説明します。