Raspberry Pi で温湿度センサーDHT11を使って室内温湿度を計測しslack通知する
こんにちは。
Raspberry Pi で温湿度センサーDHT11を使って室内温湿度を計測しslack通知する
をやっていきたいと思います。
すでに別の方がいろいろと公開していますが、
私なりに進めていたモノを自分で実際に実行して見ました。
今回のお話は2022年3月11〜12日に行われるOSC(オープンソースカンファレンス)で発表する内容を含みます。
ブログ公開後にオンラインのカンファレンスで発表する流れの発表ですので、
ぜひぜひ、3月12日の発表はオンラインで聞いていただけると嬉しいです。
私の発表は12日の13:00〜です。PyConJP2022のお話もしたりなど、、、
タイムテーブル
詳細はこちら↓
event.ospn.jp
もし、コメントや間違えなどご指摘がありましたら
私のTwitterアカウントまでお知らせください。
今回使用した機材
- Raspberry Pi 3B+(Zeroでも可能)
- micro SD(セットアップ済みOS)
- 電源や配線類
- ジャンパーピン
- ブレッドボード
- DHT11
- 抵抗
なぜ、この計測をしようと思ったのか。
今、部屋でメダカを飼っているので、そのメダカの育成環境が今どのようなものなのかを遠隔で気温情報を知りたいと思ったからです。
知りたいのは温度だけですが、それを調べるためには温湿度センサーのDHT11がとても安価で便利で、それを使うことにしました。
DHT11は秋月電子通商でも簡単に変えるのでぜひご利用ください。
(今はプルアップ抵抗がついたものが売っています)
配線図
ここでのプルアップ抵抗は10kΩを使っていますが、私は5.1kΩの抵抗を使いました。
(当時見た資料の違いかもしれません。)
<余談>
この配線にすると、GPIOの若い番号を別途RTCなどで使用するため、この配線図にしました。
<実行のための事前準備>
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install build-essential python-dev
ターミナルから以下のコマンドを実行しDHTを使えるようにします。
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git $ cd Adafruit_Python_DHT/ $ sudo python3 setup.py install
(参考用)温湿度を計測するだけのプログラム
from time import sleep from datetime import datetime import Adafruit_DHT as DHT PIN = 26 for i in range(10): while True: humi, temp = DHT.read_retry(DHT.DHT11, PIN) # 異常な値なら再取得 if (humi > 90) or (temp > 50): print("- error:", humi, temp) sleep(0.1) continue break # 情報を表示 date = datetime.now().strftime('%H:%M:%S') print("+", date) print("| 湿度=",humi, "%") print("| 温度=",temp,"度") data = str( date ) + "," + str(temp) + "," +str(humi) + " \r\n" f = open( file_name, 'a') f.write(data) f.close() sleep(1)
slackへの通知方法
slackの通知準備
これを実行するためにこちらのサイトを参考に実行しました。
mana-catさん、ありがとうございます。
IncomingWebHook の有効化
Slackの以下ページより、IncomingWebHooksを有効化します。
https://my.slack.com/services/new/incoming-webhook/
投稿するチャンネルを選択(私は#tempを作ってから選択)し、
Incoming Webhook インテグレーションの追加をクリックします。
Webhook URLを確認します。コピペは後ほど。
ここの赤枠のWebhook URLをコピペします。
このWebhook URLは後ほどPythonのプログラムで使用します。
Slackへ投稿するための名前をカスタマイズできます。私はそのままにしました。
その他、アイコンをカスタマイズ可能で私はラズパイのアイコンにしました。
次にラズパイの設定です。
Slackwebのセットアップをやっていきましょう。
ラズパイのターミナルを開いて、
$ sudo pip install slackweb
と入れましょう。
Python3で動かす場合は
$ sudo pip3 install slackweb
でインストールしないと受け入れてくれないときがあるので環境に合わせてやってみてください。
Slack投稿テスト
すぐに長めのコードを動かすとエラー箇所がわからないので、Slack通知が動いているかに焦点を当てて簡単なプログラムを書きます。
サンプルのプログラムはこちら
slack = slackweb.Slack(url="https://hooks.slack.com/services/xxxxx") に先ほど取得したWebhook URLを使用します。
# test.py import slackweb slack = slackweb.Slack(url="https://hooks.slack.com/services/xxxxx") slack.notify(text="Hello slack")
ラズパイで実行します
$ python3 test.py
すると、指定したSlackのチャンネルにこのような通知が来ます。
これが出れば準備完了です。
<実行のための事前準備>
まだの人はこちらから
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install build-essential python-dev
ターミナルから以下のコマンドを実行しDHTを使えるようにします。
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git $ cd Adafruit_Python_DHT/ $ sudo python3 setup.py install
プログラム
(1時間おきにSlackに温湿度を通知する)
from time import sleep from datetime import datetime import Adafruit_DHT as DHT import slackweb PIN = 26 for i in range(10): while True: humi, temp = DHT.read_retry(DHT.DHT11, PIN) # 異常な値なら再取得 if (humi > 90) or (temp > 50): print("- error:", humi, temp) sleep(0.1) continue break # 情報を表示 date = datetime.now().strftime('%Y/%m/%d %H:%M:%S') print("+", date) print("| 湿度=",humi, "%") print("| 温度=",temp,"度") data = str(date) + "\r\n 気温:" + str(temp) + "℃ 湿度:" +str(humi) + "% \r\n" slack = slackweb.Slack(url="https://hooks.slack.com/services/ZZZ取得したURLLLLLL") temp_data = data slack.notify(text=temp_data) #1時間:3600, 10分:600 1分:60 sleep(3600)
いかがでしたか?
外部から設置場所の温湿度がわかるので、ペットを飼っている人は役に立ちますよね!
ぜひ、やってみてください。