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

Raspberry Piに接続した温湿度センサー（DHT11）で測った温度・湿度をWebhook経由でGoogleスプレッドシートに送って、かつtweetできるようにしてみた備忘録です。（下図参照）
![ifttt.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/fc39b27b-33fd-51e4-34a7-ce153168ba6d.png)

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

| DHT11 | Raspberry Pi |
|:------------:|:------------:|
| VCC       | 3.3V        | 
| GND     | GND      | 
| DATA       | GPIO4        |


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

```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」を実行します。
正しく動作していれば、取得時間、温度、湿度が表示されます。

```console
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](https://ifttt.com/)でwebhookからGoogleスプレッドシートに書き込むレシピを作ります。
[こちらのページ](https://qiita.com/_hama_/items/9acb296bdf3cff03c51b#2-ifttt%E3%81%AEwebhook%E3%82%92%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)を全面的に参考にして設定したので、[こちらのページ](https://qiita.com/_hama_/items/9acb296bdf3cff03c51b#2-ifttt%E3%81%AEwebhook%E3%82%92%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)を参照にしてください。

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

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

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/caf83d23-d9e8-8a61-ae9c-8bed6676a1a4.png)


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

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

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

レシピはこんな感じになります。
![レシピ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/b6768e5b-322f-fa56-96fb-c2f53cc242c3.png)



#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分に気温、湿度が記録されていることを確認しましょう。

以上。