温度・湿度管理システムの作成
技術調査の一環として温度・湿度管理システムの作成を行いました。
本記事では温度・湿度管理システムについて紹介させていただきます。
■概要
温度・湿度管理システムの概要は下記画像の通りです。
温度・湿度センサーを使用し、UDP通信で温度・湿度管理サーバーへ測定された温度データを送信、受信アプリで温度・湿度データをデータベースに登録しています。
管理画面はPyQt5を使用し作成しました。
■受信アプリ
受信アプリはRaspberryPiに配置し、言語はPythonで実装しています。
受信アプリではUDPポート番号、データベースの接続情報を保持しています。
UDP通信のポートを監視し、計測モジュールからの受信があった場合には、受信日時、温度、湿度のデータをデータベースの温度湿度テーブルに登録しています。
■管理画面
管理画面はPyQt5を使用し作成しました。
データベースと接続し、横軸時間、縦軸温度・湿度のグラフを表示しています。
クエリでは当日分の5分ごとの仮想表を作成し、計測値を5分ごとに平均値した結果を外部結合して出力しています。
MariaDBにはgenerate_seriesがないのが不便だなぁと感じました。
あと、PyQtGraphでデータがない場合の対応がわからなかったのでさしあたり、計測結果がないデータを除外して出力しています。
PyQtGraphは手軽にグラフを表示できて便利なのですが、思い通りの表を作成しようとして細かいところを追求していくと時間がかかってしまいました。
■計測モジュール
計測モジュールはESP-WROOM2-02に温度センサー(DHT11)を接続し、温度、湿度を計測しています。
Wi-Fiに接続し、5秒毎に温度、湿度を測定しUDP通信で温度・湿度管理サーバーへ送信します。
計測モジュールは増設可能です。
ESP-WROOM2-32に温度センサーを接続したものも実装してみました。
ESP-WROOM2-32での注意点は供給電力が不足している場合に、Wi-Fi接続に失敗する場合あるようです。
テストではPCのUSBポートに直接ESP-WROOM2-32(D1 R32)を接続していたのですが、どうしても「WiFi.status()」がWL_CONNECTEDにならずしばらく苦戦しました。
電源が供給されているUSBハブに接続を変更したところ接続が成功するようになりました。
Wi-Fiの接続には安定した電源供給が必要みたいです。
■データベース
データベースはMariaDBを使用しています。
開発環境ではDocker上でMariaDBを作成しています。
テーブル内のカラムは以下の通りになっています。
受信アプリで計測モジュールからのデータを受信するたびに1レコード追加されています。
・データ番号
・モジュール番号
・受信日時
・温度
・湿度
■まとめ
初めてPythonを使用してシステムを作成したのですが、かなり難しかったです。
RaspberryPiは自由度が高く、仕事だけでなく趣味でも活用していけそうだと感じたので、個人的にも勉強していきたいと思いました。
ソースはGitHubに上げています。