赤外線センサーの結果をRaspberryPi 3 Model B+からAWS IoT経由でQuickSightでグラフ化するまで(その1)
Contents
やりたい事
赤外線距離センサーでカウントした値をブラウザでグラフ形式で表示するまでを試してみた時の備忘録。
工場や事務所などに設置している各種センサーの値をクラウド上に蓄積して分析の為に集計するシステムは世の中に色々とあるが、どれもそれなりの値段がするので自作でどの程度のことができるのかを試してみた。
幸いAWS IoT CoreとRaspberryPiはあっさりつながったので出だしは順調だったのだが、何箇所かつまずいたところがあったので同じ様な事をしたい人の参考になればと思い記事にしておく事にした。
またRaspberryPiや電子工作は今回初めての経験、プログラミングは随分前に引退してPythonは半年前から触り始めた程度、AWSはこのブログを立ち上げる2018年からの経験なので、初心者なりになるべく分かりやすく書いているつもり。
もし分かりづらい所や間違いがあればコメントを貰えるとありがたいです。
処理の大まかな流れは以下の通り。
- 赤外線距離センサーを使ってセンサーの前を横切った物の数をカウント
- RaspberryPiのプログラム(Python)でセンサーからの信号を受信
- RaspberryPiからAWS IoT CoreにPublish(JSON形式でメッセージをアップロード)
- AWS IoT Analyticsでデータセットに保存
- データセットからAWS QuickSightでグラフ化
この構成で上手くいくようであれば他のセンサーでも同様の構成で試して見ようと思っている。
尚、この構成ではリアルタイムにデータを集計する事はできない(と思う、多分)。
AWS QuickSightのデータセットの自動更新タイミングが最短でStandard版で毎日、Enterprise Editionで毎時なのでこの構成は各種センサーが蓄えたデータをまとめて分析する様な用途に適している。
使用したセンサー
赤外線距離センサーはSWITCH SIENCE社で766円の高出力版を購入した。
赤外線センサー部分はVISHAY社のTSSP77038(データシートはこちら)を使っている。
尚、距離センサーと名前がついているが距離の測定はできない。
高出力版は約24インチ(60cm)、省電力版は半分の30cm以内にモノが有るか/無いかを赤外線で判断して信号を送る機能となっている。
下記の写真はハンダ済みのコネクタ、左からGND、VDD、OUT、ENABLEとなっている。
ハンダは自信がなかったので経験者にお願いしてやってもらった。
色々と教えてもらって練習してうまくなりたい。
RaspberryPiとの接続は以下の通り
TSSP77038側 | RaspberryPi側 |
GND | 6番ピン(GND) |
VDD | 2番ピン(5V) |
OUT | 29番ピン(GPIO5) HIGH:赤外線未検知 LOW:赤外線検知 |
ENABLE | 未使用 |
上記の写真だがRaspberryPiの本体のピンに直接差し込んでいるわけではない。
タッチスクリーンをつけているのでRaspberryPiの通常のピンはふさがってしまっているが、このタッチスクリーンはRaspberryPiのピン配列をそのままに横にバイパスする機構がついているのでそちらに繋いでいる。
下記の写真はRaspberryPiに繋いで電源を入れた所。
通電していれば緑LEDが点灯、センサーでモノを感知すれば赤LEDが点灯する。
RaspberryPi側の設定
RaspberryPi 3 Model B+はアマゾンで購入した。
上記のセットは最初の起動に必要な物は一通り揃っておりSDカードにNOOBSシステムがプリインストールされているモデルだった。
最初の起動時にOSを選択する画面が表示されたのでRaspbianを選択した。
標準状態からの主な変更点は、
- パッケージのアップデート(sudo apt-get update、upgradeの実行)
- ホスト名の変更
- ssh、VNCを有効化
- 固定IPの割当(毎回IP AddressがDHCPで変更されるとVNC接続の時に困るので)
- デフォルトpiユーザのパスワードの変更
- paho mqttのインストール
1.~5.についてはそのうち別記事で書こうと思っている。
paho mqttとは
RaspberryPiとAWS IoT Coreとの通信プロトコルはMQTTにて行う。
MQTT(Message Queueing Telemetry Transport )はIBM社とEurotech社のメンバーにより考案されたIoTでの利用に適したプロトコル。
軽量で省電力、優れた処理速度から非力なマシンやネットワークが不安定な場所での利用が想定されており、HTTPの10分の1程度の通信量で済む。
メッセージを送信する側がパブリッシュ(Publish)、受信する側をサブスクライブ(Subscribe)と表現される。
RaspberryPi上で動作するMQTTのモジュールはいくつかあったのだが今回はネット上に情報が多かったpaho mqttを選択する事にした。
paho mqttは元々IBMが開発してオープンソース化したものなのでMQTTの本流なのではと(勝手に)思い、インストールすることにした。
paho mqttのインストール
PythonのデフォルトをPython3にする
paho mqttのインストールの前にRaspberryPiのPythonのデフォルトをPython3にしておく。
今回購入したRaspberryPi 3 Model B+のSDカードにプリインストールされていたRaspbianにはPython2.7.13とPython3.5.3の2つのバージョンのPythonが同居していた。
うっかりpipコマンドでpaho-mqttをインストールするとPython2.7環境にインストールされてしまい後々面倒な事になる(なった)。
プログラムはPython3で作成・動作させるので最初にデフォルトをPython3に変更しておく事にする。
まずはディレクトリの移動
cd /usr/bin
デフォルトではPython2.7に対してシンボリックリンクがはられている。
既存のリンクを削除してPython3へのシンボリックリンクを作成する。
sudo unlink python
sudo ln -s python3 python
Python3へのシンボリックリンクが作成された。
この状態でpaho-mqttをpip3コマンド※でインストール
sudo pip3 install paho-mqtt
paho-mqtt Ver1.4.0がインストールされた
※pip3はPython3のパッケージを管理するためのコマンド。Python2のpipコマンドも使えたので最初、うっかり間違えてpaho mqttをインストールしたらPython2.7の配下にインストールされてしまった。
RaspberryPi側の設定は以上で終了。
Pythonプログラムの内容、AWS IoT Coreの設定などについては次回以降の記事とする。
動画での説明
基本的に記事と同内容を動画で説明している。
赤外線距離センサーやRaspberryPiへの配線など、実物を見たい方はこちらから確認して欲しい。
最近のコメント