部屋の温湿度と気圧が知りたい

RaspberryPi

最初に入手した温湿度センサーモジュールはDHT11であった。

当時家にあった温湿度計はアナログのこれしかなかったので、長らく並行してデータを取ったりして「まぁまぁ合ってるな」程度の認識ではあったが、我慢ならないのはしばしばデータ欠損があることだった(センサーとしての応答性能が悪いのである)。2019年当時はこれをSlackで通知させたり、IFTTTを使ってGoogleにデータの記録とか、世間一般でよくあるような「一通りのこと」はやってみたりもしたのであるが、温度の記録そのもの或いはエアコンの制御などはSwitchBotがその役を担うようになったので「たまに通知があれば良い」という結論になった。

そしてそれは家のネット環境のビーコンを兼ねている。つまり、温度通知がないということは、すなわちWi-Fiが死んでいる、ネット回線が死んでいる、若しくは停電である、ということになるので、割とトラブルを早く発見できるのである(実際、これでWi-Fiルーターの故障とかネット回線の異常を察知したことがある)。その後、応答性能が良くさらに気圧の測定もできるということでBME280を入手し、以来、安定運用している。そして、家族に広く周知するためLINE Notifyに移行した。

ラズパイはまず、/boot/config.txt の次の先頭の#を消して保存し再起動する。

dtparam=i2c_arm=on

これでI2Cが有効化される。

pi@pi1:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 --                   

BME280を認識するとi2cdetectでアドレスが返ってくる。サンプルプログラムを元に、LINEで定時的に温湿度と気圧を報告するようにした。

import requests
import smbus2
import bme280

host = 'https://notify-api.line.me/api/notify'
token = 'Your Token'
headers = {'Authorization': f'Bearer {token}'}

def send(message):
    payload = {'message': message}
    requests.post(host, data=payload, headers=headers)

# BME280センサーの初期化
port = 1
bus = smbus2.SMBus(port)
address = 0x76
calibration_params = bme280.load_calibration_params(bus, address)

# 温度、湿度、気圧の取得
data = bme280.sample(bus, address, calibration_params)
strtemp = format(data.temperature, '.1f')
strhumi = format(data.humidity, '.1f')
strpres = format(data.pressure, '.1f')

# LINE Notifyに送信するメッセージ
message = f'\n室温 {strtemp}℃\n湿度 {strhumi}%\n気圧 {strpres}hPa'
send(message)

LINE Notifyに関しては

https://www.minakawa.org/2024/08/16/
水槽冷却ファンをラズパイで制御する/

こっちに書いてあるのでそっちを見ていただくとして、これを適当な名前、line_bme280.pyなどと付けて保存して、crontabに登録した。

37 6-23/2 * * * /usr/bin/python /home/pi/line_bme280.py

6時から23時まで、毎時37分の2時間おき、つまり6、8、10、、、時の37分にLINEで下記のように通知してくれる。

なぜ37分なのかは水槽温度の時に43分にした理由と同じで、たまたまそのあたりの時間が何も通知が来ないからである(例えば毎時0分などではいろいろな通知が来る)。寝ているであろう23時から朝5時までは黙ってて欲しいので、6時から22時にしたのも同じ。

水温計測よりこっちの方を先に設置していたので、このラズパイをそのままFAN制御に使ったわけであるが、室温と水温の相関がわかって面白い。気圧に関しては天気予報との相関がわかる。

AZ-FRONT BME280 センサーモジュール I2C/SPI 温度 湿度 気圧 計測 Arduino/Raspberry Pi 対応 (GY-BME280 5V)

AZ-FRONT BME280 センサーモジュール I2C/SPI 温度 湿度 気圧 計測 Arduino/Raspberry Pi 対応 (GY-BME280 5V)

コメント

タイトルとURLをコピーしました