- Kaj je MQTT?
- Namestitev Mosquitto MQTT Broker na Raspberry Pi
- Testiranje posrednika za komarje Raspberry Pi
- Shema vezja
- Koda in razlaga
MQTT je protokol, ki se uporablja za pošiljanje in prejemanje sporočil prek interneta. Ta protokol smo prej uporabljali v merilnikih električne energije Iot in Raspberry Pi Alexa za objavo podatkov na internetu. V tej vadnici bomo spoznali več o MQTT in izrazih, povezanih z njim. Tu bomo Raspberry Pi uporabili kot lokalnega posrednika MQTT in preko nadzorne plošče aplikacije MQTT upravljali LED, ki je povezana z NodeMCU ESP12E. Na NodeMCU je povezan tudi senzor DHT11, zato dobimo odčitavanje temperature in vlažnosti na armaturni plošči MQTT, tako da znova uporabimo Raspberry Pi kot lokalnega posrednika MQTT.
Začnimo torej s podcenjevanjem MQTT in z njim povezanih izrazov.
Kaj je MQTT?
MQTT pomeni telemetrični transport v čakalni vrsti sporočil, ki ga je zasnoval IBM. Ta protokol je preprost in lahek, ki se uporablja za pošiljanje in prejemanje sporočil prek interneta in je zasnovan za naprave z nizko pasovno širino. Dandanes se ta protokol pogosto uporablja v napravah IoT za pošiljanje in sprejemanje podatkov senzorjev. Tudi v sistemih za avtomatizacijo domov, ki temeljijo na IoT, je ta protokol enostavno uporabiti brez uporabe velikega števila internetnih podatkov.
V MQTT se pogosto uporabljajo izrazi:
- Naročite se in objavite
- Sporočilo
- Tema
- Posrednik
1. Naročite se in objavite: Naročite se tako, da pridobite podatke iz druge naprave, in objavite sredstva za pošiljanje podatkov v drugo napravo.
Ko naprava1 pošlje podatke napravi2, je znana kot Založnik, druga pa Naročnik in obratno.
2. Sporočilo: Sporočila so informacije, ki jih pošiljamo in prejemamo. Lahko so podatki ali kateri koli tip ukaza. Če na primer podatke o temperaturi objavljamo v oblaku, so ti podatki o temperaturi znani kot Sporočilo.
3. Tema: Na ta način registrirate zanimanje za dohodna sporočila ali kako določite, kje želite objaviti sporočilo. Teme so predstavljene z nizi, ločenimi s poševnico naprej. Podatki se objavijo o temah z uporabo MQTT, nato pa se naprava MQTT naroči na temo, da pridobi podatke.
4. Posrednik MQTT: Ta stvar je odgovorna za sprejemanje vseh sporočil založnikov, filtriranje sporočil in nato objava sporočil naročnikom, ki jih zanimajo.
Ko ta posrednik gostuje v oblaku, se imenuje oblak MQTT. Obstaja veliko storitev MQTT, ki temeljijo na oblaku, kot so Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure itd. MQTT se lahko uporablja tudi s priljubljenim oblakom Amazon AWS, kar smo razložili v Uvodu za začetek uporabe Amazon AWS.
S pomočjo Raspberry Pi lahko izdelamo lastnega posrednika MQTT. To bo lokalni posrednik MQTT, torej lahko podatke v svojem lokalnem omrežju pošiljate in prejemate samo ne od nikoder. Torej, tukaj bomo v Raspberry Pi namestili posrednika Mosquitto MQTT, da bo postal lokalni posrednik MQTT, in poslali podatke o temperaturi iz NodeMCU v aplikacijo za nadzorno ploščo MQTT. Prav tako bomo s pomočjo posrednika upravljali LED, priključeno na NodeMCU.
Namestitev Mosquitto MQTT Broker na Raspberry Pi
Odprite terminal v Raspberry pi in vnesite naslednje ukaze, da namestite posrednika
sudo apt update sudo apt install -y mosquitto mosquitto-client
Počakajte, da se namestitev konča. Zdaj, če želite zagnati posrednika ob zagonu maline pi, vnesite naslednji ukaz
sudo systemctl omogoči mosquitto.service
To je to, vsi smo pripravljeni zagnati našega posrednika MQTT. Če želite preveriti, ali je pravilno nameščen, vnesite naslednji ukaz
komar -v
Ta ukaz vam bo dal različico vašega posrednika MQTT. Moral bi biti 1.4.x ali več.
Testiranje posrednika za komarje Raspberry Pi
1. Zaženite posrednika Mosquitto v ozadju z uporabo spodnjega ukaza
komar -d
2. Zdaj bomo naročili temo v exampleTopic z naslednjim ukazom
mosquitto_sub -d -t exampleTopic
3. Zdaj bomo objavili nekaj sporočila za exampleTopic
mosquitto_pub -d -t exampleTopic -m "Pozdravljeni, svet!"
Prejeli boste Hello world! Sporočilo v naročniškem terminalu.
Zdaj je čas za nadzor in pridobivanje podatkov iz druge naprave. V našem primeru uporabljamo aplikacijo NodeMCU in MQTT na nadzorni plošči .
- Najprej bomo nadzorovali LED s pošiljanjem ukaza z aplikacijo, zato se NodeMCU v tem primeru obnaša kot naročnik, aplikacija pa kot založnik.
- Nato je na ESP12E priključen tudi senzor DHT11 in ta odčitek temperature pošlje v aplikacijo Mobile MQTT, zato bo v tem primeru naročnik mobilni, založnik pa NodeMCU. Za posredovanje teh sporočil na posamezne teme se uporablja posrednik Mosquitto MQTT.
Shema vezja
Povežite vezje, kot je prikazano na diagramu. Tu se za odčitavanje temperature uporablja DHT11, lahko pa tudi temperaturni senzor LM35. Senzor DHT11 smo že uporabljali v mnogih naših projektih, vključno z NodeMCU, za izgradnjo vremenske postaje.
Začnimo pisati kodo za NodeMCU, da se naroči in objavi podatke.
Koda in razlaga
Tu bomo uporabili predlogo knjižnice Adafruit MQTT in spremenili zahtevane stvari v kodi. Z isto kodo lahko objavite in naročite podatke v oblak Adafruit IO, tako da spremenite nekaj stvari.Za to prenesite knjižnico Adafruit MQTT iz Sketch -> Include Library -> Manage Libraries. Poiščite Adafruit MQTT in ga namestite. Po namestitvi knjižnice. Pojdite na primere -> knjižnica Adafruit mqtt -> mqtt_esp8266
Nato uredite to kodo glede na naš naslov IP Raspberry Pi in poverilnice Wi-Fi.
Vključite vse knjižnice za ESP8266WIFI in Adafruit MQTT .
#include
Nato določite SSID in geslo za Wi-Fi, s katerega želite povezati ESP-12e. Prepričajte se, da se RPi in NodeMCU povežeta z istim omrežjem.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Ta razdelek opredeljuje strežnik Adafruit, v tem primeru naslov IP vašega Raspberry Pi in strežniških vrat.
#define AIO_SERVER "ip naslov vašega Pi" #define AIO_SERVERPORT 1883
Spodnja polja bodo ostala prazna, ker ne uporabljamo oblaka Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Nato ustvarite razred ESP8266 WiFiClient za povezavo s strežnikom MQTT.
Odjemalec WiFiClient;
Nastavite razred odjemalca MQTT tako, da vnesete odjemalca WiFi in strežnik MQTT ter podatke za prijavo.
Adafruit_MQTT_Client mqtt (& odjemalec, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Nastavite vir, imenovan "Temperatura" za objavo temperature.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ viri / temperatura");
Nastavite vir z imenom 'led1' za naročanje na spremembe.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ viri / led");
V nastavitveni funkciji prijavimo PIN NodeMCU, za katerega želite dobiti izhod. Nato NodeMCU povežite z dostopno točko Wi-Fi.
void setup () { Serial.begin (115200); zamuda (10); pinMode (LED, IZHOD); Serial.println (F ("Demofruit MQTT demo")); // Povežite se z dostopno točko WiFi. Serial.println (); Serial.println (); Serial.print ("Povezovanje z"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); medtem ko (WiFi.status ()! = WL_CONNECTED) { …. ... ... Nastavite naročnino na MQTT za led feed. mqtt.subscribe (& led1); }
V funkciji zanke bomo s pomočjo MQTT_connect () zagotovili, da je povezava s strežnikom MQTT živa; funkcijo.
void loop () { MQTT_connect ();
Zdaj se naročite na 'led' vir in pridobite niz od posrednika MQTT in pretvorite ta niz v število s pomočjo atoi (); funkcijo in s pomočjo digitalWrite () to številko zapišite na LED pin ; funkcijo.
Naročnina Adafruit_MQTT_Subscribe *; while ((subscription = mqtt.readSubscription (20000))) { if (subscription == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Zdaj dobite temperaturo v spremenljivko in to vrednost objavite s funkcijo Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } else { Serial.println (F ("V redu!")); }
Celotna koda s predstavitvenim videoposnetkom je podana na koncu te vadnice. Naložite kodo na ploščo NodeMCU in odprite aplikacijo nadzorne plošče MQTT, ki ste jo prenesli v pametni telefon.
Raspberry Pi GPIO lahko nadzirate tudi od koder koli na svetu z uporabo oblaka MQTT, kot so Adafruit IO, MQTT.IO itd., O čemer se bomo naučili v naslednji vadnici.