Raspberry pi + pubnub で温度と湿度のリアルタイムグラフ表示

DSC_0141

前回、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)というセンサを使いました。

配線は以下の通り。Fritzingを使ってみたけど、イマイチ見にくいですね。。

ブレッドボード

1ピンと2ピンの間には10kΩの抵抗を入れています。

DSC_0142

ブレッドボードを使うと、はんだ付けが不要で、ジャンパー線で繋ぐだけなのでお手軽ですね。

スクリプトの準備

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するスクリプトは、以下のスクリプトを使ってみました。

Realtime-RaspberryPi-Temperature-Humidity-Sensor/temp_hum_eon.py at master · pubnub/Realtime-RaspberryPi-Temperature-Humidity-Sensor · GitHub

スクリプト内の以下の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にアクセスすれば見ることができます。

Apps | PubNub Admin Portal_y2ocp

スクリプトを実行してみます。

$ 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というツールでデバッグできます。

PubNub Developer Console and Debugger_mq8zh

channelにチャンネル名(今回は、温度がtempeonで湿度がhumeon)、publish keyとsubscribe keyには、自身のキー番号を入力して「SUBSCRIBE」ボタンをクリックすると、messages画面にpublishされたデータが表示されてきます。

PubNub Developer Console and Debugger_kkl27

チャンネル名をhumeonにすると、湿度の値がPublishされてきました。

PubNub Developer Console and Debugger_hamim

リアルタイムグラフ

PubNubにデータがPublishされていることを確認できましたので、このデータをリアルタイムに表示させてみます。リアルタイムグラフもGitHubに上がっているものを使わせてもらいます。

Realtime-RaspberryPi-Temperature-Humidity-Sensor/eon-charts at master · pubnub/Realtime-RaspberryPi-Temperature-Humidity-Sensor · 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に特化しているので当然といえば当然。

temp-line2.html_52kzt

JavaScript API Reference for Realtime Apps | PubNub

以上、Raspberry pi + pubnub で温度と湿度の情報をリアルタイムグラフ表示させてみましたが、温湿度の測定データってそもそもリアルタイム性って必要なくね?っと思ったので次回はもう少しリアルタイム性のあるサービスを動かしてみようかなと。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください