Raspberry Pi ZeroとBME280センサを使って部屋の温度・湿度を可視化する

Raspberry Pi ZeroとBME280センサを使って部屋の温度・湿度を可視化する
公開日時
更新日時

蒸し暑くて寝苦しい夜が続いている。

実際のところ寝ている間の部屋の温度と湿度はどうなっているのか?

気になったので、Raspberry Pi Zero WHBME280搭載 温湿度・気圧センサモジュールを使って部屋の温度・湿度・気圧を可視化することにした。

(家にはんだごてがないので、 ピンヘッダ実装済のものを購入)

配線

下記記事を参考にブレットボードにセンサーを取り付けて配線。

sudo apt update
sudo apt -y upgrade

sudo apt install -y i2c-tools

sudo raspi-config
=> i2cを有効に

sudo i2cdetect -y 1

=> 76が有効になっている

サンプルコード実行

git clone https://github.com/SWITCHSCIENCE/samplecodes.git
cd samplecodes/BME280/Python27/

そのままだとsmbus2がないというエラーになったのでpip installで追加。

sudo apt install -y python-dev python-pip
sudo pip install smbus2

これで気温・湿度・気圧を取得できるようになった。

python bme280_sample.py
temp : 28.50  ℃
pressure : 1011.71 hPa
hum :  54.53 %

Mackerelで監視

Raspberry Piの監視にMackerelを利用しているので、ついでに気温や湿度もMackerelで監視できるようにしてみる。

MackerelのServicesに新しいサービスを追加し、データ送信用のシェルスクリプトを[[samplecodes/BME280/Python27/]]以下に保存。

# mackerel.sh

#!/bin/sh
temp=`python bme280_sample.py | grep temp | awk '{print $3}'`
pressure=`python bme280_sample.py | grep pressure | awk '{print $3}'`
hum=`python bme280_sample.py | grep hum | awk '{print $3}'`

di=`python di.py ${temp} ${hum}`

echo ${di} > di.txt

curl https://api.mackerelio.com/api/v0/services/XXXX/tsdb -H 'X-Api-Key: your_api_key' -H 'Content-Type: application/json' -X POST -d '[{"name": "Temperature.celsius", "time": '$(date +%s)', "value": '${temp}'}, {"name": "Pressure.hPa", "time": '$(date +%s)', "value": '${pressure}'}, {"name": "Humidity.percent", "time": '$(date +%s)', "value": '${hum}'}, {"name": "DiscomfortIndex.value", "time": '$(date +%s)', "value": '${di}'}]'

温度と湿度から不快指数が計算できるので併せて計測してみることにした。(diの部分)

コードは以下。コマンドライン引数で温度と湿度を受け取り不快指数を計算している。

# di.py

import sys

def discomfortIndex(t, h):
  temp = float(t)
  hum = float(h)
  return 0.81 * temp + 0.01 * hum * (0.99 * temp - 14.3) + 46.3

args = sys.argv
print(discomfortIndex(args[1], args[2]))

データがMackerelに送信されていることが確認できたらcronで定期送信するように設定。

# crontab -l

* * * * * cd /home/pi/samplecodes/BME280/Python27 && ./mackerel.sh

これで部屋の気温・湿度・気圧・不快指数が可視化できるようになった。

bme280

冷房をつけない状態だと不快指数80を超えていた。

80以上はほとんどの人が不快に感じる暑さらしいので数値上もこの部屋は暑くて不快だということが判明した。

冷房をつけたら温度と湿度が下がって不快指数も78まで低下。

見える化まではできたので、今度はデータを元に空調調整ができるようにしよう。

参考


Related #raspberry pi

ngrokの代わりにCloudflare Tunnelを使う

botやwebhookを利用するサービスの開発が捗る

Dockerのデータ保存場所を変更する

/etc/docker/daemon.jsonに追記

Alexaにゲーミングマシンと周辺環境を終了してもらう

「Alexa Steamを終了して」ができるようになった

Alexaにゲーミングマシンと周辺環境を起動してもらう

PC起動、TV起動、サウンドバー起動がまとめてできるようになった

docker-compose build時に「no Space Left on Device」が発生

1年前にも同じエラーにハマってた