最初に入手した温湿度センサーモジュールは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に関しては
こっちに書いてあるのでそっちを見ていただくとして、これを適当な名前、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)
コメント