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

LINEで送る
Pocket

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

関連記事:

  • トラックバック 停止中
  • コメント (4)
    • ひまわり
    • 2016年 3月21日

    Raspberry Pi 初心者です。

    リアルタイムグラフの前までは出来ました。

    Realtime-RaspberryPi-Temperature-Humidity-Sensor/eon-charts at master · pubnub/Realtime-RaspberryPi-Temperature-Humidity-Sensor · GitHub

    上記データを全てWebサーバーにアップします。とありますが,
    Webサーバを同じRaspberry Pi の /var/www/html に階層を変えずにアップすれば
    良いのでしょうか?

    publish keyとsubscribe keyを自身のキーを年功後,
    http://Raspberry Pi のローカルアドレス の何のファイルを指せば良いのでしょうか?

    大きな勘違いしてると思いますが,ご回答お願いできればと思います。

      • 管理人
      • 2016年 3月22日

      >ひまわりさん

      説明が言葉足らずですいません。
      ここで言っているWebサーバーとは、Raspberry Pi ではない別のサーバーを指しています。

      Raspberry Pi でWebサーバーを立ち上げて、そこにアップしても動作可能かと思います(試してはいませんが)

      ファイルをアップして修正後に、「examples」フォルダ内にある、「temp-line.html」や「hum-gauge.html」にアクセスすればリアルタイムグラフが表示されると思います。

        • ひまわり
        • 2016年 3月22日

        管理人 様

        早速の回答ありがとう御座います。

        いろいろ試してみます。

        お忙しいところ,ありがとう御座いました。

    • ひまわり
    • 2016年 3月22日

    管理人 様

    Raspberry Pi にapacheを入れ、修正しUpしたら動きました。

    ありがとう御座いました。