ラズパイで取得したセンサー値をGoogleSpreadSheetsでグラフ化するのPub/Sub準備編です。
本記事ではラズパイでセンサー値を取得し、Pub/Subのトピックを作成するところまでを設定します。
ざっくり図にすると次の通り。
Pub/Sub を補足すると、データの入口と出口のエンドポイントをそれぞれトピックと
サブスクリプションと呼び、Pub/Subへの送信と受信をそれぞれパブリッシュと
サブスクライブと呼びます。
今回の要件ではIoTCoreから受け取ったデータをサブスクライバーに転送します。
IoTCoreの役割は次の2つです。
- 端末レジストリでIoTデバイスを管理する
- 管理されたデバイスから受け取ったデータをパブリッシュする
今回は次の順に設定を行います。
- プロジェクトを作成する
-
IoTCoreとPub/Subの設定を行う
- 端末レジストリとトピックを作成する
- ラズパイを端末レジストリに登録する
-
ラズパイからIoTCoreにデータ送信する
- 送信プログラムを作成する
- 送信する
プロジェクトを作成する
gcpに適当なプロジェクトが必要です。 無ければ作成します。
今回は raspi-comfort-sensor という名前で作成しました。
IoTCoreとPub/Subの設定を行う
IoTCoreとPub/Subの設定を行います。
具体的には次の作業を行います。
正確なところは次の公式ドキュメントを確認してください。
また記事内では次の通り設定に名前を付けました。
項目 | 名前 | 補足 |
---|---|---|
レジストリID | raspi-comfort-sensor-iotcore-registry | 端末レジストリの名前。 この単位でIoTCoreを設定する。 |
トピック | raspi-comfort-sensor-pubsub-topic | Pub/Subがメッセージを受信するエンドポイントの名前。 |
端末ID | raspi-is | 端末レジストリにラズパイを登録するときの名前。 今回はラズパイからデータ送信を行う際にラズパイの ホスト名を端末IDとして流用するので両者を一致させておく。 |
端末レジストリとトピックを作成する
ウェブUIで次の通り作成します。
次の項目を入力します。
上記設定で次の通りPub/Subトピックも追加されています。
ラズパイを端末レジストリに登録する
次にラズパイを端末レジストリに登録するのですが、その前にラズパイと
IoTCore間の通信を暗号化するためのキーペアをラズパイで作成します。
キーペアの作成と登録については公式の Add a public key to the device に
記載されています。
次の通りです。
pi@raspi-is:~ $ mkdir iotcore
pi@raspi-is:~ $ cd iotcore
pi@raspi-is:~/iotcore $ openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem -nodes \
> -out rsa_cert.pem -subj "/CN=unused"
Generating a 2048 bit RSA private key
............................................+++
..........................+++
writing new private key to 'rsa_private.pem'
-----
pi@raspi-is:~/iotcore $ ls -l
合計 8
-rw-r--r-- 1 pi pi 1090 1月 5 10:23 rsa_cert.pem
-rw------- 1 pi pi 1704 1月 5 10:23 rsa_private.pem
作成した rsa_cert.pem を使って端末レジストリにラズパイを登録します。
次の項目を入力します。
完了すると次の通りレジストリの詳細で端末が確認できます。
以上でGCP側の設定は完了です。
ラズパイからIoTCoreにデータ送信する
送信プログラムはJava8+Mavenで作成しました。
もしOracleからJDKをダウンロードするのであればLinux ARM 32 Hard Float ABIを選択します。
Mavenは公式からアーカイブを取得して解凍してパスを通します。
送信プログラムを作成する
Googleの Cloud IoT Core Java MQTT example を元に作成しました。
ソースはgithubにあげましたのでそちらでご確認ください。
送信する
送信プログラムの動作確認が出来たら、Ambient向けに作成したスクリプトを
修正して送信プログラムを起動する処理を追加してください。
import os
cmd = 'cd /home/pi/iotcore/; java -jar raspi-comfort-sensor-iotcore-1.0.jar '
opt = '--temperature {} --humidity {} --pressure {} --illuminance {} --co2 {}' \
.format(temperature, humidity, pressure, illuminance, co2)
os.system(cmd + opt)
動作確認できたらcronに仕込みます。
以上でPub/Subの準備は完了です。
次は BigQuery蓄積編 です。