###背景###
最近家のベランダでスイカとレモンを田植えています。在宅勤務で毎日の朝一水やりをするのはやや面倒だと思います。また、連続の外出日には水やりを止めることになりますので、リモートで水やりをできるIoT仕組みを作ったらどうと思い始めました。
###準備するもの###
- ラズベリーパイ3 x 1
- Arduino ELEGOO UNO R3 x 1
- Arduino USB コード x 1
- 湿度センサー x 1
- ブレイブボード x 2
- マイクロウォーターポンプ x1
- ポケットバテッリー
- 単3形乾電池 x 4
- プラスチックケース x 2
- ボウル x 1
- ゴムパイプ x 1
- 5v リレー x 1
- ジャンパワイヤ オス-オス 複数
- ジャンパワイヤ オスーメス 複数
ブレイブボード2枚を用意したのは、ワニクリップはないからです。またメスーメスのジャンパワイヤがあれば、配線はもっとシンプル化にできます。
###ハードウェア###
※図にある湿度センサーは土に挿入する状態になります。
####ロジック####
ポケットバッテリーからラズベリーパイに電源を供給します
単3電池からマイクロウォーターポンプに電源を供給します
リレーのOPEN,CLOSEから、マイクロウォーターポンプのON,OFFをコントロールしています。
ラズベリーパイのGPIO 21からリレーのOPEN CLOSEをコントロースしています。
Arduinoは湿度センサーから土の湿度を図ます
ArduinoはUSBを経由でラズベリーパイに湿度情報を送信します
###ソフトウェア###
####ロジック####
#####インフラ側ロジック#####
ラズベリーパイ側はngrokを利用し、イントラネットの浸透がおこなっています
#####サーバーロジック#####
ラズベリーパイはサーバー側として動作します
ラズベリーパイ側はflaskを利用し、GPIO 21をコントロールするapiを提供します
ラズベリーパイ側はgrpc サーバーストリングを利用し、クライアント側に湿度を送信します
#####クライアント側ロジック#####
flutterを利用して、iosアプリを開発します
####サンプルコード####
#####ngrok#####
ngrokでイントラネットの浸透をします
# flaskサーバーのポートは5000になっています
./ngrok http 5000
# 湿度grpcサーバー側のポートは5000になっています
./ngrok tcp -region jp 50051
#####ラズベリーパイ#####
#####Arduino#####
arduino
#####Flutter#####
iot_project_app
###課題###
-
電源長時間供給
ポケットバッテーリーは数時間しか続けられないため、業務化にするためにわ、バッテーリーだけではなく、一般的な家庭用電源につながる必要があります。現在では、家のスイカはベランダーに置いてあるため、家の電源とどうやって繋がっていくことをあらかじめ考えることが必要です。 -
複数植物対応
いまは一つのボルトから一つの植物に水やりしか対応できないため、一つのボルトから複数の植物に水やりできるように改善する必要があります。 -
安全なスレッド対策
いまは、GPIOを管理するスイッチ変数はメモリに保存されています、もし同時複数のクライアントからリクエストが来たら、メモリに保存されてあるスイッチ変数は同時に変更されてしまいますので、あらかじめスレッドロックをかけるようにしなければなりません。
###感想###
中国のIT業界では最近「内巻」ということばは流行っておりまして、それは一つの分野に対して、参戦する人は多くなって、しかも皆技術のボルトネックからさらに伸ばさないため、みんなさん知恵で勝負するより、時間と体力で勝負することにしています。