1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Armadillo-IoT G3でAWS IoTを動かす

Posted at

Armadillo-IoT G3(以下、Armadillo)より、AWS IoTに接続するまでの手順を紹介します。

AWS IoTはインターネットに接続したデバイスとAWSの双方向通信を可能にするサービスです。

AWS IoTへのモノの登録

AWS IoTでは「モノ」という単位でデバイスを管理します。

モノとしてArmadilloを登録することで、ArmadilloからAWS IoTが使用可能となります。

実際に登録する手順を記載します。

  1. AWSマネジメントコンソールにログイン後、https://aws.amazon.com/iot にアクセスします。

  2. 左のペインから「管理」を選択します。

  3. ページから「作成」をクリック後、遷移したページで「単一のモノを作成する」を選択します。

  4. モノの名前を入力し、ページ下部の「次へ」をクリックします。

  5. 証明書の作成をクリックします。

  6. 3つのファイルすべてをダウンロードします。その後、証明書を有効化します。そして、ページ下部の「完了」を選択します。

  7. 左のペインの「安全性」から「ポリシー」を選択します。

  8. ポリシーの名前と、アクション(iot:*)を入力後、許可にチェックを入れ、「作成」をクリックします。

  9. 左のペインの「安全性」から「証明書」を選択します。

  10. 先ほど作成した証明書の右上の「・・・」をクリックし、ポリシーのアタッチを選択します。

  11. 先ほど作成したポリシーにチェックを入れ、アタッチをクリックします。

  12. https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/managing-device-certs.html#server-authentication よりAmazon ルート CA 1をダウンロードし、root-CA.crtにリネームしてください。

これで、AWS IoTへのモノの登録が完了します。

Armadillo上での準備

  1. ArmadilloにPython3をインストールします。
[Armadillo ~]# apt update
[Armadillo ~]# apt install python3
  1. pipを用いて、「AWS IoT Python SDK」をインストールします。
[Armadillo ~]# pip install AWSIoTPythonSDK
  1. Armadillo上に作業フォルダを用意します。
[armadillo ~]# mkdir AWSIoT
[armadillo ~]# mkdir AWSIoT/certs
  1. 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)

17行目から20行目は、証明書等のパス等をご入力ください。

21行目には、以下の手順で入手できるエンドポイントを入力します。

  1. 左のペインから管理を選択します。

  2. 先ほど作成したモノを選択します。

  3. 左のメニューから操作を選択します。

以下の場所にエンドポイントがあります。

img09.png

サンプルコードを書き換えましたら、実行できます。

Connection accepted. と表示されましたら、接続に成功しています。

Connection rejected Connection timeout と表示されましたら、接続に失敗しています。もう一度手順をご確認ください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?