Raspberry Pi×Blynkで温湿度を遠隔監視する

Raspberry PiとBlynkを使って温湿度情報を遠隔監視するための手順メモ.Blynkはこういう数値情報を送って遠隔監視するには超便利.

背景

これまで,畑監視システムを構築するために色々やってきたが,つい最近からBlynkというものを使ってみている.前々回の記事では,それぞれ違うネットワークに接続されているRaspberry Piとスマホを接続して,スマホからRaspberry Piに数値情報を送ってみた.
www.eletech.work

そして前回の記事では,畑監視システムに欠かせない温湿度情報をRaspberry Piで計測することにトライした.
www.eletech.work

そして今回は,温湿度情報をリアルタイムでBlynkを使ってスマホで監視することにする.そのための手順メモ.

使用機器

使用する機器は以下の通り.

  • Raspberry Pi 2 model B
  • 温湿度センサモジュール AE-SHT3X(秋月電子で購入)


Raspberry Pi 2 Model B (1)

Blynkアプリ側の準備

Blynkアプリ側は,既に作っていたtestプロフェクトを前々回の記事と同じで使用することにする.前回作っておいたスライダも残しておいて,これとは別に"Gauge"というライブラリを使ってみる.温度表示用と湿度表示用にそれぞれ置いてみる.

f:id:EleTECH:20190218235522p:plain
Gaugeの配置
なんか,Gaugeを置いただけでちょっとかっこいい.Gaugeをそれぞれタップして,各種設定を以下の通りにする.
f:id:EleTECH:20190218235705p:plain
温度用Gaugeの設定
f:id:EleTECH:20190218235737p:plain
湿度用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との接続を開始してみると…

f:id:EleTECH:20190219000233p:plain
Blynkアプリの画面
かっこいい!いい感じ!ちなみにこの状態で,息を吹きかけてみると…
f:id:EleTECH:20190219000447p:plain
息を吹きかけたときのBlynk画面
温度と湿度が確かに変わることを確認.ちなみに,前回作ったスライダを使ってスマホから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とスマホがそれぞれ異なるネットワークに接続されている状態で,双方向にデータをやり取りできるところまで確認.