ESP32 水泄漏检测器(带通知)
使用 ESP32 的电容触摸 GPIO,使用 ESPHome 构建水泄漏检测器相对容易。 M5StickC 被选为平台,因为它集成了 Grove 连接器,便于连接,并且包装良好。内置显示屏是一个加分项,但并非必需。 通知通过 HomeAssistant 的 ‘alert’ 和 ’notify’ 功能执行,通过 Pushover 发送到 iOS & Android。
需要的物品
M5Stick axp192 自定义组件 这是为了给显示屏供电。您不需要 st7735 显示驱动器,因为它已经包含在 ESPHome >1.16.0 中。
M5StickC ESP32 开发套件 M5Stack Link

- 湿度传感器 本例中使用 Guardian 远程传感器探头,它带有 6 英尺的线。

- Grove 连接器拖尾线 亚马逊链接

- USB 电源和 USB-C 线 (M5StickC 配有图片中看到的短黑色 USB 线)
探头连接
由于探头带有集成的 3.5mm 公头,Grove 端口连接了一个 3.5mm 母座,以便将来轻松更换探头。橙色连接到橙色,蓝色连接到蓝色。探头另一侧的触点与前端内部连接相同。3.5mm 母座的两个中间环未使用。没有极性——只需将一个端子(橙色或蓝色)连接到 Grove GND,另一个连接到 Grove G33。


组装组件

ℹ️ Note
尽管 M5StickC 内置了电池(可能足以覆盖短时间的停电),但您需要 24/7 连接 USB 电源。
显示字体
您需要将 OpenSans-Regular 字体(或您选择的任何其他字体)与您的 ESPHome yaml 文件一起放置。参见 - Display Component。
校准和测试
一旦所有连接和烧录完成,启用 esp32_touch:
setup_mode: true
并继续调整触摸敏感二进制传感器的阈值设置(GPIO33),以找到适合您的湿度传感器和布线情况的适当值。拿一杯水进行测试,另一杯给自己,边测试边查看日志。
您的目标是找到一个阈值值,该值足以在水中触发二进制传感器,但在其他情况下不触发。ESP32 触摸板 了解更多信息。
正常状态

湿状态

安装项目

未显示:探头放置在房间的角落,不碍事,在房间的最低处
ESPHome 配置
substitutions:
devicename: basement_leak_detector
friendly_name: Basement Leak Detector
device_description: 地下室工具房中的泄漏检测器
esphome:
name: $devicename
comment: ${device_description}
esp32:
board: m5stick-c
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# 在 Wi-Fi 连接失败时启用回退热点(捕获门户)
ap:
password: !secret fallback_ap_password
captive_portal:
logger:
# 启用 Home Assistant API & OTA 更新
api:
ota:
platform: esphome
status_led:
pin:
number: GPIO10
inverted: true
spi:
clk_pin: GPIO13
mosi_pin: GPIO15
i2c:
- id: bus_a
sda: GPIO21
scl: GPIO22
scan: true
esp32_touch:
#setup_mode: true
iir_filter: 10ms
binary_sensor:
- platform: gpio
pin:
number: GPIO37
inverted: true
id: button_a
on_press:
then:
- switch.toggle: led1
- platform: gpio
pin:
number: GPIO39
inverted: true
id: button_b
on_press:
then:
- switch.toggle: led1
- platform: status
name: "${friendly_name} Status"
- platform: esp32_touch
name: "${friendly_name} Sensor"
device_class: moisture
id: leak
pin: GPIO33
threshold: 30
on_press:
- while:
condition:
binary_sensor.is_on: leak
then:
- switch.turn_on: led1
- delay: 200ms
- switch.turn_off: led1
- delay: 100ms
- switch.turn_on: led1
- delay: 200ms
- switch.turn_off: led1
- delay: 400ms
on_release:
then:
- switch.turn_off: led1
sensor:
- platform: uptime
name: "${friendly_name} Uptime"
# AXP192 电源管理 - 必须存在以在 ESPHome >1.16.0 上初始化 TFT 电源
- platform: axp192
address: 0x34
i2c_id: bus_a
update_interval: 30s
battery_level:
name: "${friendly_name} Battery Level"
id: "m5stick_batterylevel"
- platform: wifi_signal
name: "${friendly_name} Wi-Fi Signal"
update_interval: 60s
text_sensor:
- platform: version
name: "${friendly_name} ESPHome 版本"
switch:
- platform: gpio
pin:
number: GPIO10
inverted: true
id: led1
font:
- file: 'OpenSans-Regular.ttf'
id: font1
size: 66
color:
- id: color_wet
red: 100%
green: 0%
blue: 0%
- id: color_dry
red: 0%
green: 100%
blue: 0%
# 内置 80x160 TFT
display:
- platform: st7735
model: "INITR_MINI160X80"
device_height: 160
device_width: 82
col_start: 0
row_start: 0
eight_bit_color: false
cs_pin: GPIO5
dc_pin: GPIO23
reset_pin: GPIO18
invert_colors: true
use_bgr: true
lambda: |-
if (id(leak).state) {
it.fill(COLOR_OFF);
it.print(42, -24, id(font1), id(color_wet), TextAlign::TOP_CENTER, "W");
it.print(42, 32, id(font1), id(color_wet), TextAlign::TOP_CENTER, "E");
it.print(42, 85, id(font1), id(color_wet), TextAlign::TOP_CENTER, "T");
} else {
it.fill(COLOR_OFF);
it.print(42, -24, id(font1), id(color_dry), TextAlign::TOP_CENTER, "D");
it.print(42, 32, id(font1), id(color_dry), TextAlign::TOP_CENTER, "R");
it.print(42, 85, id(font1), id(color_dry), TextAlign::TOP_CENTER, "Y");
}
HomeAssistant 配置
有两个部分:一个是警报标准,另一个是通过 Pushover 进行通知。 更多详情请参阅 HomeAssistant 的 Pushover 集成文档。
alert:
basement_water_leak:
name: 地下室检测到水
entity_id: binary_sensor.basement_leak_detector_sensor
state: 'on'
repeat: 30
can_acknowledge: true
notifiers:
- water_leak_notification_group
notify:
- name: pushover
platform: pushover
api_key: !secret pushover_api_key
user_key: !secret pushover_user_key
- name: water_leak_notification_group
platform: group
services:
- service: pushover
data:
data:
# Pushover 提供的声音效果(https://pushover.net/api#sounds)
sound: alien
享受您的本地控制泄漏检测器和推送通知!
