Перейти к содержимому

Термостат на ESP32 с удаленным управлением. Часть 1. Вводная

Добрый день, уважаемый читатель!

Начиная с этой статьи я начну рассказывать, как создать готовое устройство своими руками на базе ESP32 и ESP-IDF. Без Arduino, регистрации и СМС. А необходимые теоретические сведения буду выкладывать параллельно, по мере необходимости. Материала очень много, поэтому статей будет несколько. Перечень всех статей вы найдете в конце данной статьи.

Пример собранного готового устройства

В итоге соберем и запрограммируем устройство, назовём его условно “Термостат + ОПС”, которое обладает следующим функционалом:

  • дистанционный мониторинг температуры в доме, на улице и теплоносителя отопительного котла (список сенсоров этим не ограничивается, вы можете добавить ещё) с контролем допустимых диапазонов и уведомлениями о выходе за их пределы
  • управление отопительным котлом – то есть поддержание заданной температуры в доме на заданном уровне
  • автономная охранно-пожарная сигнализация с оповещением в Telegram и возможностью подключения проводных и беспроводных (433 MHz) датчиков дверей, окон, движения, дыма, протечки воды, утечки газа, угарного газа и т.д.
  • возможность автоматического управления нагрузкой посредством реле – например это может быть управление освещением по датчикам движения или управление краном с электроприводом для перекрытия водопровода при аварии

 


В начале я предоставлю на GitHub готовый “стартовый” проект с описанной выше логикой, а в дальнейшем вы сможете доработать “прикладную” логику под любые свои сценарии – алгоритмы автоматизации вы можете придумать свои, возможности ESP-IDF позволяют вам создать любые, самые сложные сценарии. Предложенное устройство вы можете рассматривать лишь как стартовый вариант для творчества.

Прошивка не имеет web-интерфейса, все настройки осуществляются через файл конфигурации проекта или в run-time через mqtt. Просто не вижу особого смысла тратить на web-интерфейс время, силы и байты.

Для увеличения нажмите на картинку

В одной статье всё сразу рассказать не получится, поэтому будет сразу серия статей:

  1. В этой я опишу планируемый функционал и возможности, своего рода это можно считать анонсом технических возможностей
  2. В следующей статье будут приведены список необходимых компонентов, схема соединений и печатная плата (устройство мелкосерийное, мной собрано уже несколько экземпляров), но его можно собрать и на макетке для пайки
  3. Затем обсудим, как создать прошивку на основе готового проекта с GitHub, не вникая во внутренности прошивки – просто настроив файл конфигурации под ваши параметры. Для начала это будет только телеметрия – удаленный мониторинг температуры, влажности и чего-нибудь ещё (по желанию).
  4. Установим и настроим для использования с устройством один из клиентов MQTT для Android. Никаких приложений для смартфона самому создавать не придется.
  5. После этого добавим в устройство логику, позволяющий ему работать в качестве термостата для управления отопительным котлом и поддержания температуры.
  6. При желании в устройство можно будет достаточно легко добавить функции охранно-пожарной сигнализации на пять проводных зон и неограниченное количество беспроводных, используя дешевые сенсоры 433 MHz
  7. Обсудим, как задействовать сенсоры ОПС (если вы решите их подключить) для управления освещением или иной домашней автоматизации.

Возможности прошивки “из коробки”

Предлагаемый вариант прошивки позволяет получить следующий функционал практически без необходимости программирования (вам потребуется только изменить настройки в файле конфигурации проекта):

Подключение к WiFi:

  • Подключение к нескольким 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 клиент:

  • MQTT – это основной канал управления устройством. Но при использовании внешних сервисов типа Telegram->MQTT возможно управление непосредственно из Telegram
  • Поддержка двух MQTT-брокеров – основного и резервного (например локального и облачного).
  • Публикация данных с сенсоров вместе с временем измерения и со всеми экстремумами в одном топике в JSON-виде. Впрочем, можно легко перенастроить устройство на публикацию данных с сенсоров в простом виде
  • Возможность передачи данных с сенсоров на другие устройства через локальный брокер (необходимо внесение изменений в код) или получение данных с других устройств

Облачные сервисы

Охранно-пожарная сигнализация:

  • Гибкая возможность создания охранных зон с разными реакциями (необходимо внесение изменений в код прошивки)
  • Переключение режимов охраны через 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 он работать не будет. В заключение хотелось бы привести несколько скриншотов для понимания, что вы можете получить, используя данный проект.


Структура топиков

Устройство генерирует топики автоматически, для этого необходимо указать (в файле конфигурации):

  • локацию – расположение устройства, например village, office или адрес
  • название устройства – например home, garage, hood и т.д.
  • топики для сенсоров и функциональных частей

Вы можете использовать любой удобный вам клиент Mqtt с поддержкой JSON, я пользуюсь Mqtt Dash.

 


Уведомления

Чтобы не заморачиваться с push-уведомлениями, я использую уведомления в telegram. Оказалось, это очень удобно, нет необходимости отправлять одно и то же уведомление нескольким людям. Прошивка поддерживает до 4 каналов:

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

Пример настройки telegram-бота

Не обязательно использовать все 4 канала разными, можно объединить их в один или два

 


Сохранение графиков

Как я уже писал, прошивка позволяет отправлять данные на ThingSpeak, Народный мониторинг, Open Monitoring – вы можете использовать любое сочетание сервисов, один или несколько.

Пример накопления служебных данных (ping) на Open Monitoring


 


Удаленное обновление и отладка

Устройство поддерживает обновление прошивки “по воздуху”, через хостинг. Нет необходимости физического подключения к устройству, но требуется прямая ссылка на файл прошивки, которую может скачать устройство – файлообменники типа “Яндекс Диска”, увы, не подходят.

При перезагрузке в случае сбоя устройство пришлет трассировку стека на момент сбоя. Это позволяет найти причину ошибки и устранить её.

 


На этом пока всё, в следующей статье поговорим по аппаратной части нашего устройства.

 

Все статьи цикла “Термостат и ОПС”:

Прошивка K12 для ESP32 и ESP-IDF:

Дополнительные статьи, которые применимы к любым устройствам, запрограммированным с помощью тех же самых библиотек.

 

💠 Полный архив статей вы найдете здесь


Пожалуйста, оцените статью:
[ 5 из 5, всего 2 оценок ]

3 комментария для “Термостат на ESP32 с удаленным управлением. Часть 1. Вводная”

  1. Николай

    Привет.
    “Удаленное обновление и отладка” – Вы расказали, что можно обновлять устройство по воздуху, но как это это делается в Вашем устройстве не сказано. Я имею ввиду какие команды надо передать, в какой топик с какими параметрами? Да и как управлять устройством через MQTT тоже ничего не сказано.
    Немогли бы Вы в крации рассказать, как выполняется управление устройством, как обновлять?
    Спасибо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *