ESP32 水泄漏检测器(带通知)
使用 ESP32 的电容触摸 GPIO,使用 ESPHome 构建水泄漏检测器相对容易。 选择 M5StickC 作为平台是因为其集成的 Grove 连接器可以实现整洁的连接,而且它有良好的外壳。内置显示屏是一个加分项,但并非必需。通知通过 HomeAssistant 的”alert”和”notify”功能执行,通过 Pushover 发送到 iOS 和 Android。
您需要的东西
Section titled “您需要的东西”-
M5Stick axp192 自定义组件 这是为显示屏供电所需的。您不需要 st7735 显示驱动程序,因为它已包含在 ESPHome >1.16.0 中。
-
M5StickC ESP32 开发套件 M5Stack 链接
- 湿度传感器 本示例使用 Guardian Remote Sensor Probe,带有 6 英尺线缆。
- Grove 连接器转接线 Amazon 链接
- USB 电源适配器和 USB-C 线缆 (M5StickC 附带图片中看到的短黑色 USB 线缆)
由于探针带有集成的 3.5mm 公头插头,已将 3.5mm 母头插孔连接到 Grove 端口,以便将来轻松更换探针。橙色连接橙色,蓝色连接蓝色。探针背面的焊盘与正面内部连接相同。3.5mm 插孔上的两个中间环未使用。没有极性——只需将一个端子(橙色或蓝色)连接到 Grove GND,另一个连接到 Grove G33。
组装好的组件
Section titled “组装好的组件”
NOTE
尽管 M5StickC 内部有电池(可能足以应对短暂停电),您仍需要让设备 24/7 连接 USB 电源。
您需要将 OpenSans-Regular 字体(或您选择的其他字体)放在 ESPHome yaml 文件旁边。参见 - 显示屏。
一切连接好并刷入后,启用 esp32_touch: setup_mode: true 并继续调整触摸敏感二进制传感器(GPIO33)上的阈值设置,以找到适合您特定湿度传感器和布线情况的正确值。准备一杯水用于测试,另一杯给自己,一边观察日志一边测试。您的目标是找到一个足以在水中触发二进制传感器但不会在其他情况下触发的阈值。有关更多信息,请参阅 ESP32 触摸板。
已安装的项目
Section titled “已安装的项目”
未显示:探针放置在角落地板上,不挡路,位于房间最低处
ESPHome 配置
Section titled “ESPHome 配置”substitutions: devicename: basement_leak_detector friendly_name: 地下室泄漏检测器 device_description: 地下室设备间的泄漏检测器
esphome: name: $devicename comment: ${device_description}
esp32: board: m5stick-c
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
# 在 wifi 连接失败时启用回退热点(captive portal) 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} 状态" - platform: esp32_touch name: "${friendly_name} 传感器" 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} 运行时间"
# AXP192 电源管理 - 必须存在以初始化 TFT 电源 - platform: axp192 address: 0x34 i2c_id: bus_a update_interval: 30s battery_level: name: "${friendly_name} 电池电量" id: "m5stick_batterylevel"
- platform: wifi_signal name: "${friendly_name} WiFi 信号" 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 TFTdisplay: - 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 配置
Section titled “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享受您本地控制的带推送通知的泄漏检测器!