- Mi az MQTT?
- A Mosquitto MQTT Broker telepítése a Raspberry Pi-re
- A Raspberry Pi Mosquitto Broker tesztelése
- Kördiagramm
- Kód és magyarázat
Az MQTT az interneten keresztüli üzenetek küldésére és fogadására használt protokoll. Korábban ezt a protokollt használtuk az Iot Electricity meterben és a Raspberry Pi Alexa-ban, hogy közzétegyük az adatokat az interneten. Ebben az oktatóanyagban többet megtudhatunk az MQTT-ről és a hozzá kapcsolódó kifejezésekről. Itt a Raspberry Pi-t fogjuk használni helyi MQTT-közvetítőként, és vezérelhetünk egy LED-et, amely az MQTT alkalmazás irányítópultján keresztül kapcsolódik a NodeMCU ESP12E-hez. Egy DHT11 érzékelő is csatlakozik a NodeMCU-hoz, így megkapjuk a hőmérséklet és a páratartalom leolvasását az MQTT műszerfalon, újból a Raspberry Pi-t használva helyi MQTT-közvetítőként.
Tehát kezdjük az MQTT és az ahhoz kapcsolódó kifejezések alulértékelésével.
Mi az MQTT?
Az MQTT az IBM által tervezett Message Queue Telemetry Transport rövidítése. Ez a protokoll egyszerű és könnyű, amelyet üzenetek küldésére és fogadására használnak az interneten keresztül, és alacsony sávszélességű eszközökhöz készült. Manapság ezt a protokollt gyakran használják az IoT-eszközök az érzékelők adatainak küldésére és fogadására. Az IoT-alapú otthoni automatizálási rendszerekben ez a protokoll könnyen használható anélkül, hogy sok internetes adatot használna.
Kevés olyan kifejezés van, amelyet gyakran használnak az MQTT-ben:
- Feliratkozás és közzététel
- Üzenet
- Téma
- Bróker
1. Feliratkozás és közzététel: Az előfizetés azt jelenti, hogy az adatokat más eszközről szerezzük be, a közzététel pedig az adatok más eszközre történő elküldését jelenti.
Amikor az 1. eszköz elküldi az adatokat a 2. eszköznek, akkor Publisher néven ismeretes, egy másik pedig előfizető és fordítva.
2. Üzenet: Az üzenetek azok az információk, amelyeket küldünk és fogadunk. Ez lehet adat vagy bármilyen típusú parancs. Például, ha a hőmérsékleti adatokat közzétesszük a felhőben, akkor ezeket a hőmérsékleti adatokat Message néven ismerjük.
3. Téma: Így regisztrálja a bejövő üzenetek iránti érdeklődést, vagy hogyan adja meg az üzenet közzétételének helyét. A témákat karakterláncokkal ábrázolják, perjel elválasztva. Az adatok közzététele a témákról az MQTT használatával történik, majd az MQTT eszköz feliratkozik a témára az adatok megszerzéséhez.
4. MQTT Broker: Ez a dolog felelős azért, hogy az összes üzenetet megkapja a kiadóktól, szűrje az üzeneteket, majd közzétegye az üzeneteket az őket érdeklő előfizetőknek.
Amikor ezt a brókert a felhőben tárolják, akkor MQTT felhőnek hívják. Sok felhőalapú MQTT szolgáltatás létezik, például Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure stb.
Saját MQTT brókert készíthetünk a Raspberry Pi segítségével. Ez lesz a helyi MQTT bróker, vagyis csak bárhonnan küldheti és fogadhatja az adatokat a helyi hálózatán. Tehát itt telepítjük a Mosquitto MQTT brókert a Raspberry Pi-be, hogy helyi MQTT brókerré váljon, és elküldjük a hőmérsékleti adatokat a NodeMCU-ról az MQTT műszerfala alkalmazásra. Ezenkívül a közvetítő segítségével vezéreljük a NodeMCU-hoz csatlakoztatott LED-et.
A Mosquitto MQTT Broker telepítése a Raspberry Pi-re
Nyissa meg a Raspberry pi terminálját, és írja be a következő parancsokat a közvetítő telepítéséhez
sudo apt update sudo apt install -y mosquitto mosquitto-kliensek
Várja meg a telepítés befejezését. A bróker indításához a málna pi indításakor írja be a következő parancsot
sudo systemctl engedélyezi a mosquitto.service szolgáltatást
Ennyi, mindannyian készen állunk az MQTT bróker elindítására. A megfelelő telepítés ellenőrzéséhez írja be a következő parancsot
szúnyog -v
Ez a parancs megadja az MQTT közvetítő verzióját. Ennek 1.4.x vagy magasabbnak kell lennie.
A Raspberry Pi Mosquitto Broker tesztelése
1. Futtassa a Mosquitto brókert a háttérben az alábbi paranccsal
szúnyog -d
2. Most feliratkozunk egy témára az exampleTopic alkalmazásban a következő paranccsal
mosquitto_sub -d -t példaTéma
3. Most közzéteszünk néhány üzenetet az exampleTopic oldalon
mosquitto_pub -d -t exampleTopic -m "Hello világ!"
Megkapja a Hello világot! Üzenet az előfizetői terminálon.
Itt az ideje, hogy ellenőrizzük és megszerezzük az adatokat egy másik eszközről, esetünkben a NodeMCU és az MQTT műszerfal alkalmazást használjuk.
- Először egy LED-et fogunk vezérelni az App használatával történő parancsküldéssel, így ebben az esetben a NodeMCU előfizetőként, az App pedig kiadóként viselkedik.
- Ezután az ESP12E DHT11 érzékelőt is csatlakoztat, és ezt a hőmérsékleti értéket elküldi a Mobile MQTT alkalmazásnak, így ebben az esetben a mobil lesz az előfizető, a NodeMCU pedig a kiadó. Ezen üzenetek továbbításához az adott témakörökhöz a Mosquitto MQTT brókert használják.
Kördiagramm
Csatlakoztassa az áramkört az ábra szerint. Itt a DHT11-et használják a hőmérséklet-leolvasásokhoz, de LM35 hőmérséklet-érzékelő is használható. Számos projektünkben már használtuk a DHT11 érzékelőt, ideértve a NodeMCU-val is egy időjárási állomás építését.
Kezdjük el írni a kódot a NodeMCU számára az adatok feliratkozásához és közzétételéhez.
Kód és magyarázat
Itt az Adafruit MQTT könyvtár sablonját fogjuk használni, és megváltoztatjuk a szükséges dolgokat a kódban. Ugyanazt a kódot lehet felhasználni az Adafruit IO felhő adatainak közzétételéhez és előfizetéséhez, csak néhány dolog megváltoztatásával.Ehhez töltse le az Adafruit MQTT könyvtárat a Sketch -> Könyvtár hozzáadása -> Könyvtárak kezelése menüpontból. Keresse meg az Adafruit MQTT szót, és telepítse. A könyvtár telepítése után. Ugrás a példákra -> Adafruit mqtt könyvtár -> mqtt_esp8266
Ezután szerkessze ezt a kódot a Raspberry Pi IP-címünknek és a Wi-Fi hitelesítő adatoknak megfelelően.
Tartalmazza az ESP8266WIFI és az Adafruit MQTT összes könyvtárát .
#include
Ezután adja meg annak a Wi-Fi-nek az SSID-jét és jelszavát, amelyről az ESP-12e-t csatlakoztatni szeretné. Győződjön meg arról, hogy az RPi és a NodeMCU ugyanazzal a hálózattal csatlakozik.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Ez a szakasz meghatározza az Adafruit szervert, ebben az esetben a Raspberry Pi és a kiszolgáló portjának IP-címét.
#define AIO_SERVER "a pi IP-címe" #define AIO_SERVERPORT 1883
Az alábbi mezők üresek maradnak, mert nem az Adafruit felhőt használjuk.
#define AIO_USERNAME "" #define AIO_KEY ""
Ezután hozzon létre egy ESP8266 WiFiClient osztályt, hogy csatlakozzon az MQTT szerverhez.
WiFiClient kliens;
Állítsa be az MQTT kliens osztályt a WiFi kliens és az MQTT szerver és a bejelentkezési adatok megadásával.
Adafruit_MQTT_Client mqtt (& kliens, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
A hőmérséklet közzétételéhez állítson be egy „Hőmérséklet” nevű feedet.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Állítsa be a „led1” nevű hírcsatornát a változásokra való feliratkozáshoz.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
A telepítési funkcióban deklaráljuk annak a NodeMCU-nak a PIN-kódját, amelyen kimenetet szeretne kapni. Ezután csatlakoztassa a NodeMCU-t a Wi-Fi hozzáférési ponthoz.
void setup () { Soros.kezdés (115200); késés (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT bemutató")); // Csatlakozás a WiFi hozzáférési ponthoz. Soros.println (); Soros.println (); Serial.print ("Csatlakozás a következőkhöz"); Soros.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); míg (WiFi.status ()! = WL_CONNECTED) { …. …. … Állítsa be az MQTT előfizetését a led hírcsatornához. mqtt.subscribe (& led1); }
A hurokfunkcióban az MQTT_connect () használatával biztosítjuk, hogy az MQTT szerverrel fennmaradjon a kapcsolat; funkció.
void loop () { MQTT_csatlakozás ();
Most iratkozzon fel a „led” hírcsatornára és szerezze be a karakterláncot az MQTT alkustól, és alakítsa át ezt a karakterláncot számra az atoi () használatával; funkciót, és írja be ezt a számot a LED csapra a digitalWrite () segítségével; funkció.
Adafruit_MQTT_Subscribe * előfizetés; while ((subscription = mqtt.readSubscription (20000))) { if (subscription == & led1) { Serial.print (F ("Got:")); Soros.println ((char *) led1.hosszabb ideig); int led1_State = atoi ((char *) led1. Utoljára); digitalWrite (LED, led1_State); }
Most kapja meg a hőmérsékletet egy változóban, és tegye közzé ezt az értéket a Temperature.publish (t) függvény segítségével.
úszó t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("sikertelen")); } else { Serial.println (F ("OK!")); }
A bemutató végén egy teljes kód és egy bemutató videó található. Töltse fel a kódot a NodeMCU táblára, és nyissa meg az MQTT műszerfal alkalmazást, amelyet letöltött a Smartphone-ból.
A Raspberry Pi GPIO-t a világ bármely pontjáról vezérelheti az MQTT felhő, például az Adafruit IO, az MQTT.IO stb. Használatával is, amelyet a következő oktatóanyagban tanulunk meg.