- Co je protokol MQTT?
- Jak MQTT funguje?
- Makléř Eclipse Mosquitto
- Požadované komponenty
- Zkušební obvod Eclipse MQTT - schématický
- Programování ESP8266 k navázání komunikace s Brokerem
- Testování MQTT s ESP8266 pomocí Arduina
Za posledních několik let se zařízení IoT (internet věcí) staly nerozeznatelnou součástí našeho každodenního života. Od inteligentních domácností, inteligentních žárovek až po inteligentní spotřebiče; tvůrci a vývojáři začleňují tuto technologii k vytvoření sítě připojených zařízení, díky nimž je náš každodenní život o něco více vzrušující. To vše bylo možné díky snadné komunikaci. Existuje mnoho možných způsobů komunikace mezi zařízeními, ale v komerčních a hobby produktech se běžně používá jediný protokol - Message Queuing Telemetry Transport (MQTT). Dříve jsme vytvořili hlasově ovládané FM rádio pomocí Arduina a Google Assistant, které využívá MQTT ke komunikaci s deskou NodeMCU. Podívejte se, jestli vám to připadá zajímavé.
V tomto projektu budeme používat bezplatného a oblíbeného brokera Eclipse MQTT a naučíme se, jak připojit zařízení IoT (v našem případě je to modul NodeMCU) k brokerovi MQTT a přenášet data mezi brokerem MQTT a NodeMCU.
Co je protokol MQTT?
Než budeme pokračovat dál, že je lepší mít jasnou představu o tom, MQTT (Message Queuing Telemetry Transport) protokol. Jedná se o lehký protokol zasílání zpráv, který používá metodu publikování / odběru a překládá zprávy mezi více zařízeními. Pomocí protokolu MQTT můžeme také odesílat / přijímat data a ovládat různá výstupní zařízení, například číst data ze senzorů atd. Je vyvíjen nad protokolem TCP, a proto je rychlejší než podobné protokoly, jako je HTTP. Kromě toho má mnoho dalších výhod oproti jiným protokolům, jako je jeho velmi nízká hmotnost, takže nespotřebovává přebytečnou paměť, může pracovat s velmi menší šířkou pásma sítě, navíc má zabudovaný robustní bezpečnostní protokol. Díky těmto vlastnostem je vhodný pro mnoho aplikací.
Jak MQTT funguje?
Abychom pochopili fungování protokolu MQTT, musíme pochopit tři základní věci; výše uvedený diagram to ukazuje. Také jsme to vysvětlili níže v článku.
Klient MQTT:
MQTT klient je jakékoliv zařízení (může se jednat o mikrořadič nebo server), který běží MQTT funkce a komunikuje s centrálním serverem, který je znám jako „ zprostředkovatele “. Zprostředkovatel zpracovává datovou komunikaci mezi připojenými klienty.
Vydavatel MQTT:
Pokud chce klient poslat jakékoli informace, je znám jako „Vydavatel“. Vydavatel zveřejní informace o konkrétním tématu. „ Téma “ je cesta, kde můžeme publikovat / odebírat zprávy. Zprostředkovatel poté odešle informace zveřejněné uživatelem klientům (známým také jako předplatitel), kteří se přihlásili k odběru konkrétního tématu.
Předplatitel MQTT:
MQTT Účastník předplatí témat na MQTT kancelář číst zprávy odeslané prostřednictvím makléře.
Makléř Eclipse Mosquitto
Eclipse Mosquitto je open-source broker MQTT, který je lehký a je vhodný pro použití na zařízeních IoT pro komunikaci. Protokol MQTT poskytuje nenáročnou metodu přenosu informací pomocí modelu publikování / odběru. Pokud se chcete o tomto tématu dozvědět více, můžete navštívit oficiální web proti komárům.
Nastavení brokera Eclipse Mosquitto:
Abychom mohli navázat komunikaci s makléřem, musíme ji nejprve nastavit. V tomto projektu se aplikace Android používá k publikování a přihlášení k odběru informací u Broker. Následující kroky vám poskytnou lepší představu o procesu instalace.
Krok 1:
Nejprve si stáhněte libovolnou aplikaci „MQTT client“ dostupnou v obchodě Google Play / App Store a nainstalujte ji. V tomto projektu se používá aplikace s názvem „MQTT klient“, která vypadá jako obrázek níže.
Krok 2:
Kliknutím na znaménko „+“ zobrazíte další možnosti v aplikaci, kam přidáme nového makléře. Po kliknutí na tlačítko se zobrazí nová obrazovka, jak je znázorněno níže.
Krok 3:
Poté je třeba do požadovaného pole vyplnit údaje o makléři. Nejprve klikněte na možnost „Povoleno“ zobrazenou v aplikaci. V tomto projektu se používá zprostředkovatel Eclipse MQTT, podrobnosti, které je třeba vyplnit, jsou uvedeny níže:
Přezdívka: Uveďte jméno, které preferujete
Hostitel: mqtt.eclipse.org
Přístav: 1883
ID klienta: Uveďte ID své preference
Výše uvedené podrobnosti je třeba vyplnit do příslušných polí. Všechna ostatní pole nejsou nutná a mohou být ponechána prázdná. Po úspěšném dokončení kliknutím na tlačítko uložit uložíte podrobnosti makléře.
Po dokončení je proces instalace aplikace pro Android u konce a nyní můžeme přejít na hardwarovou stránku věci.
Požadované komponenty
Níže je popsán kompletní seznam požadovaných dílů. Protože je tento obvod jednoduchý, najdete všechny potřebné součásti v místním hobby obchodě.
- NodeMCU
- VEDENÝ
- Nepájivá deska
- Připojovací vodiče
- Programovací kabel
Zkušební obvod Eclipse MQTT - schématický
Schéma zapojení pro projekt Basic MQTT je uvedeno níže:
Programování ESP8266 k navázání komunikace s Brokerem
Jednoduchý Arduino kód se postará o veškerou nezbytnou komunikaci mezi MQTT brokerem a NodeMCU. V této části se dozvíme, jak tato funkce funguje podrobně.
Nastavte Arduino IDE a nahrajte kód:
Pokud nahráváte kód do NodeMCU poprvé, musíte nejprve nastavit IDE Arduino. Postupujte podle jednoduchých pokynů uvedených níže.
Nejprve otevřete Arduino IDE a poté přejděte na Soubor–> Předvolby–> Nastavení .
Dále zkopírujte níže uvedenou adresu URL, vložte ji do pole „Další adresa URL správce desky “ a klikněte na „OK“. Na následujícím obrázku můžete zjistit, jak jsme to udělali.
Odkaz:
Dále přejděte do nabídky Nástroje> Deska> Správce desek . V okně Správce desky zadejte do vyhledávacího pole ESP 8266 a stiskněte klávesu Enter. Poté vyberte z rozevíracího seznamu nejnovější verzi a klikněte na instalaci. Obrázek níže vám dá jasnou představu.
Nakonec po dokončení instalace přejděte na Nástroje -> Deska -> a vyberte NodeMCU 1.0 (modul ESP-12E). Nyní můžete NodeMCU naprogramovat pomocí Arduino IDE. Jakmile jsme dokončili nastavení Arduino IDE, můžeme nyní nahrát kompletní kód. Nejprve si ale přečtěte rychlé vysvětlení celého kódu.
Nejprve jsme zahrnuli „ESP8266WiFi.h“ pro používání ESP8266 a „PubSubClient.h“ pro MQTT.
Knihovnu ESP8266 najdete předem připravenou uvnitř knihovny Arduino, ale musíte si stáhnout knihovnu PubSubClient z přidruženého úložiště GitHub.
#zahrnout
Poté definujte síťová pověření, například uživatelské jméno a heslo k Wi-Fi. Vyměňte své přihlašovací údaje místo „admin“ a „12345678“.
const char * ssid = "admin"; const char * heslo = "12345678";
Dále musíme nakonfigurovat server MQTT. Pro tento projekt jsme použili server Eclipse MQTT, a proto je adresa serveru uvedena jako „mqtt.eclipse.org“. Pokud ale plánujete použít jakýkoli jiný server, jako je Mosquitto, Adafruit, můžete jej nahradit konkrétní adresou serveru a číslem portu.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Dále se vytvoří instance pro třídy WiFiClient a PubSubClient , které se budou používat v celém programu.
WiFiClient espClient; Klient PubSubClient (espClient);
V setup () úseku, kterému říkáme WiFi.begin () poprvé, volání této metody se připojí ESP na vaší preferované HotSpot.
WiFi.begin (ssid, heslo);
Dále zkontrolujeme úspěšné připojení k síti pomocí metody WiFi.status () . Po úspěšném připojení se na Serial Monitor vytiskne zpráva s SSID připojené sítě.
while (WiFi.status ()! = WL_CONNECTED) {zpoždění (500); Serial.println ("Připojení k WiFi.."); } Serial.print ("Připojeno k WiFi:"); Serial.println (WiFi.SSID ());
Nyní musíme vytvořit makléře. K tomu jsme použili metodu setServer ; tato metoda trvá dva argumenty, které jsme předdefinovali dříve. Nyní, pokud chceme přijímat zprávy ze serveru, musíme vytvořit funkci zpětného volání. K tomu používáme metodu setCallback (zpětné volání) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Nyní jsme pro připojení k klientovi ESP8266 použili funkci connect (clientID) . Zde clientID je jméno klienta a musí být jedinečné. Pokud je připojen, může se uvnitř sériového monitoru zobrazit zpráva o úspěchu.
if (client.connect ("ESP8266")) {Serial.println ("connected"); } else {Serial.print ("selhalo se stavem") Serial.println (client.state ()); zpoždění (2000); }
Dále voláme client.subscribe () , integrovanou funkci MQTT, která se používá k přihlášení k odběru konkrétního tématu. Pro tento projekt jsme jako jméno předplatitele použili „ esp / test “.
client.subscribe ("esp / test");
Nyní je volána funkce MQTTcallback, která kontroluje, zda jsou k dispozici aktualizované informace. Pokud jsou k dispozici nová data, tato funkce zpracovává přijatá data a vytiskne zprávu na sériovém monitoru s původní zprávou a názvem tématu, kde je zpráva přijata.
Dále zprávy převedeme na řetězec, aby bylo možné je porovnat a zkontrolovat, zda nemají nějaké spouštěcí akce. V tomto projektu je LED zapnuta / vypnuta pomocí příkazů MQTT, jak je znázorněno v níže uvedeném kódu.
pro (int i = 0; i <délka; i ++) {message = zpráva + (char) užitečné zatížení; } Serial.print (zpráva); if (message == "on") {digitalWrite (LED, HIGH); }
Na závěr zveřejnit informace o daném tématu. Je použita funkce client.publish () . V tomto projektu je zkontrolován stav tlačítka, pokud je tlačítko stisknuto, pak je zpráva publikována na téma „ esp / test1 “, jak je uvedeno níže.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } else; client.loop ();
Testování MQTT s ESP8266 pomocí Arduina
Pro naše finální testování použijeme aplikaci pro Android, kterou jsme nastavili dříve.
Otevřete klientskou aplikaci MQTT a zkontrolujte, zda má váš mobilní telefon aktivní připojení k internetu. Aktivní bod, ke kterému je NodeMCU připojen, by měl mít také aktivní připojení k internetu. Jakmile je vše připojeno k internetu, pošleme z modulu ESP řetězec „Hello from ESP8266“, který se projeví v aplikaci pro Android, a dostaneme oznámení. Dále pošleme řetězec z aplikace pro Android, který rozsvítí LED, která je připojena k desce MCU Node ESP8266.
Krok 1: (Přihlaste se k tématu):
Klikněte na možnost Uložená MQTT v aplikaci, kterou jsme nakonfigurovali dříve. Zobrazí se obrazovka, na které se zobrazí výzva k přihlášení k odběru tématu. Téma jsme dříve nakonfigurovali jako „ esp / test1 “. V aplikaci pro Android tedy napíšeme „ esp / test1 “. Kliknutím na Přihlásit se k odběru se vám zobrazí obrazovka jako níže, kde bude z konkrétního tématu napsáno jako „Žádná zpráva přijata“.
Nyní klikněte na tlačítko 'Připojeno', které je připojeno k nodeMCU. Nyní podle našeho kódu bude k tématu zveřejněna zpráva „ Dobrý den od ESP8266 “ a na obrazovce bude oznámení s přijatou zprávou, jak je uvedeno níže.
Krok 2: Publikování k tématu:
Nyní k publikování v tématu klikněte na tlačítko ŠIPKA NAHORU v aplikaci a otevře se obrazovka, jak je znázorněno níže.
Nyní do pole Téma napište „ esp / test “ a do pole zprávy napište „ zapnuto “ nebo „ vypnuto “ pro zapnutí a vypnutí LED. Pokud je například v tématu publikováno „zapnuto“, pak se LED rozsvítí a pokud je v tématu publikováno „vypnuto“, pak LED zhasne.
Doufám, že se vám článek líbil a dozvěděli jste se něco nového. Máte-li jakékoli dotazy týkající se tohoto článku, neváhejte komentovat níže nebo můžete místo toho použít naše fórum.