se-lina’s BLOG

Lina KATAYOSE(se-lina)が実験や技術系のことなどをお送りします。

Raspberry Pi で温湿度センサーDHT11を使って室内温湿度を計測しslack通知する

f:id:se-lina:20220307180131p:plain

こんにちは。
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は秋月電子通商でも簡単に変えるのでぜひご利用ください。
(今はプルアップ抵抗がついたものが売っています)

配線図

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 インテグレーションの追加をクリックします。

slack通知

Webhook URLを確認します。コピペは後ほど。

slack通知

ここの赤枠のWebhook URLをコピペします。
このWebhook URLは後ほどPythonのプログラムで使用します。

slack通知

Slackへ投稿するための名前をカスタマイズできます。私はそのままにしました。
その他、アイコンをカスタマイズ可能で私はラズパイのアイコンにしました。

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のチャンネルにこのような通知が来ます。
f:id:se-lina:20220307182145p:plain

これが出れば準備完了です。


<実行のための事前準備>
まだの人はこちらから

$ 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)

f:id:se-lina:20220307182415p:plain

いかがでしたか?
外部から設置場所の温湿度がわかるので、ペットを飼っている人は役に立ちますよね!
ぜひ、やってみてください。