Термостат на ESP32 с удаленным управлением. Часть 1. Вводная
Начиная с этой статьи я решил взять быка за рога, перестать тянуть резину с всякими там теориями и, таки уже начать рассказывать, как создать готовое устройство на базе ESP32 и ESP-IDF. А необходимые теоретические сведения буду выкладывать параллельно, по мере необходимости.
В итоге соберем и запрограммируем устройство, назовём его условно «Термостат + ОПС», которое обладает следующим функционалом:
- дистанционный мониторинг температуры в доме, на улице и теплоносителя отопительного котла (список сенсоров этим не ограничивается, вы можете добавить ещё) с контролем допустимых диапазонов и уведомлениями о выходе за их пределы
- управление отопительным котлом — то есть поддержание заданной температуры в доме на заданном уровне
- автономная охранно-пожарная сигнализация с оповещением в Telegram и возможностью подключения проводных и беспроводных (433 MHz) датчиков дверей, окон, движения, дыма, протечки воды, утечки газа, угарного газа и т.д.
- возможность автоматического управления нагрузкой посредством реле — например это может быть управление освещением по датчикам движения или управление краном с электроприводом для перекрытия водопровода при аварии
В начале я предоставлю на GitHub готовый «стартовый» проект с описанной выше логикой, а в дальнейшем вы сможете доработать «прикладную» логику под любые свои сценарии — алгоритмы автоматизации вы можете придумать свои, возможности ESP-IDF позволяют вам создать любые, самые сложные сценарии. Предложенное устройство вы можете рассматривать лишь как стартовый вариант для творчества.
Прошивка не имеет web-интерфейса, все настройки осуществляются через файл конфигурации проекта или в run-time через mqtt. Просто не вижу особого смысла тратить на web-интерфейс время, силы и байты.
В одной статье всё сразу рассказать не получится, поэтому будет сразу серия статей:
- В этой я опишу планируемый функционал и возможности, своего рода это можно считать анонсом технических возможностей
- В следующей статье будут приведены список необходимых компонентов, схема соединений и печатная плата (устройство мелкосерийное, мной собрано уже несколько экземпляров), но его можно собрать и на макетке для пайки
- Затем обсудим, как создать прошивку на основе готового проекта с GitHub, не вникая во внутренности прошивки — просто настроив файл конфигурации под ваши параметры . Для начала это будет только телеметрия — удаленный мониторинг температуры, влажности и чего-нибудь ещё (по желанию).
- Установим и настроим для использования с устройством один из клиентов MQTT для Android. Никаких приложений для смартфона самому создавать не придется.
- После этого добавим в устройство логику, позволяющий ему работать в качестве термостата для управления отопительным котлом и поддержания температуры.
- При желании в устройство можно будет достаточно легко добавить функции охранно-пожарной сигнализации на пять проводных зон и неограниченное количество беспроводных, используя дешевые сенсоры 433 MHz
- Обсудим, как задействовать сенсоры ОПС (если вы решите их подключить) для управления освещением или иной домашней автоматизации.
Возможности прошивки «из коробки»
Предлагаемый вариант прошивки позволяет получить следующий функционал практически без необходимости программирования (вам потребуется только изменить настройки в файле конфигурации проекта ):
- Подключение к нескольким WiFi-сетям (до пяти) с автоматическим выбором. Прошивка не имеет web-интерфейса для настройки подключения к wifi, всё необходимое настраивается только в конфигурационном файле. Несколько преднастроенных сетей позволяет переносить устройство из одной локации в другую без необходимости изменения прошивки.
- Автоматическая синхронизация локального времени с серверами SNTP в сети интернет ( вам не потребуется использовать модуль часов, хотя его можно и подключить, при необходимости ).
- Постоянный контроль доступа в сеть интернет с помощью пинга с сохранением истории.
- На момент написания статьи доступны драйверы для сенсоров : DHT11-DHT22, MW33, AHT10-AHT21 (возможно и AHT25 будет работать — не проверял), DS18x20, BH1750, BMP180, BME180, BME280, ВМЕ680, CCS811, HDC1080, HTU2x, SHT2x, SHT3x, Si7021, Capacitive Soil Moisture Sensor
- Подключение сенсоров через две отдельные шины I2C, либо на выделенный GPIO (AM2302, DS18B20)
- Встроенные фильтры данных для сенсоров: среднее и медиана с настраиваемой длиной буфера (настройку можно выполнять в том числе и после запуска устройства). Фильтры особенно актуальны для линейки DHTxx
- Возможность настройки корректировки значений для сенсоров, например если вы имеет образцовый высокоточный термометр
- Фиксация экстремумов (минимумов и максимумов) значений для сенсоров: за сутки, неделю и за всё время работы устройства
- Автоматический мониторинг устройство заданных диапазонов — например при понижении температуры ниже допустимой (котёл отключился) устройство пришлет тревожное уведомление
- Контроль состояния сенсоров — сбой, некорректные данные, обрыв кабеля и т.д. с оповещением в Telegram
- MQTT — это основной канал управления устройством. Но при использовании внешних сервисов типа Telegram->MQTT возможно управление непосредственно из Telegram
- Поддержка двух MQTT-брокеров — основного и резервного (например локального и облачного ).
- Публикация данных с сенсоров вместе с временем измерения и со всеми экстремумами в одном топике в JSON-виде. Впрочем, можно легко перенастроить устройство на публикацию данных с сенсоров в простом виде
- Возможность передачи данных с сенсоров на другие устройства через локальный брокер ( необходимо внесение изменений в код ) или получение данных с других устройств
- Уведомления в Telegram . Можно привязать до 4 отдельных каналов или чатов: обычный, сервисный, охрана и изменение параметров
- Отправка данных на ThingSpeak , Народный мониторинг, Open Monitoring (по выбору, можно использовать несколько сервисов одновременно)
Охранно-пожарная сигнализация:
- Гибкая возможность создания охранных зон с разными реакциями ( необходимо внесение изменений в код прошивки )
- Переключение режимов охраны через MQTT или с помощью 433 MHz пульта с Ali
- Пять проводных зон с защитой от помех
- Встроенный модуль приемника 433 MHz для использования беспроводных сенсоров с Ali
- Встроенный зуммер для звуковых сигналов
- Выходы для светозвукового оповещателя (маячка с сиреной) с открытым коллектором
- Возможность совместного использования сенсоров ОПС для автоматики ( необходимо внесение изменений в код прошивки )
- Системный светодиод для индикации состояния устройства путем изменения частоты, количества вспышек и их интервала
- Ночной режим по расписанию, когда все светодиоды и звуковые сигналы отключаются
- Два встроенных реле для управления какой-либо нагрузкой
- Два выхода с открытым коллектором до 0,5А, я их использую для подключения светозвукового оповещателя (маячка с сиреной), но их можно использовать для управления нагрузкой — например внешними реле на DIN-рейке ( необходимо внесение изменений в код прошивки )
- При управлении нагрузкой легко реализуется подсчет времени работы за сутки, неделю, месяц, год.
Удаленная отладка и обновления:
- OTA (Over The Air) обновление прошивки без необходимости физического подключения к устройству
- Уведомления в Telegram об изменениях состояния устройства, в том числе с настраиваемой задержкой (это позволяет пропускать кратковременные сбои и отключения различных сервисов)
- При аварийной перезагрузке устройства в Telegram будет отправлена причина сбоя и стек вызовов, предшествующих сбою, что позволяет оперативно устранять ошибки
- Публикация на MQTT и OpenMon системной информации, в том числе количество свободной памяти — это позволяет оперативно устранять утечки памяти, если вы что-то сделали «не так»
- Публикация на MQTT списка задач с дополнительной информацией о стеке, что позволяет подобрать оптимальный размер стека для задач
Данная прошивка — отнюдь не конкурент ESP Easy, WiFi-IoT и прочим, «готовым» прошивкам. Это моя попытка совместить несовместимое — самый «низкоуровневый» для ESP32 framework (для обеспечения максимальной гибкости) и набор сервисов, которые на мой взгляд, должны быть в каждом устройстве «по умолчанию» — WiFi, MQTT, HTTPS и т.д. Если разобраться — все мои библиотеки — это только «обертки» для стандартных библиотек ESP-IDF, облегчающие работу. Поэтому в дальнейшем вы можете использовать весь функционал ESP-IDF без каких-либо ограничений.
Проект создан во VS Code и PlatformIO, в Arduino IDE он работать не будет. В заключение хотелось бы привести несколько скриншотов для понимания, что вы можете получить, используя данный проект.