LoginSignup
5
2

More than 1 year has passed since last update.

時計付き玄関センサーでSlackに通知(ESP32+RaspberryPI)

Last updated at Posted at 2020-05-10

概要

  • 時計付きの玄関センサーです。玄関を人が通過するとSlackに通知します。
  • 24時間に1回再起動し、時刻同期を行います。Wifiが切断されている場合も再接続します。
  • ESP32から直接Slackに投稿することが少し難しい(https通信のため)ので、今回は自宅サーバとして使用していたRaspberryPI経由でSlackに投稿しました。ESP32からRaspberryPIにはUDPで通知します。

全体構成

部品

配線

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」を指定しました。

参考にしたサイト

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2