- Що таке протокол 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 Телеметрія транспорту) протоколу. Це полегшений протокол обміну повідомленнями, який використовує метод публікації / передплати та перекладає повідомлення між кількома пристроями. Використовуючи протокол MQTT, ми також можемо надсилати / отримувати дані та керувати різними пристроями виводу, наприклад, даними зчитування даних тощо. Він розроблений поверх TCP, саме тому він швидший за подібні протоколи, такі як HTTP. Окрім цього, він має багато інших переваг перед іншими протоколами, як його дуже легкий, тому він не споживає зайвої пам'яті, він може працювати з дуже меншою пропускною здатністю мережі, крім того, у нього є вбудований надійний протокол безпеки. Ці функції роблять його придатним для багатьох застосувань.
Як працює MQTT?
Для того, щоб зрозуміти роботу протоколу MQTT, нам просто потрібно зрозуміти три основні речі; наведена вище схема показує це. Крім того, ми пояснили це нижче в статті.
Клієнт MQTT:
Клієнт MQTT - це будь-який пристрій (це може бути мікроконтролер або сервер), який запускає функції MQTT і взаємодіє з центральним сервером, який відомий як " брокер ". Брокер здійснює передачу даних між підключеними клієнтами.
Видавець MQTT:
Коли клієнт хоче надіслати будь-яку інформацію, він називається "Видавець". Видавець опублікує інформацію з певної теми. “ Тема ” - це шлях, за допомогою якого ми можемо публікувати / підписувати повідомлення. Потім брокер надсилає інформацію, опубліковану користувачем, клієнтам (також відомим як Абонент), які підписалися на цю конкретну тему.
Абонент MQTT:
MQTT Абонент підписується тим на MQTT брокера, щоб читати повідомлення, відправлені брокером.
Брокер Eclipse Mosquitto
Eclipse Mosquitto - брокер MQTT з відкритим кодом, який є легким і придатним для використання на пристроях IoT для зв'язку. Протокол 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 - Схема
Схема принципового проекту MQTT наведена нижче:
Програмування ESP8266 для встановлення зв'язку з брокером
Простий код Arduino дбає про всі необхідні комунікації між брокером MQTT та NodeMCU. У цьому розділі ми дізнаємось, як ця функціональність працює докладно.
Налаштуйте IDE Arduino та завантажте код:
Якщо ви завантажуєте код до NodeMCU вперше, вам потрібно спочатку налаштувати IDE Arduino. Для цього просто дотримуйтесь простих інструкцій, наведених нижче.
Спочатку відкрийте Arduino IDE, а потім перейдіть до Файл–> Налаштування–> Налаштування .
Далі скопіюйте вказану нижче URL-адресу та вставте її в поле «Додаткова URL-адреса диспетчера дощок » та натисніть «Ok». Ви можете перевірити зображення нижче, щоб дізнатися, як ми це зробили.
Посилання:
Далі перейдіть до Інструменти> Дошка> Менеджер дошок . У вікні Менеджера дошки введіть 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. Замініть свої облікові дані замість “адмін” та “12345678” відповідно.
const char * ssid = "адміністратор"; const char * password = "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 () . Після успішного підключення на послідовному моніторі надруковується повідомлення з ідентифікатором SSID підключеної мережі.
while (WiFi.status ()! = WL_CONNECTED) {затримка (500); Serial.println ("Підключення до WiFi.."); } Serial.print ("Підключено до WiFi:"); Serial.println (WiFi.SSID ());
Тепер нам потрібно створити брокера. Для цього ми використали метод setServer ; цей метод бере два аргументи, які ми визначили раніше. Тепер, якщо ми хочемо отримувати повідомлення від сервера, нам потрібно створити функцію зворотного дзвінка. Для цього ми використовуємо метод setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Тепер ми використали функцію підключення (clientID) для підключення до клієнта ESP8266. Тут clientID - це ім'я клієнта, і воно повинно бути унікальним. Якщо він підключений, то повідомлення про успіх може відображатися всередині послідовного монітора.
якщо (client.connect ("ESP8266")) {Serial.println ("підключений"); } 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", "Hello from ESP8266"); } ще; client.loop ();
Тестування MQTT за допомогою ESP8266 за допомогою Arduino
Для нашого остаточного тестування ми будемо використовувати додаток Android, який ми створили раніше.
Відкрийте клієнтську програму MQTT і переконайтесь, що ваш мобільний телефон має активне підключення до Інтернету. Крім того, точка доступу, до якої підключений NodeMCU, повинна мати активне підключення до Інтернету. Як тільки все буде підключено до Інтернету, ми надішлемо рядок “Привіт від ESP8266” з модуля ESP, який буде відображено в додатку Android, і ми отримаємо сповіщення. Далі ми надішлемо рядок із програми Android, яка ввімкне світлодіод, підключений до плати MCU вузла ESP8266.
Крок 1: (Підписатися на тему):
Клацніть на опцію Збережений MQTT у програмі, яку ми налаштували раніше. Він відкриє екран, де з’явиться запит «Підписатися на тему». Раніше ми налаштували тему як “ esp / test1 ”. Отже, в додатку для Android ми напишемо “ esp / test1 ”. Натисніть "Підписатися", і перед цим ви побачите екран, як показано нижче, де він буде написаний як "Не надійшло повідомлення" з певної теми.
Тепер натисніть кнопку "Підключено", яка підключена до nodeMCU. Тепер, згідно з нашим кодом, повідомлення “ Привіт від ESP8266 ” буде опубліковане в Темі, і на екрані з’явиться повідомлення з отриманим повідомленням, як показано нижче.
Крок 2: Опублікувати до теми:
Тепер, щоб опублікувати в темі, натисніть кнопку СТРІЛКА ВГОРУ в додатку, і відкриється екран, як показано нижче.
Тепер у полі Тема напишіть “ esp / test ”, а в полі повідомлення напишіть “ on ” або “ off ”, щоб увімкнути та вимкнути світлодіод відповідно. Наприклад, якщо в Темі опубліковано “on”, тоді світлодіод буде ввімкнено, а якщо “off” буде опубліковано в Темі, то світлодіод буде вимкнено.
Сподіваюся, вам сподобалась стаття і ви дізналися щось нове. Якщо у вас виникли запитання щодо цієї статті, будь ласка, коментуйте нижче, або ви можете скористатися нашим форумом.