- Какво е 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 клиент“, налично в Google Play Store / App Store и го инсталирайте. В този проект се използва приложение, наречено „MQTT клиент“, което прилича на изображението, показано по-долу.
Стъпка 2:
Кликнете върху знака „+“, за да изброите допълнителните опции в приложението, където ще добавим нов брокер. Когато кликнете върху бутона, се появява нов екран, както е показано по-долу.
Стъпка 3:
След това в задължителното поле трябва да се попълнят данните за брокера. Първо кликнете върху опцията “Enabled”, показана в приложението. В този проект се използва брокерът Eclipse MQTT, подробностите, които трябва да се попълнят, са дадени по-долу:
Псевдоним: Дайте име по ваше предпочитание
Водещ: mqtt.eclipse.org
Пристанище: 1883 г.
Идентификатор на клиента: Дайте идентификатор на предпочитанията си
Горните данни трябва да се попълнят в съответните им полета. Всички други полета не са необходими и могат да бъдат оставени празни. След успешно завършване, щракнете върху бутона за запазване, за да запазите данните за брокера.
След като приключи, процесът за настройка на приложението за Android приключи и сега можем да преминем към хардуерната страна на нещата.
Необходими компоненти
Пълен списък на необходимите части е описан по-долу. Тъй като тази схема е проста, можете да намерите всички необходими части в местния магазин за хоби.
- NodeMCU
- LED
- Макет
- Свързващи проводници
- Кабел за програмиране
Eclipse MQTT Тестова схема - Схема
Схемата на схемата за основния проект MQTT е дадена по-долу:
Програмиране на ESP8266 за установяване на комуникация с Брокер
Един прост код на Arduino се грижи за всички необходими комуникации между брокера MQTT и NodeMCU. В този раздел ще научим подробно как работи тази функционалност.
Настройте Arduino IDE и качете кода:
Ако качвате кода в NodeMCU за първи път, първо трябва да настроите IDE на Arduino. За да направите това, просто следвайте простата инструкция, дадена по-долу.
Първо отворете Arduino IDE, след това отидете на Файл -> Предпочитания -> Настройки .
След това копирайте URL адреса по-долу и го поставете в полето „Допълнителен URL адрес на диспечера на борда “ и кликнете върху „Ok“. Можете да проверите изображението по-долу, за да разберете как сме го направили.
Връзка:
След това отидете на Tools> Board> Boards Manager . В прозореца на диспечера на борда въведете ESP 8266 в полето за търсене и натиснете enter. След това изберете най-новата версия от падащото меню и кликнете върху инсталиране. Изображението по-долу ще ви даде ясна представа.
И накрая, след като инсталацията приключи, отидете на Tools -> Board -> и изберете NodeMCU 1.0 (ESP-12E Module). Сега можете да програмирате NodeMCU с Arduino IDE. Тъй като приключихме с настройката на Arduino IDE, вече можем да качим пълния код. Но първо прочетете бързото обяснение на целия код.
Първо, включихме “ESP8266WiFi.h” за използване на ESP8266 и “PubSubClient.h” за MQTT.
Можете да намерите библиотеката ESP8266, предварително изградена вътре в библиотеката Arduino, но трябва да изтеглите библиотеката PubSubClient от свързаното с нея хранилище GitHub.
#include
След това дефинирайте мрежовите идентификационни данни, като потребителското име и паролата за Wi-Fi. Заменете вашите идентификационни данни вместо „admin“ и „12345678“ съответно.
const char * ssid = "admin"; 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);
В настройка () част, което наричаме 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 (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, както е показано в кода по-долу.
за (int i = 0; i <дължина; i ++) {съобщение = съобщение + (char) полезен товар; } 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, който ще включи светодиод, свързан към платката ESP8266 Node MCU.
Стъпка 1: (Абонирайте се за темата):
Кликнете върху опцията Saved MQTT в приложението, която сме конфигурирали по-рано. Ще се появи екран, където ще бъдете подканени да се абонирате за тема. Преди това сме конфигурирали темата като „ esp / test1 “. И така, в приложението за Android ще напишем „ esp / test1 “. Щракнете върху Абониране, като по този начин ще ви се появи екран като по-долу, където той ще бъде написан като „Няма съобщение получено“ от конкретната тема.
Сега кликнете върху бутона „Свързан“, който е свързан към nodeMCU. Сега според нашия код в Темата ще бъде публикувано съобщение „ Здравейте от ESP8266 “ и на екрана ще има известие с полученото съобщение, както е показано по-долу.
Стъпка 2: Публикуване в темата:
Сега, за да публикувате в темата, щракнете върху бутона СТРЕЛКА НАГОРЕ на приложението и ще се отвори екран, както е показано по-долу.
Сега, в полето Тема напишете „ esp / test “, а в полето за съобщение напишете „ on “ или „ off “, за да включите и изключите съответно светодиода. Например, ако „включено“ е публикувано в темата, тогава светодиодът ще бъде включен и ако „изключено“ бъде публикувано в темата, тогава светодиодът ще бъде изключен.
Надявам се статията да ви е харесала и да сте научили нещо ново. Ако имате някакви въпроси относно тази статия, моля не се колебайте да коментирате по-долу или вместо това можете да използвате нашия форум.