温湿度センサーをラズベリーパイに接続してIoT化を目指しているのだが一定間隔で温湿度を計るPythonのプログラムを作った時の備忘録。Things)では無いが、ラズパイであれば容易にインターネットに接続が可能である。IoTに接続して値をアップロード(Publish)する記事も書いているのでインターネットに接続するのであれば参考にして欲しい。使用した温湿度のモジュールはDHT11とDHT22の2種類。B+の2種類を試した。今回はDHT11の記事とする。DHT11モジュールDHT11について温湿度センサー(DHT11)のスペックは下記の通り。データシートはこちらを参照した。小数点以下の湿度を測定したい場合はDHT22にする必要があるがそれは別記事とする。Connect(接続しない)と思われ実際モジュールからはコネクタは3つしか出ていない。前述の裏面の画像をみても接続されている様子が無い購入についてアマゾンで3個で639円で購入した(2019年8月)リンクdht11.pyのインストール事前にdht11関連のモジュールをダンロードする。データシートによると温度と湿度は40bitのLow(0)とHigh(1)で値を返すのだが、このビットのエラーチェックを行い温湿度への変換を1からプログラミングするのは正直ちょっと骨が折れる。ネットで検索してみるとszazo氏がライブラリー化してGithubに載せてくれているのでありがたく使わせてもらうことにした。https://github.com/szazo/DHT11_Python.gitDHT11_Pythonディレクトリが作成されて配下に以下のファイルがインストール(コピー)される。dht11_example.pydht11.pyが今回使用するモジュール。ちなみに、LICENSE.md:MITライセンス(オープンソースのライセンス)である事が書いてあるREADME.md:ReadMe、RaspberryPiで使用可能な事が書いてある__init__.py:dht11.pyをimportした時に実行される(空だった)dht11_example.py:dht11.pyの使用例(サンプルプログラム)となっていた。dht11.pyの詳しい内容については別記事とする。Zero(B+も同様)との接続は以下の通り。Zeroに接続した時のテスト用プログラム。KeyboardInterrupt:passGPIO.cleanup()実行結果プログラムの実行結果は以下の通り。10秒間隔で温湿度を取得してprintしている。概ね、問題なく表示されているのだが表示間隔が10秒以上空いていたりすることが散見されたのでもう少し詳しく原因を調べてみることにした。(それについては後述)プログラムの説明その前にプログラムの大まかな説明。INTERVAL(10秒)間隔で温湿度を取得&表示している。instance.read()で温湿度を取得して失敗したらRETRY_TIME(2秒)間隔を空けて最大MAX_RETRY(20回)再取得を試みる。MAX_RETRYを超えて失敗した場合に温度、湿度に99.9を返している。継続して動かし続けていると10回~20回に1回程度だが99.9を返すことが分かった。エラーになる原因プログラムを見直したりネットを検索してみたのだがどうにも良く分からない。B+の方で動かしてみたところ、MAX_RETRYを超えて失敗する事はほぼ無い。bit(データの整合性をチェックするためのビット)なのだがパリティチェックでエラーになっているケースがZeroの方で圧倒的に多い事が判明した。B+でもエラーは発生しているが頻度が少ないのでMAX_RETRY(20回)まで達しない下記はdht11.pyにprint文を入れてエラーを表示した結果。errorは40ビット返って来たのだが先頭から32ビットと残りの8ビットでパリティチェックでのエラー。エラーがない時は温度、湿度が表示されている。ZeroでCLI起動に切り替えて同じプログラムを動かしてみる。心なしエラー頻度が少ない気がしないでも無いが誤差の範囲かも知れない。DHT11は3個購入したので他の個体でも試したが結果は似たりよったりだった。ZeroでDHT11を使用する時はエラーが起きる前提でリトライ回数を増やして温湿度を取得するのが良い様に思った。signalとして「LOWを少なくとも18ミリ秒(最大30ミリ秒以下)センサーに通知する」とある。B+では0.02のままで問題が無い事を追記しておく。同じような事をやりたい人の参考になればと思ってブログにしてます。Services)、WordPress、RaspberryPiに関するブログを書いています。GENERALに合格しています。分かりやすい様に書いているつもりですが質問があればメニューの「ご質問がある方」か記事一番下にあるコメントにお願いします。役に立ったのであればコメントもらえると嬉しいです。間違いがあればご指摘いただけるとありがたいです。コメントをキャンセルメールアドレスが公開されることはありません。