- Mi az MQTT protokoll?
- Hogyan működik az MQTT?
- Az Eclipse Mosquitto bróker
- Szükséges alkatrészek
- Eclipse MQTT teszt-áramkör - vázlat
- Az ESP8266 programozása a brókerrel való kommunikáció kialakításához
- Az MQTT tesztelése az ESP8266 segítségével Arduino segítségével
Az elmúlt néhány évben az IoT (Internet of Things) eszközök megkülönböztethetetlen részévé váltak mindennapjainkban. Az intelligens otthonoktól, az intelligens izzóktól az intelligens készülékekig; az alkotók és a fejlesztők ezt a technológiát beépítik a csatlakoztatott eszközök hálózatának létrehozásához, amely kissé izgalmasabbá teszi mindennapi életünket. Mindezt a könnyű kommunikáció miatt tették lehetővé. Számos lehetséges módszer létezik az eszközök közötti kommunikációra, de a kereskedelmi és hobbitermékekben egyetlen általánosan használt protokoll az Message Queuing Telemetry Transport (MQTT). Korábban építettünk egy hangvezérelt FM-rádiót az Arduino és a Google Assistant segítségével, amely az MQTT segítségével kommunikál a NodeMCU táblával. Nézd meg, ha ez érdekesnek tűnik számodra.
Ebben a projektben egy ingyenes és népszerű Eclipse MQTT közvetítőt fogunk használni, és megtanuljuk, hogyan csatlakoztassunk egy IoT eszközt (esetünkben ez NodeMCU modul) egy MQTT közvetítőhöz, és hogyan továbbítunk adatokat az MQTT közvetítő és a NodeMCU között.
Mi az MQTT protokoll?
Mielőtt tovább folytatnánk, jobb, ha világos elképzelése van az MQTT (Message Queuing Telemetry Transport) protokollról. Ez egy könnyű üzenetküldési protokoll, amely a közzététel / feliratkozás módszert használja és több eszköz között fordítja le az üzeneteket. Az MQTT protokoll használatával adatokat is küldhetünk / fogadhatunk, és különféle kimeneti eszközöket vezérelhetünk, például olvashatunk érzékelő adatokat, stb. A TCP tetején fejlesztették ki, ezért gyorsabb, mint a hasonló protokolloké, mint a HTTP. Ezen kívül sok más előnye van más protokollokkal szemben, mint például a nagyon könnyű, ezért nem fogyaszt felesleges memóriát, nagyon alacsony hálózati sávszélességgel tud működni, ráadásul beépített robusztus biztonsági protokollal rendelkezik. Ezek a funkciók számos alkalmazásra alkalmassá teszik.
Hogyan működik az MQTT?
Az MQTT protokoll működésének megértéséhez csak három alapvető dolgot kell megértenünk; a fenti ábra azt mutatja. Az alábbiakban a cikkben kifejtettük.
MQTT kliens:
Az MQTT kliens minden olyan eszköz (lehet mikrokontroller vagy szerver), amely futtatja az MQTT funkciókat és kommunikál egy központi szerverrel, amelyet „ brókernek ” neveznek. A bróker kezeli az összekapcsolt ügyfelek közötti adatkommunikációt.
MQTT Kiadó:
Amikor az ügyfél bármilyen információt el akar küldeni, akkor az ügyfél „Publisher” néven ismert. A kiadó közzéteszi az információkat egy adott témában. A „ téma ” egy olyan útvonal, ahol üzeneteket közzétehetünk / feliratkozhatunk. A bróker ezt követően elküldi a felhasználó által közzétett információkat azoknak az ügyfeleknek (más néven Előfizetőknek), akik feliratkoztak az adott témára.
MQTT előfizető:
Az MQTT előfizető feliratkozik egy MQTT alkusz témakörére, hogy elolvassa az alkusz által küldött üzeneteket.
Az Eclipse Mosquitto bróker
Az Eclipse Mosquitto egy nyílt forráskódú MQTT bróker, amely könnyű és alkalmas IoT eszközökön való kommunikációra. Az MQTT protokoll könnyű módszert kínál az információk átadására közzétételi / feliratkozási modell segítségével. Ha többet szeretne megtudni a témáról, ellátogathat a hivatalos szúnyogok weboldalára.
Az Eclipse Mosquitto bróker beállítása:
A brókerrel való kommunikáció kiépítéséhez előbb fel kell állítanunk. Ebben a projektben egy Android alkalmazást használnak az információk közzétételére és feliratkozására a Brókernél. A következő lépésekkel jobban áttekintheti a telepítési folyamatot.
1. lépés:
Először töltsön le minden, a Google Play Áruházban / App Store-ban elérhető „MQTT kliens” alkalmazást, és telepítse azt. Ebben a projektben egy „MQTT kliens” nevű alkalmazást használnak, amely úgy néz ki, mint az alább látható kép.
2. lépés:
Kattintson a „+” jelre az alkalmazás további opcióinak felsorolásához, ahol új brókert fogunk hozzáadni. A gombra kattintva egy új képernyő jelenik meg az alábbiak szerint.
3. lépés:
Ezt követően a bróker adatait ki kell tölteni a szükséges mezőben. Először kattintson az alkalmazásban látható „Engedélyezve” lehetőségre. Ebben a projektben az Eclipse MQTT brókert használják, a kitöltendő részleteket az alábbiakban adjuk meg:
Becenév: Adjon meg egy nevet, amelyet előnyben részesít
Gazdagép: mqtt.eclipse.org
Kikötő: 1883
Ügyfél-azonosító: Adja meg preferenciájának azonosítóját
A fenti részleteket a megfelelő mezőkben kell kitölteni. Az összes többi mező nem szükséges, és üresen is hagyható. A sikeres befejezés után kattintson a Mentés gombra a Bróker részleteinek mentéséhez.
Miután elkészült, az androidos alkalmazás telepítési folyamata véget ért, és most továbbléphetünk a dolgok hardveres oldalára.
Szükséges alkatrészek
A szükséges alkatrészek teljes listáját az alábbiakban ismertetjük. Mivel ez az áramkör egyszerű, az összes szükséges alkatrészt megtalálja a helyi hobbiboltban.
- NodeMCU
- VEZETTE
- Kenyérlemez
- Csatlakozó vezetékek
- Programozó kábel
Eclipse MQTT teszt-áramkör - vázlat
Az Basic MQTT projekt kapcsolási rajza az alábbiakban látható:
Az ESP8266 programozása a brókerrel való kommunikáció kialakításához
Egy egyszerű Arduino kód gondoskodik az összes szükséges kommunikációról az MQTT közvetítő és a NodeMCU között. Ebben a szakaszban megtudhatjuk, hogyan működik ez a funkció részletesen.
Az Arduino IDE beállítása és a kód feltöltése:
Ha először tölti fel a kódot a NodeMCU-ba, akkor először be kell állítania az Arduino IDE-t. Ehhez kövesse az alábbi egyszerű utasításokat.
Először nyissa meg az Arduino IDE alkalmazást, majd válassza a Fájl -> Beállítások -> Beállítások menüpontot .
Ezután másolja az alábbi URL-t, illessze be az "További Board Manager URL " mezőbe, majd kattintson az "OK" gombra. Ellenőrizheti az alábbi képet, hogy megtudja, hogyan tettük ezt.
Link:
Ezután lépjen az Eszközök> Tábla> Táblák kezelőjéhez . A Board Manager kezelő ablakában írja be az ESP 8266 parancsot a keresőmezőbe, és nyomja meg az Enter billentyűt. Ezután válassza a legördülő menü legújabb verzióját, és kattintson a Telepítés gombra. Az alábbi kép világos képet fog adni.
Végül, miután a telepítés befejeződött, lépjen az Eszközök -> Alaplap -> elemre, és válassza a NodeMCU 1.0 (ESP-12E modul) lehetőséget. Most a NodeMCU programozható az Arduino IDE programmal. Miután befejeztük az Arduino IDE beállítását, most feltölthetjük a teljes kódot. De először olvassa el a teljes kód gyors magyarázatát.
Először felvettük az ESP8266 használatához az „ESP8266WiFi.h” -t, az MQTT- hez pedig a „PubSubClient.h” -t .
Az ESP8266 könyvtár előre elkészítve megtalálható az Arduino könyvtárban, de le kell töltenie a PubSubClient könyvtárat a hozzá tartozó GitHub adattárból.
#include
Ezután adja meg a hálózati hitelesítő adatokat, például a Wi-Fi felhasználónevét és jelszavát. Cserélje ki hitelesítő adatait az „admin”, illetve az „12345678” helyett.
const char * ssid = "admin"; const char * password = "12345678";
Ezután konfigurálnunk kell az MQTT szervert. Ehhez a projekthez az Eclipse MQTT szervert használtuk, ezért a szerver címét „mqtt.eclipse.org” néven adjuk meg. De ha bármilyen más szervert kíván használni, mint például a Mosquitto, az Adafruit, akkor kicserélheti az adott szerver címére és portszámára.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Ezután létrehozzák a példányokat a WiFiClient és a PubSubClient osztályhoz , amelyeket az egész programban használni fognak.
WiFiClient espClient; PubSubClient kliens (espClient);
A setup () részben először a WiFi.begin () modult hívjuk meg, ennek a módszernek a meghívásával az ESP csatlakozik a preferált HotSpot-hoz.
WiFi.begin (ssid, jelszó);
Ezután a WiFi.status () módszerrel ellenőrizzük a sikeres hálózati kapcsolatot . Sikeres kapcsolat után egy üzenetet nyomtat a Serial Monitor a csatlakoztatott hálózat SSID-jével.
while (WiFi.status ()! = WL_CONNECTED) {késleltetés (500); Serial.println ("Csatlakozás a WiFi-hez.."); } Serial.print ("Csatlakoztatva a WiFi-hez:"); Serial.println (WiFi.SSID ());
Most létre kell hoznunk egy brókert. Ehhez a setServer metódust használtuk; ehhez a módszerhez két olyan argumentum szükséges, amelyeket korábban definiáltunk. Most, ha üzeneteket akarunk kapni a szerverről, létre kell hoznunk egy visszahívási funkciót. Ehhez a setCallback (visszahívás) módszert használjuk.
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Most a connect (clientID) függvényt használtuk az ESP8266 klienshez való csatlakozáshoz. Itt a clientID az ügyfél neve, és egyedinek kell lennie. Ha csatlakoztatva van, akkor a soros monitoron sikerüzenet jelenhet meg.
if (client.connect ("ESP8266")) {Serial.println ("csatlakoztatva"); } else {Serial.print ("nem sikerült az állapottal") Serial.println (client.state ()); késés (2000); }
Ezután hívjuk a client.subscribe () , beépített MQTT funkció, mellyel feliratkozni egy adott témában. Ehhez a projekthez az „ esp / test ” -t használtuk előfizetőink neveként.
client.subscribe ("esp / teszt");
Most az MQTTcallback funkciót hívjuk meg annak ellenőrzésére, hogy rendelkezésre áll-e frissített információ. Ha új adatok állnak rendelkezésre, ez a funkció kezeli a fogadott adatokat, és egy üzenetet nyomtat a soros monitoron az eredeti üzenet és a téma nevével együtt, ahol az üzenet érkezik.
Ezután konvertáljuk az üzeneteket karakterláncokká, hogy összehasonlíthassuk és ellenőrizhessük az esetleges kiváltó műveleteket. Ebben a projektben egy LED be- és kikapcsolása az MQTT parancsok használatával, az alábbi kód szerint.
for (int i = 0; i <hossz; i ++) {üzenet = üzenet + (char) hasznos teher; } Soros nyomtatás (üzenet); if (üzenet == "be") {digitalWrite (LED, HIGH); }
Végül a témával kapcsolatos információk közzététele. A client.publish () függvényt használják. Ebben a projektben egy nyomógomb állapotát ellenőrizzük, ha megnyomjuk a gombot, akkor egy üzenetet közzéteszünk az „ esp / test1 ” témában, az alábbiak szerint.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello az ESP8266-ból"); } más; client.loop ();
Az MQTT tesztelése az ESP8266 segítségével Arduino segítségével
A végső teszteléshez a korábban létrehozott Android alkalmazást fogjuk használni.
Nyissa meg az MQTT kliens alkalmazást, és győződjön meg arról, hogy mobilja aktív internetkapcsolattal rendelkezik. Továbbá annak a hotspotnak, amelyhez a NodeMCU csatlakozik, aktív internetkapcsolattal kell rendelkeznie. Miután minden csatlakozik az internethez, küldünk egy „Hello from ESP8266” karakterláncot az ESP modulból, amely tükröződik az Android alkalmazás belsejében, és értesítést kapunk. Ezután küldünk egy karakterláncot az Android alkalmazásból, amely bekapcsol egy LED-et, amely csatlakozik az ESP8266 Node MCU kártyához.
1. lépés: (Iratkozzon fel a témára):
Kattintson az alkalmazás Mentett MQTT opciójára, amelyet korábban konfiguráltunk. Felugrik egy képernyő, ahol a „Feliratkozás egy témára” felkérést kap . Korábban konfiguráltuk a témát „ esp / test1 ” néven. Tehát az Android alkalmazásban az „ esp / test1 ” szót fogjuk írni. Kattintson a Feliratkozás gombra. Ezzel egy olyan képernyőt kap, amely az alábbihoz hasonló, ahol úgy írják, hogy „Nincs üzenet” az adott témától.
Most kattintson a „Csatlakoztatva” gombra, amely csatlakozik a nodeMCU-hoz. Most a kódunknak megfelelően a „ Hello from ESP8266 ” üzenet jelenik meg a témában, és a képernyőn egy értesítés jelenik meg, amely az alábbiak szerint kapott üzenetet kapja.
2. lépés: Közzététel a témában:
A témában való közzétételhez kattintson az alkalmazás FEL nyíl gombjára, és megnyílik egy képernyő az alábbiak szerint.
Most a Téma mezőbe írja be az „ esp / test ” kifejezést, az üzenet mezőbe pedig az „ on ” vagy „ off ” értéket a LED be- vagy kikapcsolásához. Például, ha az „on” értéket közzéteszik a témában, akkor a LED bekapcsol és ha a „off” felirat jelenik meg a témában, akkor a LED kikapcsol.
Remélem tetszett a cikk, és valami újat tanultál. Ha bármilyen kérdése van a cikkel kapcsolatban, nyugodtan tegye meg észrevételeit alább, vagy használhatja fórumunkat.