各種センサー類をラズパイに接続してIoT化を目指しているシリーズの一つ、ラズベリーパイで温湿度を計るPythonのプログラムを作った時の備忘録。Things)では無いがラズパイであればインターネットへは簡単に接続できる。Coreへ値をアップロード(Publish)する記事を以前に書いているのでインターネットに接続する際には参考にして欲しい。B+でDHT11を試した。今回はDHT11より高性能のDHT22を試したのでその時の事を備忘録として記事にしておく。DHT22モジュール温湿度センサー(DHT22)のスペックは下記の通り。上記の写真でも分かるがDHT22の温湿度を測定する部品(上記の白い部分)の部品番号はAM2302と表示されている。DHT22で検索しても資料があまり出てこないのでAM2302で検索した方がより多くの情報がヒットする。データシートはこちらを参考にした。Connect(接続しない)と思われ実際モジュールからはコネクタは3つしか出ていない。data)はセンサーデータの読み込み、書き込み(I/O)の為のピンでRaspberryPiのGPIOに接続する購入についてアマゾンで899円で購入した(2019年8月)DHT11が3個で639円だったので値段は約4倍の価格だリンクdht22の制御についてDHT22(AM2302)の温度と湿度は40bitのLow(0)とHigh(1)で値を返すのでエラーチェックを行った後に温湿度へと変換をする必要がある。このプログラミングはちょっと大変なのでDHT11と同様に誰かがPythonのモジュールをアップしてくれていないかを検索したのだがどうも見当たらない(検索の仕方が悪いのかも)githubにDHT11、DHT22兼用のライブラリーを見つけたのだがソースがCだったので自分で色々といじる事が出来ないので(技術的にCの知識が不足しているので)見送った。仕方が無いのでszaro氏がライブラリー化してGithubに載せてくれているDHT11向けのモジュールdht11.pyをデータシートを見ながらDHT22用に改造することにした。変更内容データシートを眺めた所、戻り値が40ビットの所やパリティチェックのやり方など大きな違いは見当たらなかった。signalの秒数がDHT11のデータシートでは18ミリ秒(最大30ミリ秒以下)となっているがAM2303では0.8ミリ秒~20ミリ秒になっている戻り値の先頭の32ビットの温湿度の計算方法が違うぐらいに思えたので、上記のgithubのdht11.pyをコピーしてdht22.pyにリネームして保存した後、以下の部分を変更した。signalでLOWをAM2303に送信する時間を0.8ミリ秒に変更した。0.0008)温度、湿度の計算方法の変更75行目以降の温度、湿度の計算方法をAM2302のデータシートの5ページ目の計算例を参考にして変更した。湿度を例にとるとDHT11では最初の8ビットと次の8ビットを足して10進数に変換しているがDHT22では最初の8ビットを256倍した後(左に8ビットシフトしても良いと思う)、次の8ビットに加算した後で全体を10で割っている。10で割るのは小数点以下の数字を表すため。10もし間違いがあれば指摘して貰えるとありがたいです。改造は当然だが自己責任の上で行った。ディレクトリ構造ディレクトリ構造は以下の通り。プログラムと同じディレクトリ配下DHT22_Pythonディレクトリを作成してdht22.pyファイルを格納した。B+との接続は以下の通り。プログラムテスト用プログラムは以下の通り。KeyboardInterrupt:passGPIO.cleanup()実行結果プログラムの実行結果は以下の通り。10秒間隔で温湿度を取得してprintしているが温湿度共に0.1の単位まで表示している事が分かる。同じような事をやりたい人の参考になればと思ってブログにしてます。Services)、WordPress、RaspberryPiに関するブログを書いています。GENERALに合格しています。分かりやすい様に書いているつもりですが質問があればメニューの「ご質問がある方」か記事一番下にあるコメントにお願いします。役に立ったのであればコメントもらえると嬉しいです。間違いがあればご指摘いただけるとありがたいです。コメントをキャンセルメールアドレスが公開されることはありません。