ラズパイで部屋の温湿度を測ってtweetする


Raspberry Piに接続した温湿度センサー(DHT11)で測った温度・湿度をWebhook経由でGoogleスプレッドシートに送って、かつtweetできるようにしてみた備忘録です。(下図参照)

温湿度センサー(DHT11)とRaspberry Piの接続

はじめに、DHT温湿度センサー(DHT11)とRaspberry Piを以下の通り接続します。

DHT11 Raspberry Pi
VCC 3.3V
GND GND
DATA GPIO4

次に、DHT11を扱えるようにするために、「DHT11_python」ライブラリを落とします。
LX Terminalで以下のコマンドを実行します。

git chone https://github.com/szazo/DHT11_python.git

/home/piフォルダ内に、「DHT11_python」というフォルダができています。
その中にある「dht11_example.py」というファイルをThonny Python IDEで開き、Pin番号を4番に修正します。

dht11_example.py
import RPi.GPIO as GPIO
import dht11
import time
import datetime

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# read data using pin 4
instance = dht11.DHT11(pin=4) #pin番号を4(GPIO4)に修正

while True:
    result = instance.read()
    if result.is_valid():
        print("Last valid input: " + str(datetime.datetime.now()))
        print("Temperature: %d C" % result.temperature)
        print("Humidity: %d %%" % result.humidity)

    time.sleep(1)

「dht11_example.py」を実行します。
正しく動作していれば、取得時間、温度、湿度が表示されます。

pi@raspberrypi:~ $ cd DHT11_python
pi@raspberrypi:~/DHT11_python $ dir
LICENSE.md  README.md  __init__.py  dht11.py  dht11_example.py
pi@raspberrypi:~/DHT11_python $ python dht11_example.py
Last valid input: 2019-06-19 00:54:21.994905
Temperature: 29 C
Humidity: 43 %
Last valid input: 2019-06-19 00:54:24.147734
Temperature: 30 C
Humidity: 42 %

IFTTTでwebhookからGoogleスプレッドシートに書き込むレシピを作る

IFTTTでwebhookからGoogleスプレッドシートに書き込むレシピを作ります。
こちらのページを全面的に参考にして設定したので、こちらのページを参照にしてください。

レシピはこんな感じになります。

Pythonファイルを作るときに、
Value1は取得時間
Value2は温度
Value3は湿度
が入るようにしていきます。

IFTTTでwebhookからtweetするレシピを作る

次は、取得時間、温度、湿度をtweetするレシピを作ります。
要領はGoogleスプレッドシートの時とほぼ同じです。

「This」はGoogleスプレッドシートのものと同じ。
Event Nameも同じものにします。

「That」はつぶやきたいTwitterアカウントを連携させて、Tweet textを記入します。
Value1~3はGoogleスプレッドシートのものと同じものになります。

レシピはこんな感じになります。

Webhookに流すようにPythonファイルを修正する

「dht11_example.py」を修正し、Raspberry Piで温湿度を取得し、Webhookに流すようにします。
下のコードをコピペすればたぶん動作すると思います。
(ファイルは「dht11.py」と同じディレクトリに保存してください。)

dht_ifttt.py
import RPi.GPIO as GPIO
import dht11
import time
import datetime

# IFTTT_Webhook
def ifttt_webhook():
    payload = {"value1": time,
                "value2": temp,
                "value3": humi }
    url = "https://maker.ifttt.com/trigger/{Event Name}/with/key/{Your Key}"
    response = requests.post(url, data=payload)

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# read data using pin 4
instance = dht11.DHT11(pin=4)

while True:
    result = instance.read()
    if result.is_valid():
        break

date = datetime.datetime.now()
time = date.strftime("%Y/%m/%d %H:%M")
temp = result.temperature
humi = result.humidity

ifttt_webhook()

Rasbianのcron機能で定期実行する

Raspberry Piを操作しなくても、定期的にプログラムを実行するように、Raspbianのcronという機能を使います。
ここでは1時間に一度、dht_ifttt.pyを実行するようにします。

LX Terminalで以下のコマンドを実行します。

crontab -e

「Select an editor」と表示されたら、「2」の/bin/nanoを選択してください。

「nano」が開いたら、カーソルをがメインの一番下に移動し、以下のコマンドを入力します。

00 * * * * /usr/bin/python3 /home/pi/raspberrypi/dht11_ifttt.py
  • Ctrl + X で終了します。
  • 「変更されたバッファを保存しますか?」と表示されたら、「Y」キーを押します。
  • 「書き込むファイル~」と表示されたら、「Enter」キーを押します。
  • 以下の表示がされたら書き込み終了です。
crontab: installing new crontab

あとは、hh時00分に気温、湿度が記録されていることを確認しましょう。

以上。