LoginSignup
30
28

More than 5 years have passed since last update.

AWS IoT Device SDK for PythonをRaspberryPiで動かす

Posted at

AWS IoT Device SDK for Python

今回はAWS IoT Device SDK for Python付属のsampleをRaspberryPiで動かして、S3にデータを格納してみます。

用意したもの

RaspberryPi 3

てもとにあるどのRaspberryPiでもよいでしょう

RASPBIAN JESSIE

OSはさいしんにアップデートしました

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.4.13-v7+ #894 SMP Mon Jun 13 13:13:27 BST 2016 armv7l GNU/Linux

AWSアカウント

AWS IoTの準備

AWSマネジメントコンソールから設定していきます。

Create a thing

はじめにthingをつくります。
q-ss01s.png

ここでは、名前をraspi1にしました。

Create a rule

つぎにthingに対するruleをつくります。

さきほど作った「raspi1」thingをクリックすると右側にDetailが出てきます。さらに右下のCreate a ruleボタンを押します。
q-ss02s.png

するとこんな画面。
q-ss03s.png

ここではルールの名前はraspi1_ruleにしました。

SQLっぽいところには、thingから送られるデータに対しフィルターをかけることができます。SDKのサンプルコードでは、「sdk/test/Python」というTopicを送ってきますので、ここでは次のように入力します。

name value
Attribute *
Topic filter sdk/test/Python

画面をスクロールして、つぎに設定するChoose an actionは、受け取ったデータに対してどうするかを決めるところです。
q-ss04s.png

ここではS3にデータを格納することにします。

S3 bucket、Key、Role nameをよしなに入力します。
Create a new resourceでその場で作って設定することもできますので、テスト用に一時的なバケットをつくりました。既存のものをつかうときはアクセス許可などお気をつけになってください。

Add Action→Createとボタンを押していくと、ruleの完成です。

Connect a device

さいごにthingに対して実際に接続するデバイスからの認証情報を設定します。

ruleを作ったボタンの右隣りにあるConnect a deviceボタンを押します。
q-ss05s.png

すると、どのSDKつかうのー?と選べるのですが、Pythonがみあたりません。
q-ss06s.png

しかたがないのでNodeJSを選ぶと、Generate certificate and policyというボタンが出てくるので押します。
q-ss07s.png

こんどは、3つのリンクとボタンが出てきます。
q-ss08s.png

まずDownload〜のリンク3つをクリックして証明書をダウンロードします。

  • Download public key
  • Download private key
  • Download certificate

ダウンロード後、Confirm & start connectingボタンを押します。
q-ss09s.png

ここのテキストボックス内をコピペしておいて、Return to Thing Detailボタンを押します。

RaspberryPiの準備

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

さいしんのRASPBIAN JESSIEはpipが入ってたのでpipでインストール。
sudo pip install AWSIoTPythonSDK
適宜sudoしたりしなかったり。

サンプルコードをダウンロード

ソースツリーにサンプルコードも入ってるので、githubからcloneしておきます。
git clone https://github.com/aws/aws-iot-device-sdk-python.git

証明書の準備

サンプルコード実行にあたり、証明書ファイルが3つ必要です。
今回はサンプルコードと同じディレクトリに置きます。

AWS IoTを準備した時にダウンロードした証明書をすべてRaspberryPiにscp等で送ります。

  • ほにゃらら-certificate.pem.crt
  • ほにゃらら-private.pem.key

つぎに、AWS IoT root CAを準備します。
curl https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -o rootCA.pem

rootCA.pemという名前で保存されます。

サンプルコードを実行

引数でendpointと各種証明書のパスを指定します。

endpointは、AWSのホスト名でAWS IoT準備の最後に出てきたテキストボックス内に「"host":"どこかの"」と出てきます。
もしくは、マネジメントコンソールにて、thingをクリックしてでてくるDetail内にもホスト名が出てきます(正しくはREST APIの送り先なので、それのホスト名部分だけ)
q-ss10s.png

python basicPubSub.py -e どこかの.amazonaws.com -r rootCA.pem -c ほにゃらら-certificate.pem.crt -k ほにゃらら-private.pem.key

実行すると、1秒間隔でメッセージを投げます。
表示されるログを確認して問題なさそうなら、10秒くらいでCtrl+Cします。

S3バケットをみる

今回設定したバケットにファイルが出来上がります。
中身がサンプルコードを実行した秒数だけ更新されていれば成功です。
New Message 10

30
28
1

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
30
28