Часть 1: Что нам понадобится (компоненты и цены)
Компоненты:
- Wemos D1 Mini (ESP8266) - 150-200 руб.
https://aliexpress.ru/wholesale?SearchText=wemos+d1+mini
Разновидностей много подойдут вероятно все, но я к экспериментам не стремлюсь, выбираю то чем пользовался и что точно работает. На что обращаю внимание - 1. есть антенна; 2. большой радиатор с надписью wi-fi; 3. разъемы type-c/microUSB - ни на что не влияет, но у многих уже лежат без дела кабели, сэкономьте, купите плату с тем разъемом кабель к которому у вас уже есть. Тонкие (возьмите комплектный провод для зарядки телефона - не тоньше) и/или длинные (больше двух метров) кабели за кабели не считаются, их не используем, будете ловить фантомные проблемы и не сразу поймете в чем дело.
- DS18B20 в герметичном исполнении - 150-250 руб./шт. С проводами 1-3 метра. Брать версию в нержавеющем цилиндре (1). Датчик цифровой - провода можно нарастить в теории и метров на 30 без искажения данных, но я такую паутину делать не советую, датчик не дорогой, можно и несколько сделать, получив при этом дублирование и отказоустойчивость. Легко найдете по запросу DS18B20 в ozon/aliexpress.
- Резистор 4.7 кОм (4k7) - 10 руб.
Продаются пачкой от 10 до 100 штук, причем и 10 и 100 будут могут стоить одинаково - это нормально. Ищем на ozon/aliexpress.
- Макетная плата и провода - 200 руб. Для прототипирования. Можно и без нее, если собираете по чужим готовым схемам, но для проверки работы датчика до пайки пригодится.
- Провода - 400 руб. Также покупка опциональная - провода нужны исключительно для прототипирования и проверки работы датчика. Бывают трех видом мама-мама, папа-папа и папа-мама. Продаются пачками, в некоторых пачках один вид, в некоторых сразу все - их я и советую. Длинные не берите, тянуть их нужно на макетной плате буквально на 5-10 сантиметров.
- Корпус - 100-300 руб. Удобно использовать распределительную коробку, подберите с соответствующей степенью защиты в зависимости от места установки. Питание и датчик температуры заводим снизу (влага по проводам не должна стекать в коробку).
- Силиконовый герметик - 200 руб. Для гидроизоляции. Изолировать будем не распределительную коробку, а сам датчик, далее будет описано как, зачем и почему.
- USB-кабель Micro-USB/USB typeC - 100 руб. Для прошивки и питания.
- Блок питания 5V[1-2]A - 400 руб.
- Другой ПК на Windows в той же сети, что и сервер умного дома - с него выполняются все манипуляции ниже.
Бюджет на базовый вариант: ~800-1500 руб. Есть компоненты, которые покупаются однажды - несколько датчиков будут даже дешевле.
Дополнительные датчики DS18B20: +150-300 руб./шт.
Часть 2: Схемы подключения
Вариант 1: Один датчик (базовый)
DS18B20 (3 провода):
• КРАСНЫЙ (VDD) → PIN "3V3" на Wemos D1 Mini
• ЧЁРНЫЙ (GND) → PIN "G" на Wemos D1 Mini
• ЖЁЛТЫЙ (DATA) → PIN "D6" (GPIO12) на Wemos D1 Mini
↗ через резистор 4.7кОм к PIN "3V3"
Резистор подключается между DATA и 3V3
Вариант 2: Несколько датчиков на одной шине (до 8 шт.)
Датчик 1: VDD→3V3, GND→G, DATA→D6
Датчик 2: VDD→3V3, GND→G, DATA→D6
Датчик 3: VDD→3V3, GND→G, DATA→D6
... и так далее
Все датчики подключаются к одним и тем же пинам! Один резистор 4.7кОм между DATA и 3V3.
Физическая сборка:
- Соберите схему на макетной плате
- Проверьте работу (в следующем разделе)
- Пропаяйте соединения
- Поместите плату в корпус
- Погрузите в воду датчик DS18B20
Часть 3: Создание конфигурации в ESPHome
Шаг 1: Добавляем секреты (логин и пароль от wifi)
Открываем ESPHome Builder → SECRETS →
→ копируем и вставляем (указывая имя вашей wifi точки доступа и пароль от нее, если у вас 2 сети 2.4 и 5G добавьте сразу обе, оно нам конечно не надо, но так оно и пусть будет. Использовать будем 2.4G, во-первых, дешевые платы, на которых мы собираем устройство не поддержкивают wifi 5G, а, во-вторых, на 5G тоже повесим много всего, зачем нам лишняя конкуренция):
wifi_ssid: "Ваш_WiFi_SSID"
wifi_password: "Ваш_WiFi_пароль"
wifi5_ssid: "Ваш_WiFi_SSID"
wifi5_password: "Ваш_WiFi_пароль"
→ Сохраняем (кнопка SAVE сверху) → выходим крестом
Шаг 2: Создаём новое устройство
1. Нажимаем "+ NEW DEVICE"
2. Выбираем "Continue" → "New Device Setup"
3. Вводим имя: hello-world [любое понятное вам имя, оно должно однозначно ассоциировать как с устройством так и с местом его установки, на латинице, разделитель тире, например, zal1-water-temp или kak-vhodish-srazy-sleva-water-temp]
4. Выбираем плату: "ESP8266"
5. Нажимаем "SKIP" (создастся конфиг, но использовать мы его конечно же не будем)
6. Для первого устройства система автоматически создаст encryption key, для всех следующих будет сама предлагать его установить - соглашаемся (но мы будем всегда добавлять его из секретов). Чтобы понять о чем я, просто создайте еще одно устройство, а потом удалите его (второе устройство!):
7. Немного увеличим безопасность - открываем наше первое устройство, нажав EDIT:
8. Находим блок с encryption key и копируем его вместе с ota password:
9. Идем в секреты и отредактировав вставляем в таком виде (ota password не создаем, он уникален для каждого устройства, используем его позже):
api_encryption_key: "Ваш_ключ_шифрования"
Шаг 3: Добавляем код в новое устройство и загружаем его на плату
1. Скачиваем на свой компьютер драйвер для чипа CH340, для windows, например, можно взять с сайта амперки - https://wiki.amperka.ru/_media/articles:driver-ch340:ch340ser-windows.zip (подробнее на странице - https://wiki.amperka.ru/articles:driver-ch340). Без драйвера плату для датчика компьютер не увидит и загрузить код на него вы не сможете.
2. Вновь открываем на редактирование наше устройство нажатием EDIT и вставляем код из git - https://github.com/RuVinSS/iFarm/blob/main/water-temp.yaml (не дает яндекс выложить код нормально - убирает отступы, а без них работать не будет). Не забудьте подставить свой ota password скопированный ранее. И сохраняем - кнопка SAVE в правом верхнем углу.
3. В основном меню ESPHome нажимаем на три точки устройства и выбираем Install
4. Для первой загрузки выбраем "Plug into this computer"
5. Дальше ждем сборки проекта (может занять довольно продолжительное время - 5 минут и более):
6. Качаем проект:
7. Открываем ESPHome Web (на скрине выше п.2). У меня без доп манипуляций сайт не открывается, но вы знаете, что делать если доступ заблокирован. На сайте нажимаем CONNECT, появится запрос на подключение - в этот момент подключем нашу плату к компу и смотрим какая строчка появилась, ее и выбираем (если плату уже подключили - отключите ее и подключите повторно):
8. Далее INSTALL (1) → Выберите файл (2) → двойной клик на файл (3)? скаченный в п. 6 → INSTALL (4)
9. Ожидаем завершения установки:
10. Отключаем от ПК плату и подключаем повторно, в ESPHome увидим, что плата ONLINE:
Часть 4: Сборка датчика
1. Вспоминаем схему сборки из начала статьи:
DS18B20 (3 провода):
• КРАСНЫЙ (VDD) → PIN "3V3" на Wemos D1 Mini
• ЧЁРНЫЙ (GND) → PIN "G" на Wemos D1 Mini
• ЖЁЛТЫЙ (DATA) → PIN "D6" (GPIO12) на Wemos D1 Mini
↗ через резистор 4.7кОм к PIN "3V3"
2. Берем макетную плату (только для тестированием перед пайкой, в принципе можно пропустить, но если вдруг к вас окажется сломанный датчик ds18b20, то будет обидно об этом узнать после полной сборки) и собираем на ней наш датчик (во время сборки плату от ПК отключаем). Как устроена плата вы можете прочитать, например, тут - https://ampermarket.kz/base/breadboard/. Получается что-то примерно такое:
Собрал без макетной платы, даже проще и очевиднее получилось:
3. Подключаем питание (лучше снова через ПК, если подключите через подготовленный блок питания и кабель работать не будет, то будет не поднятно, толи собрали не правильно, толи блок питания не работает). Открываем LOGS:
4. Ищем адрес датчика и копируем его (начиная с 0х и до пробела):
5. Нажимаем CLOSE (кнопка справа внизу) → переходим в EDIT датчика → вставляем скопированный адрес датчика → сохраняем → закрываем:
6. Так как мы все сделали правильно, то теперь датчик можно обновлять по wifi, так и поступим для передачи корректного адреса датчика. Три точки - INSTALL - Wirelessly (Шаг 3. п. 3, в п. 4 выбираем первый пункт - Wirelessly).
7. После установки можно насладиться полученным результатом в логах:
8. Примерно 100% датчиков за 150 рублей не откалиброваны и легко могут иметь погрешность в 0.5 градуса и более.
Есть два варианта калибровки:
- простой - измеряем рядом с нашим датчиком температуру другим прибором показаниям которого мы верим - определяем разницу. Например, наш датчик показывает на 0.5 градусов меньше, добавляем следующие строки (они в коде есть, но строка с ними начинается с # - это закомментированные строки, система их игнорирует, но если # убрать, они начнут работать):
- вариант сложнее - нужны два измерения с эталоном, со значительной разницей в температуре (например, одно измерение на 10 градусах, второе на 60). Например, в результате измерений мы значем, что датчик показывает 9.5 градусов вместо 10 и 61 градус вместо 60, берем другие закомментированные строчки кода и добавляем их. Эта калибровка более точная, но и более трудозатратная, а также имеет смысл если ожидаются значительные перепады температуры, а не +/- 5 градус как в бассейнах.
9. Хоть датчики и называются герметичные, но фактически за 150 рублей экономили на всем на чем могли. У меня их сгнило несколько, потому что внутрь попала вода (постепенно растет погрешность измерений до полного отключения). Поэтому термоусадку с гильзы снимаем, удаляем имеющийся герметик, если он там вообще есть и заливаем свой. Можно с термоусадкой, можно без, для себя-то вы же зальете герметика не жалея.
10. Я не мастер паять, но примерно результат должен быть такой (да, ESPшка не та, что я рекомендовал, взял из старых запасов):
Для красоты и надежности можно засунуть в термоусадку:
Часть 5. Выводим данные с датчика с виде графика
1. Открываем Панели:
2. Нажимаем Добавить панель → Создать новую панель:
3. Создаем:
4. Открываем на редактирование:
5. Добавляем раздел (клик левыой кнопкой мыши в выделенную область):
6. Ищем Сенсор и кликаем в него:
7. Немного улучшаем отображение, на вкладке Компоновка включаем Карточка во всю ширину и Сохранить (кнопка справа снизу):
8. Добавляем еще один раздел:
9. На этот раз ищем Шкала:
10. Выбираем Объект для отображения Температура воды:
11. Логика работы графика такая:
- минимум - начала отсчета слева;
- максимум - конец отсчета справа;
Если значение выйдет из диапазона минимум - максимум, ничего страшного не произойдет, просто шкала будет либо полностью пустая, либо целиком залита, цифра будет отображаться корректная. - даллее есть три значения зеленый - желтый - красный, которые должны заполняться строго по возрастанию. Цвет шкалы будет - [синим (как на скрине), если температура ниже зеленого], [зеленая, если от зеленого до желтого], [желтая, если от желтого до красного] и [красная, если выше красного]:
12. Сохраняем и нажимаем Готово (справа сверху):
13. Первый дашборд готов, открывать можно с телефона, планшета, ПК в той же сети:
Итоги.
Мы прошли полный цикл создания умного датчика температуры для рыбной фермы: от сборки аппаратной части (ESP8266 + DS18B20) и прошивки через ESPHome до интеграции в Home Assistant и создания информативной панели с графиком и цветной шкалой. Теперь температура воды отслеживается в реальном времени с точностью до 0.1°C.
Анонс.
В следующей статье добавим системе голос — настроим Telegram-бота для экстренных уведомлений о критической температуре и интерактивных запросов данных прямо из чата. Ферма начнёт сама сообщать о проблемах!