我が家では夏に捕獲したメダカを庭の水槽で育てています。
アナログの水温計で確認はできるのですが、時間や季節ごとに実測値でどう変化してるのか知りたかったので、 庭にあるメダカ水槽の水温管理したいので、開発することにしました。 前回作ったラズパイ水温系に機能追加しました。
仕様
ざっくりです。この辺の仕様をchatGPTにまず理解させてから、受信側→ラズパイ側→cronという流れで開発していきました。
- cronで毎時0分にwifiネットワーク配下にあるラズパイ水温系で測定
- ラズパイは水温測定したらデータをPCのdocker上にあるwebサーバに送信
- webサーバはラズパイデータ取得したら、天気APIから天気データも取得
- webサーバは水温、日時、天気データをDBに登録
- webサーバはDB登録データをグラフ表示
全体図
こんな感じ これもchatGPTに作らせて5分でできた図です。図を書けというと、マジで意味不明なものを生成するのですが、UMLで書かせるといい感じです。
実装
ソースコードはgithubにあがってるので、そちらを参考にしてもらえればと思います。 流石に全部ブログには貼り切れないかな。
ラズパイ
ラズパイ側のファイル構成
/project-root │ ├── boot.py # デバイス起動時に実行されるスクリプト ├── main.py # メインのエントリーポイント ├── wifi.py # Wi-Fi接続用のコード(モジュール) ├── sensors.py # 温度センサ用のコード(モジュール) ├── http_client.py # WebサーバーへのHTTPリクエスト処理
まず上記ファイルを用意。 一つ一つのファイルを個別実行しながら動作確認すると確実です。
記録システム
記録システムはdocker上にapacheとmysqlを用意。 githubにソースをあげてるので、そちらcloneして構築すればすぐ使えます。 github.com
Ubuntu(WSL2)が起動するとびに時間がずれ&cron止まる問題
cronは下記で毎時0分に実行される。
#ラズパイ水温測定 0 * * * * curl -X POST http://ラズパイのIP/measure_and_send
Windows側ではしっかり現在日時が問題なくコマンドで表示できるが、WSL2でdateコマンドで使ってみると時間が全然ずれてる。。。 同期して時間合わせてもスリープモードとか入るとまた時間がずれるので、どうにかしたい。
一応ググってみたけど、根本的には解決されてないようなので、WSL起動時に時間を同期するのと、cronも毎回スタートさせるのが面倒なので、 ~/.bashrcに下記を追記で起動時に都度時間修正するようにしてcronもrunにさせることにした。
# WSL起動時にcronを開始し、NTPで時間同期する if service cron status | grep -q "not running"; then sudo service cron start fi # NTPで時間を同期する sudo ntpdate -u pool.ntp.org
こういうの参考にした。
WindowsとWSL2の時刻のずれを修正する #Linux - Qiita
あとはスリープモード入らないように常時電源ONにしとくように設定しとけば毎時cronが実行されます。 というか、WSLでやらなくてもWindowsのタスクスケジューラとかでも良さそうですね。 そこは各環境でおまかせで。
実際に水温系を設置
一応保護するために適当(過ぎる)な袋に入れてます。 外なので電池駆動にしてみました。
水槽に水温センサをドボン。
手動で実行してみる。
#ラズパイ水温測定 curl -X POST http://ラズパイのIP/measure_and_send
cronと手動と電池切れが混在してるが一応取得してグラフ表示ができてる。
室内に置いてると気温測定できる。天気情報もとれてる。
今回得た開発のポイント
- chatGPTとの開発で問題なくできる
感覚としてchatGPT8割、ググり2割といったとこでした。普段pythonとか書いてないから分かんないけどできた。
- cronマシンは常時可動させる
それこそ専属で常時可動用に普通のラズパイとか用意してサーバ立てておいてもいいかもと思った。
- 電池駆動はなんとなく安定しない
感覚でしかないけど、やっぱUSBからの電源供給の方が安定してる。ニッケル充電池で外で動かすと半日程度しかもたなかった。。。うちだけ??
メダカたち
なんと! 水槽のメダカたちは開発してる間に全滅してしまいました。。。。。。
今は掃除用に導入されてた、ミナミヌマエビとヒメタニシ水槽となってます。
メダカはまた温かくなったら捕獲してみようと思います。
目指せ越冬!!!!
下記クリックしていただけると励みになります!