MQTT

 

MQTT (Message Queue Telemetry Transport) — протокол упрощённой передачи сообщений. Используется для обмена сообщения между устройствами по принципу издатель-подписчик.

Введение:

ESP-01
Блок питания
Блок питания
Твердотельное реле
Датчик DHT22
Микрокомпьютер

В этой статье будет рассмотрен протокол MQTT и его применение в системе домашней автоматизации на примере управления по MQTT беспроводной розеткой, собранной на базе микроконтроллера ESP8266 и твердотельного реле Omron, через сервер умного дома «MajorDoMo» (на линуксе). Затем в систему будет добавлен датчик температуры и влажности DHT22, с которого мы будем получать данные по MQTT и управлять другими устройствами (wi-fi розеткой) в зависимости от полученных показателей. В практической части будут использованы следующие электронные компоненты: микрокомпьютер Raspberry Pi 2 или 3, Wi-Fi модуль ESP-01, твердотельное реле Omron G3MB-202P, модуль датчика температуры и влажности DHT22, а так же миниатюрный источник питания на 3,3 вольта.

 

Немного теории:

Современный мир нельзя представить без электронных устройств, они проникают в нашу жизнь все глубже. Автоматизация перестала быть прерогативой лишь предприятий — все шире получает распространение концепция Интернета вещей (англ. Internet of Things, IoT), в соответствии с которой устройства взаимодействуют друг с другом для выполнения тех или иных задач домашней автоматизации. А так как принципы домашней автоматизации пришли из промышленности, то от туда же пришли и протоколы взаимодействия между устройствами и как раз одним из таких промышленных протоколов, который можно и нужно использовать в системах умного дома — является протокол MQTT.  Впервые он появился в 1999 году, а спецификация MQTT 3.1.1 была стандартизирована консорциумом OASIS в 2014 году.

MQTT Это упрощенный сетевой протокол прикладного уровня, работающий поверх стека TCP/IP. Так же есть версия протокола MQTT-SN, предназначенная для работы со встраиваемыми беспроводными устройствами без поддержки TCP/IP (на базе Zigbee и т.п.). Основными преимуществами протокола являются:

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

Данная статья не преследует цель дать подробное определение и описание принципов работы протокола. Поэтому сразу переходим к практике.

Практика:

Наиболее простой задачей в домашних условиях является управление освещением или какими-либо бытовыми устройствами, например, посредством сервера умного дома, а так же получение показаний с различных датчиков. В простейшем случае это может быть Сервер умного дома MajorDoMo, установленный на микрокомпьютер Raspberry Pi и Wi-Fi реле (розетка) на базе модуля ESP-01 с блоком питания на базе ESP8266.

Настройка MQTT

Предположим, что у нас уже есть установленный на Raspbery Pi MajorDomo, если нет, то стоит обратится к документации размещенной на сайте. Вот, например, ссылка на образ и инструкцию по развертыванию на Raspberry Pi 2 или 3. После развертывания данного образа, все необходимое для работы с MQTT в MajorDoMo уже будет. В противном случае, необходимо установить брокер MQTT Mosquitto вручную. На линукс это делается при помощи одной лишь команды:

sudo apt-get install mosquitto

после чего необходимо перезагрузить сервер MajorDoMo (или только сервис). Затем через оснастку Маркет дополнений Панели управления, в разделе оборудование, найти и установить модуль MQTT.

Далее необходимо выполнить настройку модуля MQTT, указав путь подписки #.

На этом установка и настройка поддержки MQTT на сервере MajorDoMo закончена — можно переходить к прошивке микроконтроллера.

Прошиваем модуль ESP01

Для создания прошивки воспользуемся конструктором прошивок на сайте https://wifi-iot.com на котором можно просто отметив галками нужный функционал скомпилировать нужную прошивку. Часть функций бесплатны, но многие требуют оплаты. При чем, оплатив единовременно 110 российских рублей и активировав версию Pro мы получаем полный функционал для конкретно взятого устройства. Что касается протокола MQTT, то в бесплатной версии не получится по управлять устройствами а так же период обновления равен 10 минутам. В общем нам не подходит, нужна версия Pro. Для любителей халявы, можно отметить, что наверняка в интернете можно найти бесплатные прошивки с нужным функционалом. Итак по порядку:

  • Регистрируемся на сайте wifi-iot.com
  • В разделе ESP8266 отмечаем следующие функции:
    • Сервисы — MQTT клиент — собственно сам клиент;
    • Системные — Web KEY (кнопки в веб-интерфейсе модуля ESP8266)
    • Системные — GPIO (работа со входами и выходами модуля)
    • Системные — Обновление OTA и Auto OTA (перепрошивка модуля по воздуху)
    • Системные — Работа с прерываниями (возможность подключения физических кнопок)
    • Системные — Настройки по умолчанию (возможность сразу задать настройки Wi-Fi).
  • Сохраняем профиль как новый, присвоив ему понятное имя.
  • Нажимаем компилировать и после окончания процесса скачиваем получившийся файл.

Теперь надо прошить модуль. Для этого понадобятся:

  • Сам модуль ESP01
  • USB-UART адаптер с поддержкой напряжения 3,3в. (возможно понадобится драйвер).
  • Внешний блок питания на 3,3в или на 5в с понижающим преобразователем.
  • ПК и программа NodeMCU Flasher
  • Файл blank1m.bin рекомендуется перед прошивкой зашить бланк.
  • И собственно файл прошивки скачанный после компиляции со страницы конструктора.

Питание ESP-01 только от внешнего источника 3,3В (от USB через UART адаптер питания не хватит). Если попробовать запитать от +5В — модуль гарантировано сгорит. Для прошивки модуль подключается следующим образом:

После установки драйвера USB-UART адаптера NODEMCU Flasher автоматически выставит нужный порт.

Внимание! Для перевода модуля в режим прошивки, в момент подачи питания на модуль вывод GPIO0 должен быть замкнут на землю. После успешной прошивки необходимо данную цепь разомкнуть.

Теперь, для исключения разных возможных глюков, необходимо зашить файл blank1m.bin. Для начала идем на вкладку Advanced и выставляем Flash Size — 1MByte.

На вкладке Config указываем путь к нужному файлу:

И на вкладке Operation наконец нажимаем кнопку Flash:

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

Первый запуск и настройка ESP8266

После включения, если при конструировании прошивки в разделе «Настройки по умолчанию» были указаны правильные данные, то ESP8266 подключится к нужной точке доступа, а полученный модулем IP-адрес можно будет найти в настройках маршрутизатора. Теперь можно войти в веб интерфейс модуля, введя в адресную строку браузера IP-адрес, полученный ESP8266.

Теперь самое время за 110RUR приобрести лицензию и активировать Pro mode, после чего можно приступать к настройке, которая будет заключаться в активации вывода GPIO 02 и прописывании адреса MQTT брокера (наш сервер MajorDoMo). Итак идем на вкладку GPIO:

И выбираем для 2 GPIO режим OUTPUT INVERT (это для того, что бы реле управлялось подачей низкого уровня, т.к. мы будем управлять твердотельным реле подключенным напрямую). Если нужно, что бы модуль после перебоев с питанием помнил свое предыдущее состояние — ставим галку Flash. После нажатия кнопки Set, настройки запомнятся. Пункт ниже — Interrupt, необходим для возможности подключения физических кнопок. Пока его не касаемся. После выхода из меню, на главной странице появится кнопка с номером GPIO, которой можно управлять данным выводом микроконтроллера. 

Теперь пропишем адрес MQTT брокера. Идем в меню Servers, отмечаем чекбокс Enable send MQTT и период обновления равным, скажем секундам 10. Затем прописываем адрес сервера MajorDoMo и нажимаем кнопку Set.

Управляем Wi-Fi розеткой (схема включения)

Итак, модуль прошит и настроен, все готово к сборке. Соединяем по следующей схеме:

Продолжение следует…

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

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