IMG_6601

第3回ではCPUの温度やクロック周波数などのRaspberry Pi内部の情報を、Blynkを使用してスマートフォン上で見られるようにしました。第4回ではGPIOポートに温度センサーを接続して、Raspberry Piの外部から情報を取得します。

Blynkのインストールやセットアップ手順については第1回〜第3回までの記事で解説しています。

今回は1-wire接続の温度センサーDS18B20、温湿度センサーDHT22、温湿度/気圧センサーBME280を使用します。

バーチャルポートは次のように割り当てることにします。
  • V3 … 温度(DS18B20、DHT22、BME280で使用)
  • V4 … 湿度(DHT22、BME280で使用)
  • V5 … 気圧(BME280で使用)
配線方法や測定用のサンプルプログラムは、本ブログで使用したものを修正せずに、そのまま使用することとします。

使用例、サンプルプログラム

<温度センサーDS18B20の測定>

DS18B20は1-wire接続の温度センサーで、Raspberry Piでは特別なプログラムを使用しなくても使用することができます。測定結果を表示するためのプログラムは、こちらのサンプルプログラムをそのまま使用します。測定結果をBlynkに渡すためのシェルスクリプトは、第3回で行ったのと同じ要領で作成します。

ファイル名:BLYNK_READ_V3.sh
#!/bin/sh
../1-wire/ds18b20.sh
#↑スクリプトのパスは実際の環境に合わせてください

このシェルスクリプトは単純に別のシェルスクリプトを実行しているだけです。もちろんこのシェルスクリプト中で完結させてもかまいません。

次にスマートフォン側のアプリで、バーチャルポートのV3に接続しましょう。第3回で使用したウィジットがEnergyを使用してしまっているので、Energyが足りない場合は設置済みのウィジットを削除します。

温度を表示するウィジットを追加します。今回は「Labeled Value M」を選択します。「Labeled Value」は「Value Display」と同様に値を表示するウィジットですが、表示方法がカスタマイズできるようになっています。
IMG_6589

ピ ンの選択は「Virtual」の「V3」にします。LABELの枠の中にある「/pin/」という文字列はフォーマットの指定で、この文字列の部分が値に 入れ替わります。例えば「/pin/ ℃」と設定すると「25.6 ℃」のように、わかりやすい表示にすることができます。また「/pin.##/」のようにすれば小数点以下の桁数を揃えることもできます。この辺はドキュメントに詳しい説明があります。
IMG_6590

これで準備が整いました。Blynkを起動していない場合は、起動します。
$ cd ~/blynk
$ sudo ./blynk --token=自分のAUTH TOKEN

アプリの右上の三角ボタンをタップしてRaspberry Piに接続します。マークが四角に変わったら接続完了です。
IMG_6590B

問題なければ、センサーの温度が表示されます。
IMG_6591


<温湿度センサーDHT22の測定>

温湿度センサーDHT22は、DS18B20と同じように1本の信号線を使って温度と湿度が測定できるセンサーです。測定用のプログラムは、こちらのサンプルプログラムをそのまま使用します。

サンプルプログラムを実行すると、以下のように温度と湿度が出力されます。
$ ./dht22.py
Temp= 24.8 deg C
Humidity= 74.3 %

しかしblynkには、温度は温度だけ、湿度は湿度だけを一つずつ渡さなくてはなりません。そこでサンプルプログラムの出力結果を加工して、数値の部分だけを抜き出すシェルスクリプトを作成します。

ファイル名:BLYNK_READ_V3.sh
#!/bin/sh
../DHT/dht22.py | grep ^Temp= | awk '{print $2}'
#↑スクリプトのパスは実際の環境に合わせてください

ファイル名:BLYNK_READ_V4.sh
#!/bin/sh
../DHT/dht22.py | grep ^Humidity= | awk '{print $2}'
#↑スクリプトのパスは実際の環境に合わせてください

それぞれのシェルスクリプトを実行すれば、値だけが取得できるのが確認できると思います。
$ ./BLYNK_READ_V3.sh
24.8
$ ./BLYNK_READ_V4.sh
74.0

上記のDS18B20の手順と同じようにアプリ側でウィジットを設定します。温度のピンの選択は「Virtual」の「V3」、湿度のピンの選択は「Virtual」の「V4」にします。
IMG_6592

なお、今回は第3回で作成した値を橋渡しする仕組みの都合上、センサーの値を一つ一つ渡す非効率な方法で行っていますが、プログラムを修正して測定は1回だけ行うようにするなど、改良の余地はあると思います。


<温湿度/気圧センサーBME280の測定>

温湿度/気圧センサーBME280は、1台で温度・湿度・気圧を測定できる、I2C接続のセンサーです。測定用のプログラムは、こちらのサンプルプログラムをそのまま使用します。サンプルプログラムは実行すると温度・湿度・気圧のそれぞれの値が主力されるので、上記のDHT22と同じように、出力結果を抜き出すシェルスクリプトを作成します。

サンプルプログラムを実行すると、以下のように温度と湿度が出力されます。
$ python bme280.py
Temp = 26.70 deg C
Humidity = 66.06 %
Pressure = 1013.18 hPa

サンプルプログラムの出力結果を加工して、数値の部分だけを抜き出すシェルスクリプトを作成します。

ファイル名:BLYNK_READ_V3.sh
#!/bin/sh
python ../BME280/bme280.py | grep ^Temp | awk '{print $3}'
#↑スクリプトのパスは実際の環境に合わせてください

ファイル名:BLYNK_READ_V4.sh
#!/bin/sh
python ../BME280/bme280.py | grep ^Humidity | awk '{print $3}'
#↑スクリプトのパスは実際の環境に合わせてください

ファイル名:BLYNK_READ_V5.sh
#!/bin/sh
python ../BME280/bme280.py | grep ^Pressure | awk '{print $3}'
#↑スクリプトのパスは実際の環境に合わせてください

アプリ側でウィジットを設定します。温度のピンの選択は「Virtual」の「V3」、湿度のピンの選択は「Virtual」の「V4」、気圧のピンの選択は「Virtual」の「V5」にします。
IMG_6593


<温度をゲージで表示しよう>

「Labeled Value」や「Value Display」は値を表示するだけのウィジットでしたが、「Gauge」を使うとアナログ的な表示にすることもできます。先に作成した「Labeled Value」を削除し、「Gauge」ウィジットを追加します。
IMG_6594

ピンは「Virtual」の「V3」を選択し、横の枠には最小値と最大値を入力します。今回は例として最小値を0℃、最大値を40℃としました。
IMG_6596

実行すると、見やすいゲージで表示されました。温度の最小値と最大値を狭めると、温度の変化もよりわかりやすくなります。
IMG_6597


<履歴表示のグラフを追加しよう>

こ れまでセンサーの”今”の値を表示させてきました。ウィジット「History Graph」を使用すると、”今まで”の値をグラフで見ることができます。ウィジット「History Graph」を追加します。History Graphは必要なEnergyが900と大きいので注意してください。Energyが足らない場合は不要なウィジットを削除するか、課金を検討してみて ください。
IMG_6598

ウィ ジットでバーチャルポートを選択した場合、他のウィジットでは同じバーチャルポートは選択することはできませんでした。しかしHistory Graphは、他のウィジットで使用しているバーチャルポートを選択することができます。他のウィジットは現在の値を表示するのに対し、History Graphは履歴を表示します。

History Graphでは最大で4種類のグラフを同時に表示させることができます。今回は「V3」の温度のみを表示させることにします。
IMG_6599

他 の値を追加することもできるのですが、湿度や気圧のような値が全く違うデータを選択すると、縦軸に値を取るため変化が全くわからないグラフになってしまい ます。そのため複数のグラフを表示させたい場合はグラフそのものを分けるか、同じ幅に納まるように値を計算させておく必要があります。

グラフの下には時間(横方向)を変えられるボタンがあり、1hは1時間、1dは1日、1wは1週間、1mは1ヶ月を意味しています。ためしにしばらく稼働させてから時間を選択すると、温度変化のグラフが描かれてるのがわかると思います。
IMG_6601

データを取得するのはBlynkのアプリを開いているときだけのため、アプリを閉じたり終了している間のデータは取得されません。


さて、次回はBlynkを使ってRaspberry Piをシャットダウンする実験を行います。シャットダウンに限らず、様々なコマンドの実行にも応用が可能です。


連載 IoTサービス「Blynk」を使ってRaspberry Piをスマホからコントロールしよう