Help us understand the problem. What is going on with this article?

温度センサー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は4番です! ラズパイの仕様なのでしょうがない。
ケーブルは、どの色がどこでも問題ないですが昔の覚え方だと、五月みどり、岸恵子、青二才のろくでなし、なので青は6番へ。
写真はRICOH GR3で無駄に接写
DHT22_1.jpg
DHT22_2.jpg
DHT22_3.jpg

ちなみに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の番号なので今回は4。 他に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

Taroi_Japanista
Hardwareエンジニアの備忘Log
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away