Самодельная система уведомлений о протечке на ESP32: схема, прошивка, Telegram‑оповещения

Самодельная система уведомлений о протечке на ESP32: схема, прошивка, Telegram‑оповещения

Когда я только начинал возиться с датчиками протечки, меня удивило, что настоящая беда редко приходит громко. Обычно всё начинается с капли под коллектором, с подкапывающего фильтра или треснувшей гибкой подводки. И если вовремя не узнать, через пару часов можно получить вздутый ламинат и мокрый гипсокартон. Поэтому я собрал систему на ESP32, которая не ждёт потопа, а ловит первые признаки воды и сразу шлёт уведомление в Telegram. Никакой магии — просто надёжная фиксация факта и быстрая реакция.

Ниже — практический вариант от выбора датчика и схемы подключения до логики прошивки и отправки сообщений. Все решения проверены в реальной котельной и под мойкой.

Что получится в итоге

Система будет:

  • отслеживать появление воды на контрольной площадке;
  • отправлять уведомление в Telegram;
  • не спамить сообщениями при каждом касании воды;
  • переживать кратковременные сбои Wi‑Fi;
  • работать от 3,3 В без сложной обвязки.

Базовая логика проста: датчик замыкает цепь при попадании воды, ESP32 видит изменение уровня сигнала и отправляет сообщение. Обычно используют вход с подтяжкой вверх: в сухом состоянии на пине высокий уровень, при намокании — низкий. Никаких аналоговых измерений, только цифровой факт: есть вода или нет.

Как устроена система

Состав

Минимальный набор:

  • ESP32 (любая плата с Wi‑Fi, я чаще беру WROOM-32);
  • датчик протечки воды;
  • источник питания 5 В или 3,3 В;
  • провода Dupont;
  • корпус или монтажная коробка;
  • Telegram‑бот для уведомлений.

Если делать вариант «надежнее и удобнее для дома», добавьте:

  • резервный блок питания (хотя бы power bank с pass-through);
  • RC‑фильтр или программную антидребезговую задержку;
  • светодиод индикации на GPIO;
  • кнопку теста, закорачивающую вход на землю.

ESP32 выбрана не случайно: встроенный Wi‑Fi и куча GPIO позволяют обойтись без внешних модулей, а 3,3‑вольтовая логика упрощает питание от одной банки LiFePO4 или стабилизатора. Опыт с трекерами научил меня, что система должна быть максимально автономной и не зависеть от облаков — здесь всё крутится локально, Telegram лишь транспорт.

Принцип работы

Цепочка событий выглядит так:

  1. Датчик находится в сухом состоянии — контакты разомкнуты.
  2. На входе ESP32 держится высокий уровень благодаря внутренней или внешней подтяжке.
  3. Вода (слабый проводник) замыкает контакты датчика, и потенциал пина прижимается к земле.
  4. Пин уходит в LOW.
  5. Контроллер фиксирует событие и отправляет Telegram‑сообщение.

Это удобнее, чем постоянно опрашивать сложную аналитику: для задачи протечки нужен не «умный вывод», а надёжная фиксация факта воды. Физика здесь простая: сопротивление воды хоть и велико (особенно дистиллированной), но в бытовой воде с солями его достаточно, чтобы надёжно притянуть вход к GND.

Какой датчик выбрать

Для домашней системы подходят три типа. Я перепробовал все и составил таблицу по личным впечатлениям.

Тип датчика Плюсы Минусы Где лучше ставить
Датчик на двух электродах Дешёвый, простой, легко подключить Со временем окисляется, хуже работает в сырости Под раковиной, у стиральной машины, возле коллекторов
Площадочный датчик с выносным кабелем Удобно заводить в труднодоступные места Дороже простейшего варианта Под ванну, за бойлер, в нишу с трубами
Датчик с готовым модулем и выходом DO Минимум возни с схемой Качество модулей сильно отличается Для быстрого запуска и тестов

Если задача — реальная защита дома, а не лабораторный эксперимент, смотрите на датчики с удобным креплением и выносной площадкой. Дешёвые голые электроды через полгода начинают окисляться, особенно на жёсткой воде, и могут давать ложные срабатывания или, наоборот, терять чувствительность. Для постоянной установки я предпочитаю площадочные модели: их можно аккуратно закрепить под ванной или за бойлером, и контакты не болтаются.

Схема подключения ESP32

Простая схема

Обычно датчик подключают так:

  • один контакт датчика — к GND;
  • второй контакт — к выбранному GPIO;
  • на входе включается внутренний подтягивающий резистор (INPUT_PULLUP).

Такой вариант хорошо работает с датчиками, которые замыкают сигнал на землю при наличии воды. По сути, мы используем сам датчик как ключ, соединяющий вход с землёй.

Что важно учесть

  • Не подавайте на GPIO ESP32 напряжение 5 В — входы толерантны к 5 В только на некоторых пинах, но лучше не рисковать.
  • Используйте только 3,3‑вольтовую логику. Однажды я по ошибке подал 5 В на GPIO — плата выжила, но датчик начал врать, пришлось перепаивать.
  • Не вешайте датчик на «случайный» пин, если он влияет на загрузку платы (strapping pins).
  • Для стабильности лучше брать обычный GPIO, не участвующий в начальной конфигурации загрузчика.

Рекомендуемый вариант пинов

Подойдут, например:

  • GPIO 32;
  • GPIO 33;
  • GPIO 25;
  • GPIO 26;
  • GPIO 27.

Эти пины удобно использовать для бытовых входов. Если планируется несколько датчиков, заранее выберите набор входов и подпишите их в коде, чтобы потом не путаться.

Схема подключения по шагам

Шаг 1. Подготовьте питание

ESP32 можно питать от USB или от стабильного 5 В через встроенный стабилизатор платы. Для стационарной установки лучше использовать качественный блок питания с запасом по току (хотя бы 500 мА). Я часто беру старые зарядники от телефонов, но обязательно проверяю пульсации осциллографом — дёшево и сердито.

Шаг 2. Подключите датчик

  • Контакт VCC датчика (если он есть) подключите к 3,3 В;
  • контакт GND — к земле;
  • выходной контакт сигнала — к выбранному GPIO ESP32.

Если датчик — просто две площадки без активной электроники, то одна площадка идёт на GND, вторая — на входной пин. Никаких дополнительных компонентов не требуется.

Шаг 3. Проверьте логику

В сухом состоянии вход должен читать HIGH, а при намокании — LOW. Если поведение обратное, значит у вас другой модуль или иная схема подключения. Проверьте мультиметром: на сигнальном проводе относительно земли должно быть около 3,3 В в сухом виде и около 0 В при замыкании контактов влажной тряпкой.

Прошивка: что должна уметь программа

Хорошая прошивка для датчика протечки должна делать не только «если вода — отправь сообщение». Иначе вы получите спам при каждой капле и нервный тик от постоянных уведомлений.

Ей нужны ещё несколько вещей:

  • подавление ложных срабатываний (дребезг контактов);
  • защита от повторной отправки одного и того же события;
  • возможность отличить «сухо» от «мокро» с гистерезисом;
  • повторная попытка отправки при сбое сети;
  • отдельное сообщение о восстановлении (высохло).

Логика состояний

Лучше думать не в терминах «датчик сработал», а как о двух состояниях: сухо и мокро. Когда состояние меняется, отправляется событие. Это позволяет избежать спама, если вода всё ещё стоит на контактах. Я в своих проектах ввожу ещё промежуточный таймаут: чтобы состояние считалось изменившимся, уровень должен продержаться не менее 2–3 секунд. Это отсекает случайные капли и наводки.

Пример кода для ESP32

Ниже — рабочая базовая логика. Она подходит как основа, которую можно доработать под конкретный модуль и библиотеку для Telegram. Код делает ровно то, что нужно: цепляется за Wi‑Fi, слушает пин с подтяжкой, ждёт стабильного изменения состояния и только потом шлёт сообщение. Никаких лишних опросов, всё на флагах.

Что делает этот код

  • подключается к Wi‑Fi и проверяет соединение;
  • читает датчик через INPUT_PULLUP;
  • фиксирует смену состояния с защитой от дребезга;
  • отправляет уведомление в Telegram;
  • не шлёт дубли подряд (хранит последнее известное состояние);
  • может повторно напомнить о продолжающейся протечке через заданный интервал.

Я обычно добавляю в код ещё и watchdog, чтобы ESP32 перезагружалась при зависании — наследие опыта с трекерами, где потеря связи недопустима.

Как завести Telegram‑уведомления

1. Создайте бота

Через BotFather создайте нового бота и получите токен. Это стандартный способ для Telegram‑ботов. Токен — длинная строка, храните её в коде как константу.

2. Узнайте chat ID

Боту нужно понимать, куда отправлять сообщения. Для этого находят chat ID пользователя или группы, куда будут приходить уведомления. В простых схемах достаточно персонального чата. Я обычно создаю отдельную группу «Дом: аварии» и добавляю туда бота и всех домашних — так все видят тревогу.

3. Проверьте метод отправки

Telegram Bot API поддерживает отправку сообщений методом sendMessage, а в параметре parse_mode можно использовать MarkdownV2 или HTML, если нужно форматирование. Для аварийных сообщений я ставлю parse_mode=HTML и выделяю слово «ПРОТЕЧКА» жирным — так сразу бросается в глаза.

4. Проверьте формат текста

Если форматирование не нужно, можно отправлять обычный текст. Это самый надёжный вариант для первых запусков. Но учтите, что спецсимволы вроде подчёркивания могут сломать разметку, если включён Markdown. Я предпочитаю сразу экранировать или использовать HTML.

Что лучше: HTTPS или простой запрос

Для домашнего проекта чаще всего используют HTTPS. Это стандартный путь для Telegram Bot API. Внутри ESP32 это нормально работает, но есть нюанс: нужно корректно организовать TLS‑соединение. Библиотеки вроде UniversalTelegramBot сами заворачивают запросы в защищённый канал.

Практический совет

Для быстрого запуска часто используют упрощённый режим проверки сертификата (отключают проверку). Это удобно, но не идеально для постоянной установки. Если система станет постоянной частью дома, лучше настроить нормальную проверку сертификата или вынести отправку сообщений через локальный MQTT-брокер, который уже стучится в Telegram. У меня в котельной стоит небольшой сервер на Raspberry Pi, и ESP32 общается с ним по MQTT — так надёжнее и меньше накладных расходов на TLS.

Где ставить датчики протечки

Самый частый промах — поставить датчик «где удобно», а не где вода реально появится первой. Я всегда представляю, как потечёт вода, и ставлю датчик в самой низкой точке возможного разлива.

Лучшие точки установки

  • под мойкой на кухне;
  • под раковиной в санузле;
  • рядом с фильтрами и колбами (у них часто подтекают уплотнения);
  • возле коллекторов отопления и водоснабжения;
  • под стиральной и посудомоечной машиной (я кладу датчик прямо на пол за прибором);
  • около бойлера;
  • в нише с насосным оборудованием.

Где толку мало

  • на полу посреди комнаты — вода пойдёт к стенам, а не в центр;
  • слишком высоко над уровнем возможной воды — пока намокнет, уже потоп;
  • рядом с сильной вентиляцией, которая сушит контакты и может давать нестабильность;
  • в местах, где датчик легко случайно задеть шваброй или тряпкой.

У меня один датчик стоит прямо под коллектором тёплого пола — там всегда сухо, но если потечёт, вода пойдёт именно туда. А под стиралкой я дополнительно положил датчик на кусок виброизоляции, чтобы контакты не дребезжали от вибрации при отжиме.

Типовые ошибки при сборке

  • Подают на вход ESP32 напряжение 5 В — часть пинов это терпит, но лучше не проверять.
  • Не используют подтяжку входа — пин висит в воздухе и ловит наводки от проводов 220 В, получаются фантомные срабатывания.
  • Не делают антидребезг — одна капля вызывает десяток сообщений подряд.
  • Размещают датчик слишком далеко от потенциальной точки протечки — пока вода добежит, ущерб уже нанесён.
  • Отправляют сообщение на каждое прочтение пина в LOW — спамят сами себя.
  • Ставят датчик в место, где на него постоянно попадает конденсат, и получают ложные тревоги.
  • Не тестируют систему после монтажа — самая обидная ошибка.

Как уменьшить ложные срабатывания

Программные меры

  • добавить задержку подтверждения события (debounce) не менее 2–3 секунд;
  • считать протечку активной только если LOW держится несколько секунд подряд;
  • отправлять сообщение о восстановлении только после стабилизации HIGH в течение аналогичного времени;
  • хранить последнее состояние в энергонезависимой памяти (NVS), если нужен контроль после перезагрузки.

Монтажные меры

  • поднимать контакты чуть выше самой мокрой зоны, чтобы случайные брызги не замыкали;
  • защищать датчик от капель сверху небольшим козырьком;
  • использовать короткие, аккуратные провода, лучше витую пару;
  • исключить касание контактов металлическими предметами.

Если датчик стоит далеко от контроллера, я добавляю внешний подтягивающий резистор 10 кОм прямо у датчика и экранированный провод — так наводки минимальны.

Чек-лист перед запуском

  • [ ] ESP32 стабильно питается, нет просадок напряжения.
  • [ ] Датчик подключен к GND и GPIO.
  • [ ] Вход настроен как INPUT_PULLUP.
  • [ ] В сухом состоянии датчик показывает HIGH (проверено мультиметром или в Serial).
  • [ ] В Telegram приходит тестовое сообщение при старте.
  • [ ] При намокании отправляется уведомление.
  • [ ] Повторные сообщения не спамят чат (проверить, капнув воду дважды).
  • [ ] Датчик стоит в месте реального риска протечки.
  • [ ] Проведён тест с водой в минимальном объёме (буквально чайная ложка).

Как протестировать систему правильно

Тестировать «на глаз» недостаточно. Лучше сделать так:

  1. Включите систему.
  2. Убедитесь, что в Telegram приходит стартовое сообщение (если настроено).
  3. Смочите датчик буквально несколькими каплями воды, не закорачивая контакты отвёрткой — нам нужна реальная проводимость.
  4. Проверьте, что событие пришло один раз.
  5. Подождите, пока датчик высохнет (можно продуть феном).
  6. Проверьте сообщение о восстановлении.
  7. Повторите тест после перезагрузки ESP32.

Если на тесте всё работает, в реальной ситуации система с высокой вероятностью тоже не подведёт. Я всегда провожу такой тест после монтажа и раз в полгода при обслуживании котельной.

Когда самодельного решения недостаточно

Самодельная система хороша для раннего предупреждения, но у неё есть ограничения:

  • она не перекрывает воду сама;
  • зависит от питания и Wi‑Fi;
  • не заменяет полноценную защиту с электрокраном;
  • требует периодической проверки контактов.

Если риск протечки высокий (например, дом часто остаётся без присмотра), лучше сочетать уведомления с автоматическим перекрытием воды. Тогда ESP32 может управлять реле электрокрана через тот же GPIO, и вы получите полноценную защиту. У меня в котельной датчики протечки завязаны на контроллер, который при аварии отрубает насос и закрывает входной кран — это уже следующий уровень.

Вывод

Самодельная система уведомлений о протечке на ESP32 — это практичный и недорогой способ вовремя узнать о проблеме в доме. В базовом варианте она собирается из простого датчика, ESP32 и Telegram‑бота, а при нормальной настройке работает достаточно надёжно для бытовых задач.

Главная ценность такой схемы не в «умности», а в скорости реакции. Чем раньше вы узнаете о капле под бойлером или мокром узле в котельной, тем меньше шанс на дорогой ремонт. И, как показывает мой опыт, самодельный датчик с правильно написанной прошивкой часто оказывается честнее и прозрачнее многих готовых «умных» решений.

FAQ

Можно ли подключить несколько датчиков к одной ESP32?
Да, если использовать отдельный GPIO на каждый датчик. Так проще определить, где именно появилась вода. Я на одной ESP32 вешаю до четырёх датчиков, и в сообщении указываю, какой именно сработал.

Нужен ли внешний резистор?
Если используется вход INPUT_PULLUP, часто хватает внутренней подтяжки ESP32 (около 45 кОм). Но для длинных линий (более 2–3 метров) и в условиях сильных помех внешний резистор 10 кОм, установленный прямо у датчика, может улучшить помехоустойчивость.

Будет ли работать без интернета?
Локально датчик будет работать, но Telegram‑уведомления без доступа в сеть не отправятся. В этом случае нужен локальный сигнал (зуммер, сирена) или резервный канал связи, например, SMS через GSM-модуль. Я для критичных узлов дублирую оповещение через MQTT на локальный дисплей в котельной.

Можно ли отправлять не только текст, но и фото?
Да, Telegram Bot API позволяет отправлять изображения. Но для простого датчика протечки это обычно избыточно. Сначала лучше отладить надёжную текстовую тревогу, а фото имеет смысл, если у вас есть камера, направленная на зону риска.

Что делать, если сообщения дублируются?
Увеличить задержку подтверждения, проверку состояния и время между повторными уведомлениями. Это почти всегда решает проблему. В моём коде я ставлю минимальный интервал между тревогами 5 минут, даже если вода не уходит.

Какой датчик лучше для долгой эксплуатации?
Для постоянной установки лучше выбирать не самый дешёвый голый сенсор, а более аккуратный модуль с выносной площадкой и удобным креплением. Контакты из нержавейки или с золотым покрытием живут дольше. Я пользуюсь площадочными датчиками с кабелем — за два года полёт нормальный.