概要
目標
Raspberry Pi上の出力データをAmazon IoTに送信する。
実行環境
- Amazon Web Service(AWS)
- Raspberry Pi Zero W
- OS Raspbian GNU/Linux 10
AWS側での作業
IoT モノを作成
- AWSマネージメントコンソール を開きます。
- IoTコンソールへ遷移します。
- 左ペイン「管理」–> 「モノ」–>「Create Things」をクリックします。
- モノを作成 –> 作成するモノの数 –> 1つのモノを作成 にチェックを付け、「次へ」をクリック。
- 「モノのプロパティ」 –> 「モノの名前」 に モノの名前 を記入します。
「Device Shadow」から シャドウがありません にチェックを付けます。
画面右下「次へ」をクリックします。
- 「デバイス証明書」–>「新しい証明書を自動生成 (推奨)」にチェックを付け「次へ」をクリック。
- ポリシーは特に設定せず「モノを作成」をクリックします。
- 発行した証明書のダウンロード画面が表示されますので、全て ダウンロードします。
※この画面からしか証明書のダウンロードは出来ませんので忘れずにダウンロードしておきます
- モノ一覧にて モノ が作成されていることを確認します。
IoT ポリシーを作成
- IoTコンソール左ペイン「安全性」–> 「ポリシー」–>「ポリシーを作成」をクリックします。
- 「ポリシーのプロパティ」–>「ポリシー名」にて ポリシーの名前 を入力します。
「ポリシードキュメント」にて ビルダー にチェックを付けます。
ポリシー効果 で 許可 を選択します。
ポリシーアクションで 全てのIoTアクション –> * を選択します。
ポリシーリソースで * と入力します。
上記パラメータを指定したら 作成 をクリックします。
- ポリシーが作成されたことを確認します。
IoT グループを作成
- IoTコンソール左ペイン「管理」–> 「モノのグループ」–>「グループを作成」をクリックします。
- 「モノのグループタイプ」にて、「モノの静的グループを作成」にチェックを付け、画面右下「次へ」をクリックします。
- 「モノのグループのプロパティ」–>「モノのグループ名」にってグループ名を入力し、画面右下「作成」をクリックします。
※ 他の設定はデフォルトのままで問題ありません。
- グループ一覧にて、グループが作成されたことを確認します。
各ロールの連携
- 作成したポリシーを証明書とグループにアタッチします。
- グループをモノにアタッチします。
RaspberryPi側での作業
開発モジュールのインストール
- RaspberryPi Zeroへssh接続します。
- Python およびその開発ツールをインストールします。
# Python 3 をインストール
sudo apt install python3
# pip3 をインストールします
sudo apt install python3-pip
- Python およびその開発ツールがインストールされたことを確認します。
# Python v3 がインストールされているか確認します
python3 --version
# pip3 がインストールされているか確認します
pip3 --version
- Gitをインストールします。
# Gitをインストールします
sudo apt-get install git
- Gitがインストールされたことを確認します。
# Git がインストールされているか確認します
git --version
必要モジュールのインストール
- 下記ツールをインストールします。
- cmake
- libssl-dev
- awsiotsdk
- AWSIoTPythonSDK
# 必要モジュールのインストール
sudo apt-get install -y cmake
sudo apt-get install -y libssl-dev
sudo python3 -m pip install awsiotsdk
sudo pip install AWSIoTPythonSDK
サンプルプログラムをダウンロード
AWSの提供しているAWS IoT接続用のサンプルプログラムをダウンロードします。
# サンプルアプリケーションのダウンロード
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
証明書をアップロード
AWS IoTモノ作成時に発行した証明書をRaspberryPi上にアップロードします。
上げ方は人それぞれやりかたがありますので省略します。
本記事では以下の通りにアップロードします。
$ pwd
/home/<USERPROFILE>/aws-iot-device-sdk-python-v2/samples
$ ls certs/
<ルート CA 証明書> <デバイス証明書> <プライベートキー>
サンプルプログラムを実行する
サンプルプログラムを実行し、Raspberry Pi から AWS IoT へサンプルデータを送信します。
# サンプルプログラムを実行
python3 pubsub.py --topic IotTopic-1 \
--cert ./certs/<識別子>-certificate.pem.crt \
--key ./certs/<識別子>-private.pem.key \
--endpoint <AWS IoTのエンドポイント>
下記の結果が出力されます。
Connecting to ・・・ with client ID 'test-e0fa8766-fad2-4f11-8d89-af5207aea381'...
Connected!
Subscribing to topic 'IotTopic-1'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 10 message(s)
Publishing message to topic 'IotTopic-1': Hello World! [1]
Received message from topic 'IotTopic-1': b'"Hello World! [1]"'
Publishing message to topic 'IotTopic-1': Hello World! [2]
Received message from topic 'IotTopic-1': b'"Hello World! [2]"'
Publishing message to topic 'IotTopic-1': Hello World! [3]
Received message from topic 'IotTopic-1': b'"Hello World! [3]"'
Publishing message to topic 'IotTopic-1': Hello World! [4]
Received message from topic 'IotTopic-1': b'"Hello World! [4]"'
Publishing message to topic 'IotTopic-1': Hello World! [5]
Received message from topic 'IotTopic-1': b'"Hello World! [5]"'
Publishing message to topic 'IotTopic-1': Hello World! [6]
Received message from topic 'IotTopic-1': b'"Hello World! [6]"'
Publishing message to topic 'IotTopic-1': Hello World! [7]
Received message from topic 'IotTopic-1': b'"Hello World! [7]"'
Publishing message to topic 'topIotTopic-1c_1': Hello World! [8]
Received message from topic 'IotTopic-1': b'"Hello World! [8]"'
Publishing message to topic 'IotTopic-1': Hello World! [9]
Received message from topic 'IotTopic-1': b'"Hello World! [9]"'
Publishing message to topic 'IotTopic-1': Hello World! [10]
Received message from topic 'IotTopic-1': b'"Hello World! [10]"'
10 message(s) received.
Disconnecting...
Disconnected!
AWS IoT MQTT クライアントで接続確認
AWS IoT MQTT クライアントにて作成したトピック宛てにサンプルデータが送られているか確認します。
- AWSマネージメントコンソール を開きます。
- IoTコンソールへ遷移します。
- 左ペイン「テスト」–> 「MQTT テストクライアント」をクリックします。
- 「トピックをサブスクライブする」をクリックし、「サブスクリプション」から「IotTopic-1」が選択されていることを確認します。
- 下記の通りサンプルデータを受け取れていることを確認します。
コメント