- Что такое протокол MQTT?
- Как работает MQTT?
- Брокер Eclipse Mosquitto
- Необходимые компоненты
- Тестовая схема Eclipse MQTT - Схема
- Программирование ESP8266 для установления связи с брокером
- Тестирование MQTT с ESP8266 с использованием Arduino
За последние несколько лет устройства IoT (Интернет вещей) стали неотъемлемой частью нашей повседневной жизни. От умных домов, умных лампочек до умной техники; Создатели и разработчики используют эту технологию для создания сети подключенных устройств, которая делает нашу повседневную жизнь немного интереснее. Все это стало возможным благодаря простоте общения. Существует множество возможных способов связи между устройствами, но в коммерческих продуктах и продуктах для хобби обычно используется один протокол - передача телеметрии очереди сообщений (MQTT). Ранее мы создали FM-радио с голосовым управлением с использованием Arduino и Google Assistant, которое использует MQTT для связи с платой NodeMCU. Проверьте, если это звучит для вас интересно.
В этом проекте мы будем использовать бесплатный и популярный брокер Eclipse MQTT и узнаем, как подключить устройство IoT (в нашем случае это модуль NodeMCU) к брокеру MQTT и передавать данные между брокером MQTT и NodeMCU.
Что такое протокол MQTT?
Прежде чем мы продолжим, лучше иметь четкое представление о протоколе MQTT (Message Queuing Telemetry Transport). Это легкий протокол обмена сообщениями, который использует метод публикации / подписки и переводит сообщения между несколькими устройствами. Используя протокол MQTT, мы также можем отправлять / получать данные и управлять различными устройствами вывода, например считывать данные датчиков и т. Д. Он разработан на основе TCP, поэтому он быстрее, чем аналогичные протоколы, такие как HTTP. Помимо этого, он имеет много других преимуществ по сравнению с другими протоколами, например, его очень легкий вес, поэтому он не потребляет лишнюю память, он может работать с очень меньшей пропускной способностью сети, а также имеет встроенный надежный протокол безопасности. Эти особенности делают его пригодным для многих приложений.
Как работает MQTT?
Чтобы понять работу протокола MQTT, нам просто нужно понять три основных вещи; диаграмма выше показывает это. Кроме того, мы объяснили это ниже в статье.
Клиент MQTT:
MQTT клиент представляет собой любое устройство (это может быть микроконтроллер или сервер), который работает функцию и обменивается MQTT с центральным сервером, который известен как « брокер ». Брокер обрабатывает обмен данными между подключенными клиентами.
Издатель MQTT:
Когда клиент хочет отправить какую-либо информацию, он известен как «Издатель». Издатель опубликует информацию по определенной теме. « Тема » - это путь, по которому мы можем публиковать / подписываться на сообщения. Затем брокер отправляет информацию, опубликованную пользователем, клиентам (также известным как подписчик), которые подписались на эту конкретную тему.
Подписчик MQTT:
MQTT Абонент подписывается тем на MQTT брокера, чтобы читать сообщения, отправленные брокером.
Брокер Eclipse Mosquitto
Eclipse Mosquitto - это брокер MQTT с открытым исходным кодом, который имеет небольшой вес и подходит для использования на устройствах Интернета вещей для связи. Протокол MQTT обеспечивает легкий метод передачи информации с использованием модели публикации / подписки. Если вы хотите узнать больше об этой теме, посетите официальный сайт комаров.
Настройка брокера Eclipse Mosquitto:
Чтобы установить связь с брокером, нам нужно сначала его настроить. В этом проекте приложение Android используется для публикации и подписки на информацию с помощью брокера. Следующие шаги дадут вам лучшее представление о процессе установки.
Шаг 1:
Сначала загрузите любое приложение «MQTT client», доступное в Google Play Store / App Store, и установите его. В этом проекте используется приложение под названием «MQTT client», которое выглядит как изображение, показанное ниже.
Шаг 2:
Нажмите на знак «+», чтобы отобразить дополнительные параметры в приложении, куда мы собираемся добавить нового брокера. При нажатии кнопки появляется новый экран, как показано ниже.
Шаг 3:
После этого реквизиты брокера необходимо заполнить в обязательном поле. Сначала нажмите на опцию «Включено», отображаемую в приложении. В этом проекте используется брокер Eclipse MQTT, детали, которые необходимо заполнить, приведены ниже:
Псевдоним: Дайте имя по вашему выбору
Хост: mqtt.eclipse.org
Порт: 1883
Идентификатор клиента: укажите идентификатор вашего предпочтения
Вышеуказанные данные необходимо заполнить в соответствующих полях. Все остальные поля не обязательны, их можно оставить пустыми. После успешного завершения нажмите кнопку «Сохранить», чтобы сохранить информацию о брокере.
После этого процесс установки приложения для Android завершен, и теперь мы можем перейти к аппаратной части вещей.
Необходимые компоненты
Полный список необходимых деталей описан ниже. Поскольку эта схема проста, вы можете найти все необходимые детали в местном магазине товаров для хобби.
- NodeMCU
- СВЕТОДИОД
- Макетная плата
- Соединительные провода
- Кабель для программирования
Тестовая схема Eclipse MQTT - Схема
Принципиальная схема проекта Basic MQTT представлена ниже:
Программирование ESP8266 для установления связи с брокером
Простой код Arduino заботится обо всех необходимых коммуникациях между брокером MQTT и NodeMCU. В этом разделе мы подробно узнаем, как работает эта функция.
Настройте Arduino IDE и загрузите код:
Если вы загружаете код в NodeMCU в первый раз, вам необходимо сначала настроить Arduino IDE. Для этого просто следуйте простой инструкции, приведенной ниже.
Сначала откройте Arduino IDE, затем перейдите в Файл–> Настройки–> Настройки .
Затем скопируйте приведенный ниже URL-адрес и вставьте его в поле «Дополнительный URL - адрес Board Manager » и нажмите «ОК». Вы можете проверить изображение ниже, чтобы узнать, как мы это сделали.
Ссылка:
Затем перейдите в Инструменты> Доска> Диспетчер плат . В окне Board's Manager введите ESP 8266 в поле поиска и нажмите Enter. Затем выберите последнюю версию из раскрывающегося списка и нажмите «Установить». Изображение ниже даст вам четкое представление.
Наконец, как только установка будет завершена, перейдите в Инструменты -> Плата -> и выберите NodeMCU 1.0 (модуль ESP-12E). Теперь вы можете программировать NodeMCU с помощью Arduino IDE. Когда мы закончили настройку IDE Arduino, теперь мы можем загрузить полный код. Но сначала прочтите краткое объяснение всего кода.
Во-первых, мы включили «ESP8266WiFi.h» для использования ESP8266 и «PubSubClient.h» для MQTT.
Вы можете найти библиотеку ESP8266, предварительно собранную внутри библиотеки Arduino, но вам необходимо загрузить библиотеку PubSubClient из связанного с ней репозитория GitHub.
#включают
Затем определите сетевые учетные данные, такие как имя пользователя и пароль Wi-Fi. Замените свои учетные данные вместо «admin» и «12345678» соответственно.
const char * ssid = "админ"; const char * пароль = "12345678";
Далее нам нужно настроить сервер MQTT. В этом проекте мы использовали сервер Eclipse MQTT, поэтому адрес сервера указан как «mqtt.eclipse.org». Но если вы планируете использовать любой другой сервер, например Mosquitto, Adafruit, вы можете заменить его на свой адрес и номер порта.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Затем создаются экземпляры для классов WiFiClient и PubSubClient , которые будут использоваться во всей программе.
WiFiClient espClient; Клиент PubSubClient (espClient);
В разделе setup () мы сначала вызываем WiFi.begin () , вызов этого метода подключит ESP к предпочитаемому вами HotSpot.
WiFi.begin (ssid, пароль);
Затем мы проверяем успешное сетевое соединение с помощью метода WiFi.status () . После успешного подключения на Serial Monitor выводится сообщение с SSID подключенной сети.
в то время как (WiFi.status ()! = WL_CONNECTED) {задержка (500); Serial.println («Подключение к WiFi..»); } Serial.print («Подключено к WiFi:»); Serial.println (WiFi.SSID ());
Теперь нам нужно создать брокера. Для этого мы использовали метод setServer ; этот метод принимает два аргумента, которые мы заранее определили. Теперь, если мы хотим получать сообщения от сервера, нам нужно создать функцию обратного вызова. Для этого мы используем метод setCallback (обратный вызов) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Теперь мы использовали функцию подключения (clientID) для подключения к клиенту ESP8266. Здесь clientID - это имя клиента, и оно должно быть уникальным. Если он подключен, то внутри монитора последовательного порта может отображаться сообщение об успешном выполнении.
if (client.connect ("ESP8266")) {Serial.println ("connected"); } else {Serial.print ("сбой с состоянием") Serial.println (client.state ()); задержка (2000); }
Затем мы вызываем client.subscribe () , встроенную функцию MQTT, которая используется для подписки на конкретную тему. В этом проекте мы использовали « esp / test » в качестве имени подписчика.
client.subscribe ("esp / test");
Теперь вызывается функция MQTTcallback, чтобы проверить, доступна ли обновленная информация. Если доступны новые данные, эта функция обрабатывает полученные данные и печатает сообщение в последовательном мониторе с исходным сообщением и названием темы, в которой было получено сообщение.
Затем мы конвертируем сообщения в строку, чтобы ее можно было сравнивать и проверять на наличие каких-либо запускающих действий. В этом проекте светодиод включается / выключается с помощью команд MQTT, как показано в приведенном ниже коде.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (сообщение); if (message == "on") {digitalWrite (LED, HIGH); }
Напоследок опубликовать информацию по теме. Используется функция client.publish () . В этом проекте проверяется статус кнопки, если кнопка нажата, то сообщение публикуется в теме « esp / test1 », как показано ниже.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Привет от ESP8266"); } else; client.loop ();
Тестирование MQTT с ESP8266 с использованием Arduino
Для нашего финального тестирования мы собираемся использовать приложение Android, которое мы настроили ранее.
Откройте клиентское приложение MQTT и убедитесь, что на вашем мобильном телефоне есть активное подключение к Интернету. Кроме того, точка доступа, к которой подключен NodeMCU, должна иметь активное подключение к Интернету. Как только все будет подключено к Интернету, мы отправим строку «Hello from ESP8266» из модуля ESP, которая будет отражена в приложении Android, и мы получим уведомление. Затем мы отправим строку из приложения Android, которая включит светодиод, подключенный к плате MCU узла ESP8266.
Шаг-1: (Подпишитесь на тему):
Нажмите на опцию Saved MQTT в приложении, которую мы настроили ранее. Появится всплывающий экран с предложением «Подписаться на тему». Ранее мы настроили тему как « esp / test1 ». Итак, в приложении для Android мы напишем « esp / test1 ». Нажмите «Подписаться». Откроется экран, показанный ниже, на котором будет написано «Сообщение не получено» из конкретной темы.
Теперь нажмите кнопку «Подключено», которая подключена к nodeMCU. Теперь, согласно нашему коду, сообщение « Привет от ESP8266 » будет опубликовано в теме, и на экране появится уведомление с полученным сообщением, как показано ниже.
Шаг 2: опубликуйте в теме:
Теперь, чтобы опубликовать в теме, нажмите кнопку СТРЕЛКА ВВЕРХ в приложении, и откроется экран, как показано ниже.
Теперь в поле «Тема» напишите « esp / test », а в поле сообщения напишите « on » или « off » для включения и выключения светодиода соответственно. Например, если в теме опубликовано «on», тогда светодиод будет включен, а если «off» опубликовано в теме, то светодиод будет выключен.
Надеюсь, вам понравилась статья и вы узнали что-то новое. Если у вас есть какие-либо вопросы относительно этой статьи, пожалуйста, оставьте комментарий ниже или вы можете использовать наш форум.