Raspberry Pi で温湿度測定

ラズベリーパイ

Raspberry Pi で DHT22というセンサーモジュールを使用して温湿度取得を試してみました。

途中、エラーが発生したりして苦戦したのでやり方をまとめておきます。

1.温湿度センサーモジュールの購入

今回はDHT22という温湿度センサーモジュールを使うことにし

Amazonで基盤が付いているタイプを購入しました。

(基盤なしのタイプはプルアップ抵抗またはプルダウン抵抗が

必要っぽい)

2.ラズパイとセンサーの接続

ラズパイとセンサーの接続は以下のようにしました。

実際に接続した様子がこちら

3.Pythonプログラムのインストール

$ sudo apt-get update
$ sudo apt-get install build-essential python-dev

4.DHTライブラリのインストール

$ sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo python setup.py install

5.プログラム作成

# coding: utf-8

import MyPyDHT
import time
while True:
    # センサー制御取得----------------------------------------------------
    #4は、接続したGPIOポート
    humidity, temperature = MyPyDHT.sensor_read(MyPyDHT.Sensor.DHT22, 4)   
    #------------------------------------------------------------------
 
    #結果の表示
    print("温度=" + str(temperature) + "*C, 湿度 = " + str(humidity) + "%")    
    time.sleep(2)#2秒毎に取得

実行結果

>>> %Run onsitudo.py  
  温度=27.3*C, 湿度 = 59.8%
  温度=27.4*C, 湿度 = 59.6%
  Traceback (most recent call last):
    File "/home/pi/デスクトップ/onsitudo.py", line 9, in <module> 
      humidity, temperature = MyPyDHT. Sensor_read(MyPyDHT.Sensor.DHT22,4)
    File "/usr/local/lib/python3.5/dist-pacages/MyPyDHT/_init_.py", line 52, in sensor_read
      raise DHTException(error_mess)
  MyPyDHT.DHTException: A timeout occurred while attempting to read the sensor!

プログラムを実行した結果、1~2回温湿度が読み込まれた後

謎のエラーが出てプログラムが止まる現象に悩まされました。

調べてみるとモジュール側がセンサーの値を出力できるサイクルがあって

そのタイミングが外れるとタイムアウトエラーで止まるっぽい・・・。

という訳で以下の様にコードを書き直しました。

# coding: utf-8

import MyPyDHT
import time
while True:
    x=0#値の取得判定の変数初期化
    while x < 1:#値が取得できるまで(x=1となるまで繰り返す)
        
        try:
            #センサー制御取得----------------------------------------------------
            #4は、接続したGPIOポート
            humidity, temperature = MyPyDHT.sensor_read(MyPyDHT.Sensor.DHT22, 4)   
            #------------------------------------------------------------------
            
            x=1#値が取得できた時はx=1とする
            
        except:#値の取得ができなかった時の処理
            x=0#値が取得できたときはx=0とする
    #結果の表示
    print("温度=" + str(temperature) + "*C, 湿度 = " + str(humidity) + "%")    
    time.sleep(2)#2秒毎に取得

try~except と whileを使い値を取得できるまで値の取得処理を繰り返すようにしました。

実行結果はこちら

>>> %Run onsitudo.py  
  温度=27.2*C, 湿度 = 59.8%
  温度=27.1*C, 湿度 = 59.8%
  温度=27.1*C, 湿度 = 59.8%
  温度=27.3*C, 湿度 = 59.6%
  温度=27.2*C, 湿度 = 59.8%
  温度=27.2*C, 湿度 = 59.6%

うまく値を取得できるようになりました。

次は取得した値をcsvで保存したり、グラフ表示できるようにしていきたいと思います。

コメント

タイトルとURLをコピーしました