Raspberry PiとBlynkを使って温湿度情報を遠隔監視するための手順メモ.Blynkはこういう数値情報を送って遠隔監視するには超便利.
背景
これまで,畑監視システムを構築するために色々やってきたが,つい最近からBlynkというものを使ってみている.前々回の記事では,それぞれ違うネットワークに接続されているRaspberry Piとスマホを接続して,スマホからRaspberry Piに数値情報を送ってみた.
www.eletech.work
そして前回の記事では,畑監視システムに欠かせない温湿度情報をRaspberry Piで計測することにトライした.
www.eletech.work
そして今回は,温湿度情報をリアルタイムでBlynkを使ってスマホで監視することにする.そのための手順メモ.
Blynkアプリ側の準備
Blynkアプリ側は,既に作っていたtestプロフェクトを前々回の記事と同じで使用することにする.前回作っておいたスライダも残しておいて,これとは別に"Gauge"というライブラリを使ってみる.温度表示用と湿度表示用にそれぞれ置いてみる.なんか,Gaugeを置いただけでちょっとかっこいい.Gaugeをそれぞれタップして,各種設定を以下の通りにする.これで,Blynk側の設定はOK.
Python3でのプログラム
冒頭でリンクを貼った過去の記事を参考にしつつ,以下のようなプログラムを作成.
import BlynkLib import smbus import time i2c = smbus.SMBus(1) addr=0x45 def sign16(x): return ( -(x & 0b1000000000000000) | (x & 0b0111111111111111) ) # Initialize Blynk blynk = BlynkLib.Blynk('b8********************************5a') @blynk.VIRTUAL_WRITE(1) def my_write_handler(value): print('Current V1 value: {}'.format(value)) @blynk.VIRTUAL_READ(2) def my_read_handler(): blynk.virtual_write(2, (Temparature)) @blynk.VIRTUAL_READ(3) def my_read_handler(): blynk.virtual_write(3, (RelativeHumi)) while True: #Execute Blynk blynk.run() #send address i2c.write_byte_data(addr,0xe0,0x0) #read data data = i2c.read_i2c_block_data(addr,0x0,6) #calculate temparature data raw_data_T = ((data[0]) << 8) | (data[1]) calc_T = sign16(int(hex(raw_data_T),16)) Temparature = round(-45 + 175 * calc_T / (2**16 - 1), 1) #calculate humidity data raw_data_RH = ((data[3]) << 8) | (data[4]) RelativeHumi = round(100 * raw_data_RH / (2**16 - 1), 1) #print data print (str(Temparature) +"degC") print (str(RelativeHumi) +"%RH") #wait for data conversion time.sleep(1)
動作確認(温湿度の遠隔監視)
まず,Raspberry Piのターミナルでプログラムを実行.
pi@raspberrypi:~ $ sudo python3 blynk_test.py blynk_test ___ __ __ / _ )/ /_ _____ / /__ / _ / / // / _ \/ '_/ /____/_/\_, /_//_/_/\_\ /___/ for Python v0.2.0 (Linux) 19.7degC 48.1%RH 19.7degC 48.0%RH
Blynkが立ち上がって,温湿度が表示されていることを確認.スマホをRaspberry Piと違うネットワークに接続するために,WiFiを切って4G接続にしておいて,Raspberry Piとの接続を開始してみると…かっこいい!いい感じ!ちなみにこの状態で,息を吹きかけてみると…温度と湿度が確かに変わることを確認.ちなみに,前回作ったスライダを使ってスマホからRaspberry Piに数値を送るやつも活かしているので,スライダを動かすと,
pi@raspberrypi:~ $ sudo python3 blynk_test.py blynk_test ___ __ __ / _ )/ /_ _____ / /__ / _ / / // / _ \/ '_/ /____/_/\_, /_//_/_/\_\ /___/ for Python v0.2.0 (Linux) 19.7degC 48.1%RH 19.7degC 48.0%RH 19.7degC 47.9%RH 19.7degC 47.8%RH 19.7degC 47.8%RH 19.7degC 47.8%RH 19.7degC 47.9%RH 19.7degC 47.9%RH 19.7degC 47.9%RH 22.2degC 50.5%RH 21.7degC 58.3%RH 21.6degC 65.5%RH 21.4degC 71.2%RH 21.3degC 75.6%RH 21.1degC 79.1%RH 21.0degC 81.0%RH 20.9degC 79.6%RH 20.8degC 76.3%RH Current V1 value: ['135'] 20.8degC 72.6%RH
と,送られてくることをが確認できた.これで,Raspberry Piとスマホがそれぞれ異なるネットワークに接続されている状態で,双方向にデータをやり取りできるところまで確認.