3.2 デバイスプログラムの実行

Cloud9上にサンプルのプログラムをダウンロードします

Cloud9の画面に戻り、ターミナルから以下のコマンドを入力してサンプルのソースをダウンロードし、展開します。

cd ~/environment
wget https://go.aws/2SVAGNP -O Devices.zip
unzip Devices.zip

左側のツリーから、sensor を開くと、サンプルプログラムmain.pyが確認できます。

このサンプルプログラムは、AWS IoT Device SDKを利用しますので、ターミナルからAWS IoT Device SDKをインストールします。(Python向けのVersion2を利用します)

sudo apt install -y libpython3.7-dev
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3.7 get-pip.py
sudo pip install awsiotsdk

AWS IoT Coreに接続する際にサーバの検証を行うための、サーバ証明書をダウンロードします。

wget https://www.amazontrust.com/repository/AmazonRootCA1.pem -O ~/environment/sensor/certs/AmazonRootCA1.pem

ここまでの作業で左側のツリーの状況がこの様になっているはずです。

DeviceProgram

前の手順でダウンロードした、デバイスの証明書をCloud9上にアップロードします。ツリーのsensor > certsと開き、certsを選択した状態で、Cloud9のメニューのFile > Upload Local Files..と選択します。

DeviceProgram

ダウンロードした xxxxxxx-setup.tar.gz (xxxxxxxはユニークな値)をドラッグ&ドロップするか、Select filesを選択して、ファイルを指定してアップロードします。

DeviceProgram

Cloud9のターミナルで、以下のコマンドを実行して、ファイルを展開します。

cd ~/environment/sensor/certs/
tar -zxf *-setup.tar.gz

以下のようにcertsディレクトリ内に、証明書が展開されます。

DeviceProgram

最後にセンサーデバイスのプログラムを実行してみましょう。以下の引数を自分の環境に合わせ、コマンドをターミナルから実行します。

引数
thing-name 登録したセンサーのモノの名前 例) Sensor
region 利用しているリージョン 例) ap-northeast-1
cd ~/environment/sensor
python3.7 main.py --thing-name Sensor --region ap-northeast-1

実行すると、以下のようなログが出力されれば成功です。このサンプルプログラムでは、load avegage 1の値を2秒おきに送信しています。

Performing greengrass discovery...
Trying core arn:aws:iot:ap-northeast-1:539325253908:thing/handson_20200501_Core at host 127.0.0.1 port 8883
Connected!
Published topic data/Sensor: {"value": 0.21, "timestamp": "2020-05-01T08:37:08"}

Published topic data/Sensor: {"value": 0.21, "timestamp": "2020-05-01T08:37:10"}

Published topic data/Sensor: {"value": 0.21, "timestamp": "2020-05-01T08:37:12"}

AWS IoT Coreにデータが届いているかを確認

AWS IoT Coreのマネージメントコンソールを開き、左側のメニューからテストを開きます。トピックのサブスクリプションdata/センサーのモノの名前を入力し、トピックへのサブスクライブを選択します。(以下の例だと、data/Sensorと入力しています)

DeviceProgram

以下のように、センサーデバイスからのデータが届いているのが確認できます。

DeviceProgram

このワークショップではGreengrassとデバイスプログラムを同じ環境(Cloud9)で動かしていますが、実際はお互いがネットワーク越しに到達可能であれば、別々のデバイス上で動かすことも可能です。

Greengrassに接続するデバイスは、AWS IoT Core経由で接続するべきGreengrassの情報を取得します。そのため、Greengrassへ接続する前にGreengrass Discoveryを行い、Greengrass Coreの情報と、Greengrass Coreのサーバ証明書を取得します。もっと詳しく知りたい場合は、サンプルのソースやこちらを参照してください。

この手順での作業は以上となります。