Raspberry pi + pubnub で温度と湿度のリアルタイムグラフ表示
前回、Raspberry PiにOSをインストールする所まで紹介しました。
Raspberry Pi2 Model Bにディスプレイとキーボード無しでOSをインストール | ネットワークエンジニアを目指して – ブログ
今回は、以下のGitHubを参考に、IoTに特化したリアルタイムBaaS(Backend as as Service)のPubNubと連携させて、温度と湿度をリアルタイムにグラフ表示させてみようと思います。
pubnub/Realtime-RaspberryPi-Temperature-Humidity-Sensor · GitHub
BaaSとは、モバイル端末向けのアプリケーションの開発・運用に必要なAPIを提供するサービスのことです。BaaSを使えば、アプリケーション開発者がサーバを用意しなくてもクラウドへのデータ永続化、プッシュ通知、ユーザ管理、位置情報サービスなどを行えます。
ハードウエアの準備
使用した温湿度センサはAM2302(DHT22)というセンサを使いました。
売り上げランキング: 70,510
配線は以下の通り。Fritzingを使ってみたけど、イマイチ見にくいですね。。
1ピンと2ピンの間には10kΩの抵抗を入れています。
ブレッドボードを使うと、はんだ付けが不要で、ジャンパー線で繋ぐだけなのでお手軽ですね。
スクリプトの準備
Raspberry Piに各種スクリプトをインストールします。
pythonをインストール。
$ sudo apt-get update
$ sudo apt-get install build-essential python-dev
Adafruit_Python_DHTのインストール
Raspberry PiからAM2302(DHT22)の温度/湿度を取得するスクリプトがGithubにあがっていたので、これを使います。
adafruit/Adafruit_Python_DHT · GitHub
$ sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo python setup.py install
動作確認
温度/湿度が取得できるか試してみます。
$ cd examples/
$ sudo python ./AdafruitDHT.py 22 4
Temp=29.3*C Humidity=43.5%
sudoで実施しないとエラーになりますので注意。
pubnubをインストール
続いて、pubnubをインストールします。
$ sudo apt-get install python-pip
$ sudo pip install pubnub
pubnubのアカウントも作っておきます。
Get Started With PubNub To Build Realtime Apps | PubNub
PubNubにデータをPublishするスクリプト
温湿度を取得して、PubNubにデータをPublishするスクリプトは、以下のスクリプトを使ってみました。
スクリプト内の以下のAPIキーを指定るする部分は、自身のpublish keyとsubscribe keyに変更します。
pubnub = Pubnub(publish_key='demo', subscribe_key='demo')
「demo」の部分を自身のpublish keyとsubscribe keyに変更します。
publish keyとsubscribe keyは、PubNubにログインした状態でPubNub Admin Portalにアクセスすれば見ることができます。
スクリプトを実行してみます。
$ sudo python ./temp_hum_eon.py
Temp=29.5*C Humidity=46.0%
Temp=29.3*C Humidity=46.0%
Temp=29.3*C Humidity=46.5%
Temp=29.4*C Humidity=46.5%
Temp=29.4*C Humidity=46.0%
Temp=29.3*C Humidity=46.5%
Temp=29.4*C Humidity=46.0%
問題無く動作しているようです。実際にPubNubにデータをPublishしているかどうかを調べるには、PubNub Developer Console and Debuggerというツールでデバッグできます。
channelにチャンネル名(今回は、温度がtempeonで湿度がhumeon)、publish keyとsubscribe keyには、自身のキー番号を入力して「SUBSCRIBE」ボタンをクリックすると、messages画面にpublishされたデータが表示されてきます。
チャンネル名をhumeonにすると、湿度の値がPublishされてきました。
リアルタイムグラフ
PubNubにデータがPublishされていることを確認できましたので、このデータをリアルタイムに表示させてみます。リアルタイムグラフもGitHubに上がっているものを使わせてもらいます。
上記データを全てWebサーバーにアップします。
変更点は、pubnub.min.js内の、以下のpublish keyとsubscribe keyを自身のキーに変更するだけです。
, PUBLISH_KEY = setup['publish_key'] || 'demo'
, SUBSCRIBE_KEY = setup['subscribe_key'] || 'demo'
「demo」の部分を自身のpublish keyとsubscribe keyに変更します。
サイトにアクセスしてみるとリアルタイムに温度と湿度が表示されるのが分かります。
過去データの取得
過去の温度推移を知りたいなど、過去のデータを取得したい場合は、historyを利用すれば取得できます。
ただし、最大でも100件までみたいなので、日々計測して溜め込んでおくようなサービスにはちょっと使えないですね。PubNubはあくまでリアルタイムBaaSに特化しているので当然といえば当然。
JavaScript API Reference for Realtime Apps | PubNub
以上、Raspberry pi + pubnub で温度と湿度の情報をリアルタイムグラフ表示させてみましたが、温湿度の測定データってそもそもリアルタイム性って必要なくね?っと思ったので次回はもう少しリアルタイム性のあるサービスを動かしてみようかなと。