#概要
- 時計付きの玄関センサーです。玄関を人が通過するとSlackに通知します。
- 24時間に1回再起動し、時刻同期を行います。Wifiが切断されている場合も再接続します。
- ESP32から直接Slackに投稿することが少し難しい(https通信のため)ので、今回は自宅サーバとして使用していたRaspberryPI経由でSlackに投稿しました。ESP32からRaspberryPIにはUDPで通知します。
#部品
- ESP32-DevKitC-32D
- HC-SR04超音波距離センサー
- 0.96" IIC OLED
- LED
- 330Ω抵抗
#配線
HC-SR04 | ESP32 |
---|---|
VCC | 5V |
Trig | 12 |
Echo | 14 |
GND | GND |
OLED | ESP32 |
---|---|
VCC | 3.3V |
GND | GND |
SCK | 22 |
SDA | 21 |
- LEDは19ピンに接続します(抵抗は330Ω)
#ソースコード
[https://github.com/type89/ESP32_GateKeeper_public]https://github.com/type89/ESP32_GateKeeper_public)
※slack_sdk形式に修正しました(2022/1/8)
- 「ESP32_new_gatekeeper.ino」:ESP32に書き込みます。
- 「ent_monitor.service」:RaspberryPIの「/etc/systemd/system」に置きます。
- 「udp_rev_to_slack.py」:「ent_monitor.service」で指定したパスに置きます。
- OLED画面の表示が変わり、LEDが点灯します。
#工夫したポイント
- 0.1秒ごとに距離を検出し、90cm以下(壁との距離は1m)の場合に通過の判定にしました。誤検知の対策として、3回連続で20cm以下の場合に通知するロジックとしました。
- 1回検知した後に30秒待機時間を設けることで、Slackに必要以上に通知しないようにしました。待機中は本体のLEDが点灯します。
- センサーの前を走り抜けると、距離が大きく測定され、検知しないことがありました。測定結果が1.2m以上の場合は検知対象にすることで、正常に検知できるようになりました。
- 試作品を運用してみると、2〜3日でWifi接続が切れてしまい、通知できなくなることがわかりました。そこでntpで時刻取得し、指定した時刻に再起動するようにしました。また、玄関に時計がある方が便利なので、OLEDモジュールで時刻表示もしてみました。
- 検知した場合は画面表示が切り替わります。そのままだと時間がわからない(特に朝は待てない)ので、検知画面は1秒だけ表示し、時刻表示に戻しています。
- RaspberryPIはsytemctlでサービスを動かしています。サービスが停止しても復旧するように、「always」を指定しました。
#参考にしたサイト