Найти в Дзене

Статья 4. Собираем и подключаем датчик температуры: ESP + DS18B20 + ESPHome.

Компоненты: Бюджет на базовый вариант: ~800-1500 руб. Есть компоненты, которые покупаются однажды - несколько датчиков будут даже дешевле.
Дополнительные датчики DS18B20: +150-300 руб./шт. Вариант 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. Физическая сборка: Шаг 1: Добавляем секреты (логин и пароль от wifi) Открываем ESPHome Builder → SECRETS → → копируем и вставляем (указывая имя вашей wifi точки доступа и пароль от нее, если у вас 2 сети 2.4 и 5G добавьте сразу обе, оно нам конечно не надо,
Оглавление

Часть 1: Что нам понадобится (компоненты и цены)

Компоненты:

  • Wemos D1 Mini (ESP8266) - 150-200 руб.
    https://aliexpress.ru/wholesale?SearchText=wemos+d1+mini
    Разновидностей много подойдут вероятно все, но я к экспериментам не стремлюсь, выбираю то чем пользовался и что точно работает. На что обращаю внимание - 1. есть антенна; 2. большой радиатор с надписью wi-fi; 3. разъемы type-c/microUSB - ни на что не влияет, но у многих уже лежат без дела кабели, сэкономьте, купите плату с тем разъемом кабель к которому у вас уже есть. Тонкие (возьмите комплектный провод для зарядки телефона - не тоньше) и/или длинные (больше двух метров) кабели за кабели не считаются, их не используем, будете ловить фантомные проблемы и не сразу поймете в чем дело.
-2

  • DS18B20 в герметичном исполнении - 150-250 руб./шт. С проводами 1-3 метра. Брать версию в нержавеющем цилиндре (1). Датчик цифровой - провода можно нарастить в теории и метров на 30 без искажения данных, но я такую паутину делать не советую, датчик не дорогой, можно и несколько сделать, получив при этом дублирование и отказоустойчивость. Легко найдете по запросу DS18B20 в ozon/aliexpress.
-3
  • Резистор 4.7 кОм (4k7) - 10 руб.
    Продаются пачкой от 10 до 100 штук, причем и 10 и 100 будут могут стоить одинаково - это нормально. Ищем на ozon/aliexpress.

  • Макетная плата и провода - 200 руб. Для прототипирования. Можно и без нее, если собираете по чужим готовым схемам, но для проверки работы датчика до пайки пригодится.
-4

  • Провода - 400 руб. Также покупка опциональная - провода нужны исключительно для прототипирования и проверки работы датчика. Бывают трех видом мама-мама, папа-папа и папа-мама. Продаются пачками, в некоторых пачках один вид, в некоторых сразу все - их я и советую. Длинные не берите, тянуть их нужно на макетной плате буквально на 5-10 сантиметров.
-5
  • Корпус - 100-300 руб. Удобно использовать распределительную коробку, подберите с соответствующей степенью защиты в зависимости от места установки. Питание и датчик температуры заводим снизу (влага по проводам не должна стекать в коробку).
-6
  • Силиконовый герметик - 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.

Физическая сборка:

  1. Соберите схему на макетной плате
  2. Проверьте работу (в следующем разделе)
  3. Пропаяйте соединения
  4. Поместите плату в корпус
  5. Погрузите в воду датчик DS18B20

Часть 3: Создание конфигурации в ESPHome

Шаг 1: Добавляем секреты (логин и пароль от wifi)

Открываем ESPHome Builder → SECRETS →

-7

→ копируем и вставляем (указывая имя вашей 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 сверху) → выходим крестом

-8

Шаг 2: Создаём новое устройство

1. Нажимаем "+ NEW DEVICE"

-9

2. Выбираем "Continue" "New Device Setup"

3. Вводим имя: hello-world [любое понятное вам имя, оно должно однозначно ассоциировать как с устройством так и с местом его установки, на латинице, разделитель тире, например, zal1-water-temp или kak-vhodish-srazy-sleva-water-temp]

4. Выбираем плату: "ESP8266"

5. Нажимаем "SKIP" (создастся конфиг, но использовать мы его конечно же не будем)

6. Для первого устройства система автоматически создаст encryption key, для всех следующих будет сама предлагать его установить - соглашаемся (но мы будем всегда добавлять его из секретов). Чтобы понять о чем я, просто создайте еще одно устройство, а потом удалите его (второе устройство!):

-10

7. Немного увеличим безопасность - открываем наше первое устройство, нажав EDIT:

-11

8. Находим блок с encryption key и копируем его вместе с ota password:

-12
-13

9. Идем в секреты и отредактировав вставляем в таком виде (ota password не создаем, он уникален для каждого устройства, используем его позже):

-14
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 в правом верхнем углу.

-15

3. В основном меню ESPHome нажимаем на три точки устройства и выбираем Install

-16

4. Для первой загрузки выбраем "Plug into this computer"

-17

5. Дальше ждем сборки проекта (может занять довольно продолжительное время - 5 минут и более):

-18

6. Качаем проект:

-19

7. Открываем ESPHome Web (на скрине выше п.2). У меня без доп манипуляций сайт не открывается, но вы знаете, что делать если доступ заблокирован. На сайте нажимаем CONNECT, появится запрос на подключение - в этот момент подключем нашу плату к компу и смотрим какая строчка появилась, ее и выбираем (если плату уже подключили - отключите ее и подключите повторно):

-20

8. Далее INSTALL (1) Выберите файл (2) → двойной клик на файл (3)? скаченный в п. 6 → INSTALL (4)

-21

9. Ожидаем завершения установки:

-22

10. Отключаем от ПК плату и подключаем повторно, в ESPHome увидим, что плата ONLINE:

-23

Часть 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/. Получается что-то примерно такое:

-24

Собрал без макетной платы, даже проще и очевиднее получилось:

-25

3. Подключаем питание (лучше снова через ПК, если подключите через подготовленный блок питания и кабель работать не будет, то будет не поднятно, толи собрали не правильно, толи блок питания не работает). Открываем LOGS:

-26

4. Ищем адрес датчика и копируем его (начиная с 0х и до пробела):

-27

5. Нажимаем CLOSE (кнопка справа внизу) → переходим в EDIT датчика → вставляем скопированный адрес датчика → сохраняем → закрываем:

-28

6. Так как мы все сделали правильно, то теперь датчик можно обновлять по wifi, так и поступим для передачи корректного адреса датчика. Три точки - INSTALL - Wirelessly (Шаг 3. п. 3, в п. 4 выбираем первый пункт - Wirelessly).

7. После установки можно насладиться полученным результатом в логах:

-29

8. Примерно 100% датчиков за 150 рублей не откалиброваны и легко могут иметь погрешность в 0.5 градуса и более.
Есть два варианта калибровки:
- простой - измеряем рядом с нашим датчиком температуру другим прибором показаниям которого мы верим - определяем разницу. Например, наш датчик показывает на 0.5 градусов меньше, добавляем следующие строки (они в коде есть, но строка с ними начинается с # - это закомментированные строки, система их игнорирует, но если # убрать, они начнут работать):

-30

- вариант сложнее - нужны два измерения с эталоном, со значительной разницей в температуре (например, одно измерение на 10 градусах, второе на 60). Например, в результате измерений мы значем, что датчик показывает 9.5 градусов вместо 10 и 61 градус вместо 60, берем другие закомментированные строчки кода и добавляем их. Эта калибровка более точная, но и более трудозатратная, а также имеет смысл если ожидаются значительные перепады температуры, а не +/- 5 градус как в бассейнах.

-31

9. Хоть датчики и называются герметичные, но фактически за 150 рублей экономили на всем на чем могли. У меня их сгнило несколько, потому что внутрь попала вода (постепенно растет погрешность измерений до полного отключения). Поэтому термоусадку с гильзы снимаем, удаляем имеющийся герметик, если он там вообще есть и заливаем свой. Можно с термоусадкой, можно без, для себя-то вы же зальете герметика не жалея.

10. Я не мастер паять, но примерно результат должен быть такой (да, ESPшка не та, что я рекомендовал, взял из старых запасов):

-32
-33

Для красоты и надежности можно засунуть в термоусадку:

-34

Часть 5. Выводим данные с датчика с виде графика

1. Открываем Панели:

-35

2. Нажимаем Добавить панель Создать новую панель:

-36

3. Создаем:

-37

4. Открываем на редактирование:

-38

5. Добавляем раздел (клик левыой кнопкой мыши в выделенную область):

-39
-40

6. Ищем Сенсор и кликаем в него:

-41

7. Немного улучшаем отображение, на вкладке Компоновка включаем Карточка во всю ширину и Сохранить (кнопка справа снизу):

-42

8. Добавляем еще один раздел:

-43

9. На этот раз ищем Шкала:

-44

10. Выбираем Объект для отображения Температура воды:

-45

11. Логика работы графика такая:

  • минимум - начала отсчета слева;
  • максимум - конец отсчета справа;
    Если значение выйдет из диапазона минимум - максимум, ничего страшного не произойдет, просто шкала будет либо полностью пустая, либо целиком залита, цифра будет отображаться корректная.
  • даллее есть три значения зеленый - желтый - красный, которые должны заполняться строго по возрастанию. Цвет шкалы будет - [синим (как на скрине), если температура ниже зеленого], [зеленая, если от зеленого до желтого], [желтая, если от желтого до красного] и [красная, если выше красного]:
-46

12. Сохраняем и нажимаем Готово (справа сверху):

-47

13. Первый дашборд готов, открывать можно с телефона, планшета, ПК в той же сети:

-48

Итоги.

Мы прошли полный цикл создания умного датчика температуры для рыбной фермы: от сборки аппаратной части (ESP8266 + DS18B20) и прошивки через ESPHome до интеграции в Home Assistant и создания информативной панели с графиком и цветной шкалой. Теперь температура воды отслеживается в реальном времени с точностью до 0.1°C.

Анонс.

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