ぽんこつプログラマーの日々のまとめ
RPi-Logo-Reg-SCREEN
第3回目は温湿度センサー DHT11 を接続し、温度と湿度を取得する。水温センサーあるならいらんやろって気もするが、室温が高ければ水温が上昇する前にクーラー付けるとか出来るかもと思い取り付けた。そうですただの自己満足です。
過去の記事は以下からどうぞ
・第1回 Raspberry Pi 初期設定
・第2回 温度センサー DS18B20

用意したもの

  • Raspberry Pi 3 Model B x1
  • ブレッドボード
  • ジャンパーワイヤー x6
  • 4.7k抵抗
  • DHT11 x1
※DHT11は温度、湿度共に整数でしか取得出来ない。少数まで取得したい場合はDHT22等の上位版を使おう。

配線

今回もデータシートとにらめっこしてみたが、全然わからんのでGoogle先生にお願いして下記の配線に落ち着いた。
dht11
今回購入したDHT11は3本足だったがFritzingのパーツに4本足しか無かったのでそのまま使用。4本足でも右から2番目は使用しない足なので、上記の配線で問題ないと思われる。前回のDS18S20とほぼ同じ接続方法で、3.3vから電源を取りGND接続し、電源から4.7k抵抗を噛ませセンサー線をGPIO17(Pin:11)に接続した。他の記事で5v電源でないと精度が出ないとあったため、3個のDHT11とDS18S20の温度と比較してみたが、3.3vでも精度に問題なかった。寧ろ5vに接続すると温度が平均+1℃されていたので、3.3vで運用することにした。
3本足になったことで中身もアップグレードしてるのかな。

Pythonスクリプトをかく

DHT11は1-Wireに対応していないため、自前で値を取得する必要がある。と言ってもGitHubにPythonライブラリがありそちらを利用すれば簡単に取得可能なのでダウンロードしておく。
DHT11 Python library
dht11_exsample.pyを見れば使用方法がわかるので目を通しておこう。

今回は温度、湿度を別々に取得するため、2つのPythonファイルを作成した。
・temp.py
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import dht11
import time
GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) dt = dht11.DHT11(pin=17) c = 0 val = 0 while c < 1000: res = dt.read() if res.is_valid(): val = res.temperature break time.sleep(0.01) c += 1 GPIO.cleanup() print(val)
・humid.py
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-

import RPi.GPIO as GPIO import dht11 import time
GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM)
dt = dht11.DHT11(pin=17) c = 0 val = 0 while c < 1000: res = dt.read() if res.is_valid(): val = res.humidity break time.sleep(0.01) c += 1 GPIO.cleanup() print(val)
2ファイルの違いは val = res.temperature だけでありプログラムの風上にも置けない代物。最初はコマンドライン引数でオプションを渡していたが、なんやかんや実験/書き直しを繰り返す際に面倒な気持ちになったのでそれぞれ用意した。
whileで回しているのは、高頻度(1/5ぐらいの確率)で値が取得出来ないケースがあるため。誰か原因分かる人いたら教えてくださいplz.
あとは下記コマンドで取得できればOK。
python temp.py
21
python humid.py
53
※import RPi.GPIO あたりでエラーを吐く場合は、ライブラリが入っていないので
pip install rpi.gpio
上記コマンドでライブラリをダウンロードしよう。
pipコマンドが見つからない場合は
sudo apt-get install python-dev
sudo apt-get install python-pip
でインストールしてどうぞ。

Add Comments

名前
 
  絵文字
 
 
webmaster

Redmusk

最西端の地で釣りとギターとゲームをこよなく愛する本業ぽんこつプログラマー。今を生きるを座右の銘とし日々快楽だけを求め切磋琢磨しております。

soundcloud