温度センサーDHT22をラズパイで動かす

#温度センサーDHT22をラズパイで動かす
またまたn番煎じ的な感じですが、べつにIoTをやりたいわけではなくて、
センサーデータをオブジェクトストレージにためる為の準備的な感じ。
あとエアコンの無い7月のテレワーク部屋がどのくらい暑いのかって事を知ってほしい。

使ったもの
ラズパイ:Pi3b+ (Linux raspberrypi 4.19.118-v7+ )
センサー:HDT22　
電源:5V/3.0A 
プログラム：https://github.com/adafruit/Adafruit_Python_DHT

#センサー取り付け
センサーにケーブルが3本入っていたのでそれを使用

| ケーブル | DHT22 | Piのピン番号 |
|:-:|:-:|:-:|
| 青  | GND  |6番   |
|  黄色 |VCC  |2番   |
|  緑色 |DAT  |7番(GPIO=4)   |

注意点として、緑はピン番号は7番だけどGPIOのIDは**４番**です！　ラズパイの仕様なのでしょうがない。
ケーブルは、どの色がどこでも問題ないですが昔の覚え方だと、五月みどり、岸恵子、青二才のろくでなし、なので青は6番へ。
*写真はRICOH GR3で無駄に接写*
![DHT22_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478729/19a603de-093f-1ffd-9a19-ee35bc49af78.jpeg)
![DHT22_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478729/632b6557-2d0e-481a-cdc8-a00c115dfa62.jpeg)
![DHT22_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478729/c5797e75-99a5-8cc6-7667-c83952515afb.jpeg)

ちなみにPi3は結構電源食うみたいなので、1.2A程度の電源では起動時に雷マークが出て途中で落ちまくり、3Aの電源を追加購入してあります。


#OSでの作業
ラズパイ側の設定はGitにあるAdafruit_Python_DHTのReadmeの通りでとりあえず動く。

Git cloneで拝借
Readmeにとりあえず動かすまでの手順は書いてあるのでその通りやる。

```
pi@raspberrypi:~ $ git clone https://github.com/adafruit/Adafruit_Python_DHT
```
Python3の場合

```
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install python3-pip
pi@raspberrypi:~ $ sudo python3 -m pip install --upgrade pip setuptools wheel
pi@raspberrypi:~ $ sudo pip3 install Adafruit_DHT
#インストール先は/usr/local/lib/python3.7/dist-packagesに入ります。
```

Gitしたディレクトリに移動してsetup.pyインストール

```
pi@raspberrypi:~ $ cd Adafruit_Python_DHT
pi@raspberrypi:~/Adafruit_Python_DHT $ sudo python3 setup.py install
```

早速exampleディレクトリにあるAdafruitDHT.pyを実行してみる。
22はDHT22を意味していて、4は前述の通りGPIOナンバーで、ピンヘッダーの番号ではないので要注意。

```
pi@raspberrypi:~/Adafruit_Python_DHT $ cd examples
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ python3 AdafruitDHT.py 22 4
Temp=27.7*  Humidity=76.8%
```

出たけど、なんかさみしい。
ずっと出しておきたいので、exampleディレクトリ以下のsimpletest.pyをtemp.pyという名前でコピーして編集

```
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo cp simpletest.py temp.py
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo vi temp.py
```

余計なコメント行を外すと下記な感じになります。
**日付と時間を入れる。**：後で何かに使うかもしれないから。
**Pin番号を変更する。**：GPIOの番号なので今回は４。　他にBeaglebone用の設定項目（PIN=P8_11)もあるけど無視。
**While True:を入れる。**：定番の繰り返し構文
**Ctrl-Cでスマートに止める。**：try/exceptを使用


```
#!/usr/bin/python
import Adafruit_DHT
import datetime
sensor = Adafruit_DHT.DHT22
# connected to GPIO4.
pin = 4
try:
     while True:
        date2 = datetime.datetime.now()
        print(date2)
        humidity, temperature = Adafruit_DHT.read_retry(sensor,pin)

        if humidity is not None and temperature is not None:
            print('Temp={0:0.1f}*C  Humidity={1:0.1f}%'.format(temperature, humidity))
        else:
            print('Failed to get reading. Try again!')
except KeyboardInterrupt:
            print('!!FINISH!!')
```
実行すると、想定通りループ処理してCtrl-Cで止めるまで動き続けます。

```
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ python3 temp.py
2020-07-31 15:03:40.647612
Temp=31.6*C  Humidity=64.9%
2020-07-31 15:03:41.173793
Temp=31.6*C  Humidity=64.9%
2020-07-31 15:03:41.699962
Temp=31.6*C  Humidity=64.9%
2020-07-31 15:03:42.226087
Temp=31.6*C  Humidity=64.9%
2020-07-31 15:03:42.752259
Temp=31.6*C  Humidity=64.8%
2020-07-31 15:03:43.278558
^C!!FINISH!!
```
Ctrl-CでFINISH!!
31度！　暑いよ。　

#teeコマンドでモニタしながらログをためる。
後で何かに使うかもしれないので、モニターしながらファイルに落とす。
teeコマンドで余裕で取れると思ったら意外とハマった。
どうやら-uをつけないとなぜかteeで渡せない。
*-u     : force the stdout and stderr streams to be unbuffered;
         this option has no effect on stdin; also PYTHONUNBUFFERED=x*
なるほど、よくわからん。

```
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ python3 -u temp.py | tee -a temp.log
```


---
何はともあれ、エアコンの無い私のテレワーク部屋が暑いという事が証明されました。
次は、これをオブジェクトストレージにひたすら飛ばす方法を考えよう。

#追記
amazon S3と同期


https://qiita.com/drafts/a5ee27abc7d5d25eff9a/edit