Мой DIY-датчик температуры воды для умного дома: полный гайд от А до Я

Так, друзья, сегодня мы с вами будем колдовать. Я — человек, который любит, чтобы всё работало само, особенно когда речь идёт о рыбе. Представьте: вы на ферме, а вода в бассейне вдруг начала остывать. Если вовремя не заметить — пиши пропало. Поэтому я решил собрать свою систему мониторинга, которая будет следить за температурой 24/7 и отправлять данные прямо в Home Assistant. Никаких китайских поделок с непонятными протоколами — только своё, надёжное, на ESP8266.

Железки: что покупаем и на чём экономим

Давайте сразу к делу. Мозг всей системы — плата Wemos D1 Mini на чипе ESP8266. Стоит копейки, 150–200 рублей, но делает всё, что нужно. Я не люблю эксперименты, поэтому выбираю проверенное: обязательно чтобы была антенна и большой радиатор с надписью "wi-fi". Тип разъёма — microUSB или USB Type-C — роли не играет, берите тот, кабель от которого у вас уже валяется без дела. Только, ради бога, не используйте тонкие и длинные провода! Если кабель тоньше, чем штатный зарядный для телефона, или длиннее двух метров — вы просто наживёте себе проблем. Плата будет перезагружаться, данные теряться, и вы будете долго чесать репу, пытаясь понять, что не так.

Сам датчик температуры — это цифровой DS18B20 в герметичном исполнении. Версия в нержавеющем цилиндре — наш выбор. Он стоит 150–250 рублей за штуку, провода обычно идут от 1 до 3 метров. Цифровой он потому, что ему плевать на длину проводов: можете нарастить до 30 метров, и данные не исказятся. Но я вам советую не делать паутину, а просто поставить несколько датчиков в разных местах — и дублирование, и отказоустойчивость. Вдруг один сломается — второй подстрахует.

Ещё понадобится резистор на 4.7 кОм (в народе 4k7). Продаётся пачками по 10–100 штук, и цена часто одинаковая — рублей 10. Просто берите, не задумывайтесь. Для сборки прототипа не забудьте макетную плату и провода-перемычки (около 200 рублей). Я без неё сначала собирал, но для проверки работоспособности датчика — вещь незаменимая. Провода лучше брать сразу набор "мама-мама, папа-папа, папа-мама", чтобы не прыгать по разным лотам. Длинные не берите: на макетке расстояния смешные, 5–10 сантиметров за глаза.

Всё это безобразие нужно спрятать в корпус. Я использую обычную распределительную коробку — рублей 100–300. Для улицы или влажного помещения берите с соответствующей степенью защиты (IP). Главное: питание и провода от датчика заводим снизу, чтобы влага не затекала внутрь. Ну и силиконовый герметик — 200 рублей. Им мы будем гидроизолировать сам датчик, а не коробку, чуть позже расскажу, зачем.

Блок питания на 5V, 1–2 ампера — 400 рублей, плюс USB-кабель — 100 рублей. И компьютер с Windows в той же сети, где будет сервер умного дома. С него мы будем делать все настройки. Итого базовый бюджет: 800–1500 рублей. Каждый дополнительный датчик DS18B20 — ещё плюс 150–300 рублей.

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

Самый простой вариант — один датчик. У DS18B20 три провода: красный (питание), чёрный (земля) и жёлтый (данные). Всё подключается элементарно:

  • Красный — на пин 3V3 на Wemos D1 Mini.
  • Чёрный — на пин G (земля).
  • Жёлтый — на пин D6 (он же GPIO12).

Между жёлтым (DATA) и 3V3 обязательно впаиваем наш резистор 4.7 кОм — это подтяжка, без неё датчик не будет работать.

Хотите несколько датчиков? Тоже не проблема. Все их подключаем параллельно: красные — к 3V3, чёрные — к G, жёлтые — к D6. Резистор один на всех. Теоретически на одну шину можно повесить до 8 штук. Практически — я ставил три, всё летает.

Сборка: сначала собираем на макетке, проверяем, что всё видится (как — расскажу ниже), потом пропаиваем и прячем в коробку. Сам датчик можно смело погружать в воду — он герметичный.

Колдуем с ESPHome: создаём конфигурацию

Теперь самое интересное — прошивка. Я пользуюсь ESPHome — это просто рай для тех, кто не хочет писать код руками. Заходим в веб-интерфейс Home Assistant, открываем ESPHome Builder. Первым делом — секреты. Нам нужно спрятать логин и пароль от Wi-Fi. Добавляем их в раздел Secrets, например:

wifi_ssid: "Имя_моей_сети_2.4"
wifi_password: "Мой_пароль"
wifi5_ssid: "Имя_моей_сети_5"
wifi5_password: "Мой_пароль"

Да, можно добавить обе сети, но работать ESP8266 будет только с 2.4 ГГц — дешёвые платы 5 ГГц не поддерживают. Сохраняем и выходим.

Дальше создаём новое устройство. Жмём "+ NEW DEVICE", выбираем "Continue" → "New Device Setup". Имя придумываем любое, но на латинице и чтобы сразу было понятно, где этот датчик стоит. Я называю типа "zal1-water-temp" или "akvarium-1". Выбираем плату "ESP8266". Потом система предлагает создать encryption key — соглашаемся. Этот ключ нужно скопировать и добавить в секреты как api_encryption_key: "...". Он нужен для шифрования трафика между платой и сервером.

Теперь открываем наш конфиг на редактирование (кнопка EDIT). Скачиваем готовый YAML-файл из репозитория (ссылку я давал в начале). Вставляем его, не забываем подставить свой OTA password — он уникален для каждого устройства, его тоже копируем из автоматически сгенерированного блока. Сохраняем.

Первая прошивка: как не наломать дров

Сначала качаем драйвер для чипа CH340 — это USB-UART мост на плате. Без него компьютер не увидит Wemos. Я брал с сайта Амперки. Устанавливаем, втыкаем плату. В меню ESPHome нажимаем на три точки у устройства → Install → "Plug into this computer". Ждём, пока соберётся проект (иногда до 5 минут). Скачиваем готовый файл .bin.

Открываем ESPHome Web — это такой онлайн-инструмент для заливки прошивки. Там нажимаем CONNECT, подключаем плату заново (она должна появиться в списке COM-портов). Выбираем файл, жмём INSTALL. Ждём зелёной полосы. Если всё прошло, отключаем плату от ПК и подключаем снова. В логе ESPHome должно гореть "ONLINE".

Теперь нам нужно узнать адрес датчика в шине. Открываем LOGS на устройстве — там будет строка типа Found sensor 0x28ff... с адресом. Копируем его (от 0х до пробела). Возвращаемся в EDIT, находим в конфиге строку address: 0x... и вставляем этот адрес. Сохраняем. Дальше прошивку можно обновлять уже по Wi-Fi: три точки → Install → Wirelessly. Плата сама скачает новый код и перезагрузится.

Калибровка: доводим до ума

Почти все дешёвые датчики DS18B20 (за 150 рублей) имеют погрешность до 0.5 °C. Их никто не калибрует. Поэтому обязательно делаем калибровку. Есть два пути:

  • Простой: ставим рядом эталонный термометр, снимаем разницу. Если датчик показывает на 0.5 градуса меньше, добавляем в конфиг строку filters: - calibrate_linear: method: exact - degrees: 20.0 - raw: 19.5 (это пример).
  • Сложный: нужно два эталонных замера с большой разницей (например, 10 °C и 60 °C). Тогда используем две точки для аппроксимации — это даст линейную коррекцию во всём диапазоне. Для аквариумов или бассейнов первый вариант вполне подходит, так как перепады там обычно не больше 5–10 градусов.

Не забудьте также про гидроизоляцию датчика. Новые датчики хоть и называются герметичными, но производители экономят на силиконе. У меня уже сгнило два из-за того, что вода попала внутрь. Поэтому как только вы проверили его работоспособность — аккуратно снимаем термоусадку с гильзы, удаляем заводской герметик (если он есть), и заливаем свой, не жалея. Можно прямо в термоусадке, а можно и без неё — главное, чтобы под корпус датчика ничего не попало.

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

Визуализация: графики в Home Assistant

Всё это затевалось ради удобного взгляда на данные. Идём в Home Assistant, раздел "Панели". Жмём "Добавить панель" → "Создать новую панель". Называем её, например, "Температура воды". Открываем редактирование (кнопка с карандашом). Добавляем раздел (клик по иконке "+"). В списке виджетов ищем "Сенсор" — выбираем нашу "Температуру воды" (название сенсора из ESPHome). В настройках на вкладке "Компоновка" ставим галочку "Карточка во всю ширину" — чтобы график был большим. Сохраняем.

Теперь добавим цветную шкалу, чтобы сразу глаз реагировал на опасную температуру. Снова добавляем раздел, но теперь ищем виджет "Шкала". Выбираем тот же сенсор. Настраиваем границы: минимум и максимум — от 0 до 40 °C (хотя если рыба живая, то точные параметры вы знаете). Дальше ставим три порога: зелёный (норма), жёлтый (внимание), красный (опасность). Цвет шкалы будет меняться в зависимости от текущего значения: ниже зелёного — синий, между зелёным и жёлтым — зелёный, между жёлтым и красным — жёлтый, выше красного — красный. Удобно!

Сохраняем панель. Всё, теперь на любом устройстве в вашей сети (телефон, планшет, ПК) можно открыть эту панель и видеть температуру воды в реальном времени с точностью до 0.1 °C.

Что дальше?

Мы прошли полный путь: от выбора компонентов и схемы до настройки дашборда. Теперь я спокоен: если вода начнёт остывать, я это увижу сразу. Но можно пойти дальше. В следующей части я научу систему "говорить" — настрою Telegram-бота, который будет присылать экстренные сообщения, если температура выйдет за пределы нормы. Ферма начнёт сама сообщать о проблемах!

Комментарии

?
19 - 13 = ?