Armadillo-IoT G3でAWS IoTを動かす
Armadillo-IoT G3でAWS IoTを動かす:
Armadillo-IoT G3(以下、Armadillo)より、AWS IoTに接続するまでの手順を紹介します。
AWS IoTはインターネットに接続したデバイスとAWSの双方向通信を可能にするサービスです。
AWS IoTでは「モノ」という単位でデバイスを管理します。
モノとしてArmadilloを登録することで、ArmadilloからAWS IoTが使用可能となります。
実際に登録する手順を記載します。
以下のサンプルコードではArmadilloの機能を用いて、CPUの温度を取得し、AWS IoTの「シャドウ」と呼ばれる場所にアップロードします。
Armadillo上のAWSIoTディレクトリに、以下のコードを置いてください。
17行目から20行目は、証明書等のパス等をご入力ください。
21行目には、以下の手順で入手できるエンドポイントを入力します。
サンプルコードを書き換えましたら、実行できます。
Armadillo-IoT G3(以下、Armadillo)より、AWS IoTに接続するまでの手順を紹介します。
AWS IoTはインターネットに接続したデバイスとAWSの双方向通信を可能にするサービスです。
AWS IoTへのモノの登録
AWS IoTでは「モノ」という単位でデバイスを管理します。モノとしてArmadilloを登録することで、ArmadilloからAWS IoTが使用可能となります。
実際に登録する手順を記載します。
- AWSマネジメントコンソールにログイン後、https://aws.amazon.com/iot にアクセスします。
- 左のペインから「管理」を選択します。
- ページから「作成」をクリック後、遷移したページで「単一のモノを作成する」を選択します。
- モノの名前を入力し、ページ下部の「次へ」をクリックします。
- 証明書の作成をクリックします。
- 3つのファイルすべてをダウンロードします。その後、証明書を有効化します。そして、ページ下部の「完了」を選択します。
- 左のペインの「安全性」から「ポリシー」を選択します。
- ポリシーの名前と、アクション(iot:*)を入力後、許可にチェックを入れ、「作成」をクリックします。
- 左のペインの「安全性」から「証明書」を選択します。
- 先ほど作成した証明書の右上の「・・・」をクリックし、ポリシーのアタッチを選択します。
- 先ほど作成したポリシーにチェックを入れ、アタッチをクリックします。
- https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/managing-device-certs.html#server-authentication よりAmazon ルート CA 1をダウンロードし、root-CA.crtにリネームしてください。
Armadillo上での準備
- ArmadilloにPython3をインストールします。
[Armadillo ~]# apt update [Armadillo ~]# apt install python3
- pipを用いて、「AWS IoT Python SDK」をインストールします。
[Armadillo ~]# pip install AWSIoTPythonSDK
- Armadillo上に作業フォルダを用意します。
[armadillo ~]# mkdir AWSIoT [armadillo ~]# mkdir AWSIoT/certs
- certsフォルダに、「AWS IoTへのモノの登録」6. と12. でダウンロードした証明書をftp等を用いてコピーします。
サンプルコード
以下のサンプルコードではArmadilloの機能を用いて、CPUの温度を取得し、AWS IoTの「シャドウ」と呼ばれる場所にアップロードします。Armadillo上のAWSIoTディレクトリに、以下のコードを置いてください。
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient import time # Callback function def callback(payload, status, token): if status == "accepted": print("Connection accepted. token: " + token) elif status == "rejected": print("Connection rejected. token: " + token) elif status == "timeout": print("Connection timeout. token: " + token) else: print("Unknown error. token: " + token) # Configure rootCAPath = "Root CA path" certificatePath = "Your certicifate key path" privateKeyPath = "Your private key path" thingName = "Name of your thing" endPoint = "Your endpoint" clientId = "AWSIoTGettingStarted" port = 8883 tempFile = "/sys/class/thermal/thermal_zone1/temp" # Create a client client = AWSIoTMQTTShadowClient(clientId) client.configureEndpoint(endPoint, port) client.configureCredentials(rootCAPath, privateKeyPath, certificatePath) # Client configuration client.configureAutoReconnectBackoffTime(1, 32, 20) client.configureConnectDisconnectTimeout(10) client.configureMQTTOperationTimeout(5) # Connect to AWS IoT client.connect() # Create a deviceShadowHandler handler = client.createShadowHandlerWithName(thingName, True) # Delete the shadow document handler.shadowDelete(callback, 5) # Write the temperature of the CPU on shadow while True: try: fileHandler = open(tempFile) temp = str(int(fileHandler.read().strip()) / 1000.0) json = '{"state":{"desired":{"property":"' + temp + '"}}}' except Exception as e: print(e) json = '{"state":{"desired":{"property":"Client threw an Exception"}}}' finally: handler.shadowUpdate(json, callback, 5) time.sleep(1)
21行目には、以下の手順で入手できるエンドポイントを入力します。
- 左のペインから管理を選択します。
- 先ほど作成したモノを選択します。
- 左のメニューから操作を選択します。
サンプルコードを書き換えましたら、実行できます。
Connection accepted.
と表示されましたら、接続に成功しています。Connection rejected
Connection timeout
と表示されましたら、接続に失敗しています。もう一度手順をご確認ください。
コメント
コメントを投稿