Концепцию современного высокоинтеллектуального оборудования, будь то различные датчики, управляемые агрегаты, устройства, входящие в состав «умного» дома или подобные таким, невозможно представить без коммуникации между ними.
Практический обмен информацией в единой сети осуществляется в пределах понятия интернета вещей, или Internet of Things, IoT. Этот термин объединяет все физические приборы, в которых присутствуют технологические части для взаимодействия с внешней средой и между собой. Сама же связь реализована передачей данных по специальным протоколам разного уровня, самые известные из которых – TCP\IP, MQTT, ZigBee, WirelessHart, MiWi, 6LoWPAN, LPWAN и другие.
Коммуникации в IoT
Самый лучший пример подобной связи – это контроль температуры в здании. Термодатчик, находящийся в помещении и подключенный к IoT, отправляет свои показания с определенной периодичностью на центральный пункт обмена (сервер, хаб, брокер – названий много, суть одна). Когда температура опускается ниже установленного предела, управляющая точка, пользуясь каналами связи, выдает команду общему обогревателю (отопительной системе или тенам) на включение.
Когда датчик, контролирующий температуру воздуха, отправит показания о нормализации окружающей среды, то сервер отключит отопление. В случае слишком жаркой погоды, а значит, и при высоких цифрах сигнализатора – будет запущена вентиляция или кондиционер.
Независимо от среды передачи информации, используемой в интернете вещей, будь то радио, WIFI, 3G\LTE коммуникации или даже проводная связь – для обмена данными применяются различные протоколы. Они могут быть как низкого физического уровня, так и прикладного – работающие поверх них. Есть спецификации передачи данных, у которых присутствуют реализации обоих вариантов. Один из таких, относящийся к последнему типу, — MQTT (Message Queue Telemetry Transport), работающий поверх других, и его младший собрат MQTT-SN (MQTT for Sensor Networks), позволяющий осуществлять коммуникацию на физическом уровне.
Разработан он специалистами IBM в 1999 году, для внутреннего использования в соединении устройств, принадлежащих и созданных корпорацией. С 2011 исходные коды и структурная документация переданы группе компаний Eclipse, в которой было продолжено расширение и развитие протокола. С 2016 он прошел стандартизацию международной комиссией и зарегистрирован как ISO\IEC20922.
Структура протокола
MQTT – открытый протокол, с малым размером передаваемых сообщений. Его особенность – механизм подписок (subscribe) для работы всех устройств сети. Прямой коммуникации в ней не существует – весь обмен идет через аппаратный центр, в терминах системы – «брокер», который принимает и распространяет полученные сообщения, пользуясь принципами, заложенными еще в сетях «FIDO». То есть, «станция» (датчик, контроллер включения\выключения) подписана на «узел» – брокер в понятиях MQTT. Периодически она подключается к центральной точке сети и создает на ней темы (работает, как «издатель») или выгружает себе те, на которые подписана – что сильно напоминает файл-эхи или в понятиях интернета – конференции NNTP.
Простейшая схема взаимодействия между издателем, подписчиком и брокером выглядит так:
Физически группы подписок на сервере узлов – брокере – представлены в текстовом виде (используется кодировка utf8). Они размечены по уровням веток логического дерева, разделяемых символом слэша «/».
То есть, для рис.1 информация от издателей «кондиционер» и «датчик» будет храниться в таком виде:
/work/room_1/atmosphere/sensor_1/temperature – датчик температуры 1 в комнате 1,
/work/room_1/atmosphere/sensor_2/temperature – датчик температуры 2 в комнате 1,
/work/room_1/atmosphere/air_conditioning/mode – режим кондиционера в комнате 1.
Получение информации для подписчиков может производиться как опросом поштучно всех показателей, так и затребованием данных при помощи управляющих символов. Это «*» для одного уровня и «#» в случае многих.
Скажем, если интересуют показания нагрева воздуха по всем датчикам помещения, то подписчик запрашивает ее через «/work/room_1/atmosphere/*/temperature». При необходимости информации со всех сигнальных устройств (режим кондиционера, показания термоэлементов) здания – используется синтаксис запроса «/work/#».
Оборудование

В качестве брокера может использоваться любой микрокомпьютер, лишь бы его возможностей было достаточно для поднятия сервера TCP\IP html и понимания протоколов MQTT. Так как подпрограммы работы с сетью унифицированы с возможностями ОС linux, то будет достаточно для этого и Raspberry PI.
Что касается датчиков и контроллеров (издателей и подписчиков, в терминологии сети), работающих через MQTT, то их представлено на рынке просто безмерное количество. Это приборы на основе микросхем RAK473, RAK476, SIM7020C, ESP8266 и других.
Их характерная черта – наличие модулей (зачастую WIFI) связи и самой управляющей логики с дополнительными физическими каналами. Причем установку параметров, перепрограммирование и остальные сервисные функции по ним можно осуществлять через web-интерфейс, подключаясь к уже прошитому чипу.
Преимущества
Сеть MQTT (Message Queue Telemetry Transport), из-за свойств своей структуры, обладает рядом преимуществ перед сетями других видов для IoT:
- Возможность использовать любые формы физической связи между станциями и узлами.
- Качество и скорость соединения не имеет особого значения – спешить при передаче некуда, а так как она периодична – даже регулярная потеря контакта не влияет на доставку информации. Сообщения от «издателя» для «подписчика» будут ждать его на «брокере» до момента их выгрузки.
- Периодичность загрузки\выгрузки информации дает возможность работать асинхронно. То есть не находиться постоянно в единой сети для обмена.
- Маленькие размеры пакетов.
- Высокая скорость, как обмена, так и обработки, которая практически не зависит от свойств самого канала.
- Использование TCPIP – дает возможность распределения трафика по приоритетам обработки информации, отправляемой физическими устройствами брокера, что заложено в QoS. Эта технология предназначена в первую очередь гарантированно обеспечить контакт между узлами сети, даже если возникли своеобразные «заторы».
- Конфигурация и адресация устройств динамическая.
- Способен работать через шлюзы NAT, осуществляющие преобразование сетевого адреса.

Отдельно стоит упомянуть защиту передаваемой информации, характерную для этой сети:
- идентификация через логин\пароль;
- соединение с сервером через механизмы TLS и SSL;
- контроль возможности подключения устройства через идентификатор или MAC-адрес.
Применение
Структура сети MQTT дает возможность использовать ее для соединения между множеством устройств и аппаратуры. Это и контроллеры промышленного и домашнего оборудования, системы умных домов, опрос различных датчиков, да и всего того, что входит в понятие интернета вещей.
Кроме того, этот протокол позволяет использовать для контроля и наблюдения за устройствами через глобальную сеть, облачные технологии и клиенты для различных операционных систем, включая Android, Linux, Windows, iOS. Собственно, на любых, способных запустить современный браузер.
Есть у протокола и ограничения. Он не предназначен для коммуникации устройств в реальном времени (присутствует задержка в обмене межу брокером с подписчиком). Кроме того, передача мультимедийной информации – аудио и видео – ограничена размерами единовременных малых пакетов. Но для таких вещей существуют специализированные виды связи.
Пример проекта с управлением по MQTT
Понять принципы работы сети MQTT поможет пример создания схемы управления розеткой 220В с использованием сети WIFI.
Сначала нужно настроить сам узловой компьютер. Для упрощения процесса будет использоваться любой Raspberry PI с установкой на него комплекса ПО MajorDomo. Подробная инструкция и образы для загрузки размещены на сайте http://majordomo.smartliving.ru/.
У большого ПК, управляемого другими версиями этой ОС, установка подобного комплекса проходит сложнее.
В системе linux, которая установлена на этом микро-ПК, необходимо набрать команду в консоли:
sudo apt-get install mosquitto
Затем в панели управления Raspbian в «Маркет дополнений» найти mqtt и установить его:
Произвести конфигурацию (панель управления/mqtt):
Собственно, для тестового проекта – эта настройка брокера достаточна. Нужно перегрузить Raspberry PI, чтобы изменения вступили в силу (ну или с помощью консоли перезапустить службу mosquitto).
Следующий пункт – переход к работе с микроконтроллером. Будет описано устройство с минимумом деталей. Это реле с управлением по WIFI и возможностью размыкания цепи розетки 220В. В качестве самого прерывателя используется устройство Omron G3MB-202P. Его срабатывание контролируется модулем WIFI ESP-01 на базе логики ESP8266. Питаться сборка будет от источника в 3.3В. Схема:
Но перед тем как ее собирать, нужно контроллер запрограммировать алгоритмами работы с MQTT, для чего используется прошивка ESP8266, которая выкачивается с wifi-iot.com. На сайте проходят регистрацию, в разделе с названием логики контроллера выбирают элементы:
- в разделе «Сервис» – «MQTT клиент»;
- в разделе «Системные» – «Web key», «GPIO», «ОТА update», «Auto OTA», «Interrupt handling», «MajorDomo»;
- для задания параметров по умолчанию каждого компонента нужно нажимать на символ шестеренки рядом ним.
После чего сохранить выбранные настройки в профиле пользователя и кликнуть «скомпилировать». Станет доступна ссылка на результат, который необходимо скачать себе на компьютер.
Собственно, само программирование доступно путем применения NodeMCU Flasher и переходника USB-UART.

При подаче питания на уже соединенное с компьютером устройство, нужно держать зажатым T1. Потом отпустить. Это переведет ESP8266 в режим прошивки. Далее через NodeMCU программа помещается в микросхему. Модуль ESP-01 после окончания этого процесса монтируется с первоначальной схемой и подключается к питанию.
Собственно, далее настраивается сама MQTT в нем – при первом включении устройства в эфире возникнет точка доступа «WiFi-IoT», подключившись к которой через открытие браузера можно настроить все параметры модуля. Более подробное описание находится на сайте wifi-iot.com.