ラズパイ3 Model B+、DHT22で部屋の温湿度測れるようにしてみた


背景

  • ラズパイを4年も前に買ったにもかかわらず、しまいっぱなしでろくに使っていなかった
  • なんだか部屋が暑い気がするが温度計がなく実際何℃のなのか知りたかった (温度計ぐらい買いなさい)
  • 将来的にSNS(ラインやTwitter)と連携できるようにして、API・Botのノウハウをためたい

ゴール

  • ラズパイ3 Model B+、DHT22で温湿度データを取得できるようになる

対象

  • ラズパイ初心者
  • 家に温度計がない方
  • 自分(備忘のため)

前提

  • 物理的な環境が整っていること (ラズパイ・センサの購入、キーボード・マウス・ディスプレイ等がある、ネット環境がある)
  • ラズパイの基本的な設定は完了していること(OSインストールなど)
  • Linuxの簡単なコマンド操作が可能であること

環境

  • ラズパイ:Raspberry Pi 3 Model B+
  • センサ:DHT22
  • ジャンパーワイヤは上記センサを購入した際ついてきてました(ブレッドボードなしでできるのすごいですね…!)
  • キーボード、マウス、給電用MicroUSB-TypeBケーブル・電源アダプタ、HDMIケーブルは市販のもの

手順

基本的には以下の記事を参考にさせていただきました。(ありがとうございました。)

0. DHT22をラズパイに接続

以下で接続しました。
VCC:1ピン(3.3V)
DAT:7ピン(GPIO4)
GND:6ピン(GND)

1. Pythonライブラリのインストール

$ sudo apt-get update # インストールできるパッケージの一覧を最新化
$ sudo apt-get install build-essential python-dev # pythonパッケージ類インストール

2. Adafruitのライブラリインストール

$ sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo python setup.py install # モジュールをビルドしてインストールを開始します

【余談】
Adafruitという企業があるのですね、恥ずかしながら知らなかったです。。
この企業が公開してるDHT用のライブラリを落とす、ということですね。

ちなみに、ほかのDHTライブラリを使うパターンもあるようです。

3. 動作確認用のプログラムを書く

作業ディレクトリは~/Adafruit_Python_DHT/examplesです。

example.py
#!/usr/bin/python3
# coding: utf-8
import Adafruit_DHT as DHT

# センサータイプを選ぶ
SENSOR_TYPE = DHT.DHT22

# 今回はGPIO04を使う
DHT_GPIO = 4

# DHT22のデータを取得
h,t = DHT.read_retry(SENSOR_TYPE, DHT_GPIO)

# データ形式を整えて出力
message_temp = "Temp= {0:0.1f} deg C".format(t)
message_humidity = "Humidity= {0:0.1f} %".format(h)
message = message_temp +". " + message_humidity
print (message)

4. 実行

$ python3 example.py

5. エラー

なんだかよくわかりませんが、15行目が原因でエラーが出ているようです。
formatメソッドを使い書式設定({}内に小数点以下第1位までで、取得した値を代入するよう設定)しているが、
サポートしていないもの値が渡されている、というイメージでしょうか。。
(勉強不足で、違ったらご教授いただけると幸いです。)

6. 再トライ

値がサポートしていないもの=ピンからの入力が不適切=ピンの配線が正しくない?
と思ってラズパイ側を見ると、やはり配線が適切でなかったので修正したらうまくいきました。
(手順0. DHT22をラズパイに接続で正しくやったつもりが間違っていました)
(過去DHT11も触っていた都合で、DHT22もVCC・DAT・GNDのピンの順番が同じかと思ってノールックで配線していたのですが、違っていました、油断した。。)

無事温度と湿度が表示されました!(やった~)

Temp= 31.7 deg C. Humidity= 40.4 %

そろそろ秋が来たかと思っていたのですが、やっぱりまだ暑いですね。。
ちなみに湿度がどれぐらいが適切かわからなかったのでちょっと調べたら、
40度はぎりぎりセーフ(?)でした。

7. ちなみに

わざわざ自分でプログラムを書かなくても、Adafruit_Python_DHT/examples配下にある、
Adafruit.pyを実行すれば簡単にお試しできました()

$ python3 Adafruit.py 22 4 # DHTのセンサータイプ(22)と、GPIOピン番号(今回は4)を指定する必要がある

表示はこんな感じでした。

Temp=31.7*  Humidity=40.4%

学び

  • やっぱり初めてトライすることは接続一つ、ライブラリのインストール一つとっても新鮮で勉強になりました。
  • 実はこの記事を書く前に、OSOYOOさんのキットに付属のDHT11で試行錯誤しましたが、
    まったくうまくいかず、切り分けのためにDHT11を買い直すも同じ症状でげんなりしていました。
    DHT11が悪いというより自分のやり方に問題があったのかと思いますが、 DHT22だとすんなりいったのでよかったです。
    やっぱりソフトもハードも常によくなっていっているので、より新しいものを使うに越したことはないですね (知らんけど)

今後

  • 冒頭で記載した通り、LINEかTwitterでBot作成してみたいと思います。

  • DHT11のうまくいかなかった事象の切り分けをもっとしてもよかったですが、
    あまりにも時間がかかりすぎたので、またいつかモチベーションが戻ればやってみようと思います。
    (プログラムの中身も複数パターン試したり、電源、抵抗、ピンの箇所、ライブラリ、pythonバージョン、セキュリティ設定etcいろいろ試ししたのですが、、まだまだですね。。)

参考

  • 今回(DHT22)参考にさせていただいたURL

  • 今回に至るまでのDHT11関連で参考にさせていただいたURL