В современном мире, где устройства, подключенные к сети, стали повсеместными, термин Интернет вещей (IoT) стал фактическим описанием для "устройства, подключенного к интернету". Хотя этот прекрасный акроним с заглавными буквами сам по себе замечателен, в "устройствах, подключенных к интернету", гораздо больше, чем люди осознают. В этой статье я хотел бы глубже погрузиться в один из наиболее распространенных протоколов, используемых в устройствах IoT: протокол передачи телеметрии MQ (MQTT). Мы кратко рассмотрим, что это такое, как это работает и что нового в нем по сравнению с другими используемыми технологиями. Также мы рассмотрим подробный пример использования устройства Arduino.
В типичной клиент-серверной схеме у нас есть поставщик (т.е. сами устройства), который отправляет данные с датчиков на сервер, и потребитель, который запрашивает просмотр этих данных с датчиков с сервера. MQTT не является исключением. Это легковесный протокол, используемый для общения между устройствами. Устройства обычно «публикуют» (т.е. отправляют) данные на «брокер» MQTT (или сервер), которые затем сохраняются для предоставления другим устройствам или веб-приложениям. Другое устройство или веб-приложение «подписывается» на этот набор данных (т.е. запрашивает данные) у брокера MQTT, а затем брокер MQTT доставляет эти данные им. Подумайте об этом действительно как о просто усовершенствованном веб-сервере с двумя основными исключениями:
По двум вышеупомянутым причинам MQTT стал очень популярным протоколом среди устройств IoT. Ранее люди использовали запросы HTTP POST/GET для достижения этой формы связи устройство-сервер, но это ограничивало их возможность использовать другие устройства связи, такие как Bluetooth или ZigBee. Поскольку MQTT агностичен в этом отношении, теперь мы можем иметь возможности передачи сообщений внутри сети на основе меш, используя MQTT без подключения к интернету
Существует множество способов начать работу с MQTT, включая разработку полного, конечного решения. Чтобы упростить задачу, мы будем использовать бесплатный сервис брокера MQTT, предоставляемый Adafruit в этом примере. Это позволит нам сосредоточиться только на разработке клиентской стороны. Для начала вам понадобится следующее:
Прежде чем начать, нам нужно сделать несколько вещей для настройки нашего рабочего пространства. Давайте сначала настроим наше оборудование. Я собираюсь использовать Arduino Uno и Arduino Ethernet Shield, подключенные к моей локальной сети.
Нам нужно установить Ethernet Shield поверх Arduino и подключить его к сети вот так:
После того как мы настроим наше оборудование, давайте откроем Arduino IDE и установим необходимые библиотеки. Откройте Arduino IDE и перейдите в Инструменты > Управление библиотеками…
Найдите библиотеку Adafruit MQTT и нажмите установить:
Вас также попросят установить зависимости библиотеки. Продолжайте и нажмите на «Установить все».
После установки библиотек поддержки вы можете открыть пример, перейдя в Файл > Примеры > Adafruit MQTT Library > mqtt_ethernet.
На этом этапе нам нужно сделать паузу и получить наши учетные данные из нашего аккаунта Adafruit IO. Войдите в Adafruit IO и кликните на "Мой ключ" в верхней части:
Теперь вернитесь к вашему примеру скетча Arduino mqtt_ethernet и заполните поля AIO_USERNAME и AIO_KEY, используя поля "Имя пользователя" и "Активный ключ", расположенные в вашем аккаунте Adafruit IO. Убедитесь, что ваше устройство подключено, а затем нажмите на Загрузить:
Чтобы просмотреть статус устройства (и убедиться, что оно подключено к брокеру MQTT), перейдите в Инструменты > Монитор порта. Вы должны увидеть вывод, который выглядит так:
На этом этапе мы подтвердили, что данные успешно отправляются на брокер MQTT. Чтобы посмотреть актуальные данные на сервере, давайте вернемся в наш аккаунт Adafruit IO и кликнем на "Каналы", затем кликнем на "фотоэлемент"
Теперь мы получаем живую передачу данных, которые наш Arduino отправляет на брокер MQTT. Мы также можем скачать исторические данные.
Поздравляем! Теперь вы настроили устройство с поддержкой MQTT и опубликовали свои данные на MQTT-брокере. Теперь перейдите к следующему шагу, создав свои собственные пользовательские датчики и публикуя данные на вашем MQTT-брокере.
В этой статье мы узнали, что такое MQTT, для чего он используется и как его реализовать на микроконтроллере. Мы также показали, как начать работу с бесплатной услугой MQTT-брокера и просмотреть данные на их сервере. Теперь вы должны чувствовать себя уверенно, начиная свой собственный скетч для Arduino на основе примера, который мы использовали для публикации данных с вашего датчика на MQTT-брокере и просмотра их в облаке.