【ラズパイ × AWS IoT Core】 (1)初期設定編

ラズパイ x AWS IoT Core

ラズパイに接続したセンサーの情報(温度・湿度・照度)をクラウドに送信する実験をしてみます。クラウドに送信した情報をもとに、サーバーレス関数で処理したり、グラフによるデータの視覚化などにも挑戦してみたいと思います。

クラウド環境はIoTまわりが一通り揃っているAWSを使ってみました。まずは、AWS IoT Coreの初期設定から始めます。

使用したラズパイ環境とAWS環境

  • Raspberry Pi 2 Model B (ラズパイのモデルには依存しません)
  • 温湿度センサー
  • 照度センサー
  • Amazon IoT Core (無料枠)

AWS IoT Coreの設定手順

AWS IoT Coreの設定方法は、「AWS IoTにPythonでMQTTイベントの送信、受信するまで」を参考にさせていただきました。

それでは、やっていきます。

モノを登録

f:id:yuppejp:20190825200009p:plain

  1. 「単一のモノを作成する」を作成します。 単一のモノを作成

  2. モノの名前を指定します。その他は省略でOKです。 モノの名前を

  3. 証明書を作成します。一番上の推奨を選択します。 証明書を作成

  4. ここですべての証明書をダウンロードしておきます。 証明書のダウンロード

  5. ルートCAもダウンロードします。 ルートCAのダウンロード

  6. ダウンロードした証明書と各キーファイルはまとめて、ラズパイに転送しておきます。zipに固めて、scpで転送する例です。(downloadディレクトリにダウンロードした場合)

    $ zip -r cert.zip download
    $ scp cert.zip pi@raspberrypi.local:~

  7. ポリシーを追加します。 ポリシーを追加

  8. これで「モノ」が作成されました。 モノの作成完了

ルールの作成

  1. ACTタブを選択します。 ACTタブを選択

  2. ルールを作成します。 ルールの作成

  3. Lambda関数を選択します。 Lambda関数を選択

  4. Lambda関数は後で作成します。 アクションの設定

  5. ポリシーを作成します。 ポリシーの作成

  6. ポリシーの名前を設定します。アクションは「iot:*」を指定しておきます。 ポリシーの名前を設定

  7. 作成したポリシーを証明書にアタッチします。 証明書にポリシーをアタッチ

  8. アタッチします。 アタッチ

  9. 証明書がアクティブになったのを確認します。 証明書のアクティブ

動作確認

PCをクライアントにして、AWS IoT Coreの動作確認をします。この動作確認の手順は、ラズパイを使用する前にPCでやってもOKです。

AWS IoT Device SDK for Pythonをインストール

テストコードを「AWS IoT Device SDK for Python on GitHub」のreadmeを参考に作成します。

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

証明書ファイルやキーファイルはあらかじめAWSコンソールからダウンロードしたものをします。

client.py:

# Import SDK packages
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

# For certificate based connection
myMQTTClient = AWSIoTMQTTClient("myClientID")
# For Websocket connection
# myMQTTClient = AWSIoTMQTTClient("myClientID", useWebsocket=True)
# Configurations
# For TLS mutual authentication
myMQTTClient.configureEndpoint("YOUR.ENDPOINT", 8883)
# For Websocket
# myMQTTClient.configureEndpoint("YOUR.ENDPOINT", 443)
# For TLS mutual authentication with TLS ALPN extension
# myMQTTClient.configureEndpoint("YOUR.ENDPOINT", 443)
myMQTTClient.configureCredentials("YOUR/ROOT/CA/PATH", "PRIVATE/KEY/PATH", "CERTIFICATE/PATH")
# For Websocket, we only need to configure the root CA
# myMQTTClient.configureCredentials("YOUR/ROOT/CA/PATH")
myMQTTClient.configureOfflinePublishQueueing(-1)  # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2)  # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
myMQTTClient.configureMQTTOperationTimeout(5)  # 5 sec

myMQTTClient.connect()
myMQTTClient.publish("myTopic", "myPayload", 0)
myMQTTClient.disconnect()
  1. SDKをインストールします。

    $ pip3 install AWSIoTPythonSDK

  2. AWS IoT Coreのコンソールの「テスト」タブでトピックをサブスクリプションします。 MQTTクライアント

  3. トピックを発行します。

    $ python3 client.py

  4. AWSコンソールにメッセージが表示されます。 MQTTクライアント2

  5. myPayload」が表示されればOKです。

今後の予定

次回は、実際にラズパイの温湿度センサーの情報をAWS IoT CoreにPublishしてみたいと思います。うまくいきますように〜

ラズパイ × AWS IoT Core の記事一覧

参考にしたサイト