- Čo je MQTT?
- Inštalácia Mosquitto MQTT Broker na Raspberry Pi
- Testovanie sprostredkovateľa Mosquitto Raspberry Pi
- Schéma zapojenia
- Kód a vysvetlenie
MQTT je protokol používaný na odosielanie a prijímanie správ cez internet. Tento protokol sme predtým používali na zverejnenie údajov na internete v Iot Electricity meter a Raspberry Pi Alexa. V tomto tutoriáli sa dozvieme viac o MQTT a pojmoch s ním súvisiacich. Tu použijeme Raspberry Pi ako miestneho sprostredkovateľa MQTT a budeme ovládať LED pripojenú k NodeMCU ESP12E prostredníctvom palubnej dosky aplikácie MQTT. Senzor DHT11 je tiež pripojený k NodeMCU, takže získavame údaje o teplote a vlhkosti na prístrojovej doske MQTT, a to opäť použitím Raspberry Pi ako lokálneho sprostredkovateľa MQTT.
Začnime teda porozumením MQTT a pojmom, ktoré s ním súvisia.
Čo je MQTT?
MQTT je skratka pre Message Queue Telemetry Transport, ktorú navrhla spoločnosť IBM. Tento protokol je jednoduchý a ľahký, ktorý sa používa na odosielanie a prijímanie správ cez internet a je určený pre zariadenia, ktoré využívajú nízku šírku pásma. V súčasnosti sa tento protokol často používa v zariadeniach IoT na odosielanie a prijímanie údajov zo senzorov. V systémoch domácej automatizácie založených na IoT možno tento protokol ľahko použiť aj bez použitia väčšiny internetových údajov.
V MQTT sa často používa niekoľko výrazov:
- Prihlásiť sa na odber a zverejniť
- Správa
- Téma
- Sprostredkovateľ
1. Prihlásenie na odber a zverejnenie: Prihlásenie na odber znamená získanie údajov z iného zariadenia a zverejnenie znamená odoslanie údajov do iného zariadenia.
Keď zariadenie 1 odosiela údaje do zariadenia 2, potom je známe ako vydavateľ a iné ako predplatiteľ a naopak.
2. Správa: Správy sú informácie, ktoré odosielame a prijímame. Môže to byť údajový alebo akýkoľvek typ príkazu. Napríklad, ak zverejňujeme údaje o teplote do cloudu, potom sú tieto údaje o teplote známe ako Správa.
3. Téma: Týmto spôsobom zaregistrujete záujem o prichádzajúce správy alebo zadáte, kde chcete správu zverejniť. Témy sú reprezentované reťazcami oddelenými lomkou. Údaje o témach sa zverejňujú pomocou nástroja MQTT a potom sa zariadenie MQTT prihlási na odber témy a získa údaje.
4. MQTT Broker: Táto vec je zodpovedná za prijímanie všetkých správ od vydavateľov, filtruje správy a potom zverejňuje správy predplatiteľom, ktorí o ne majú záujem.
Ak je tento sprostredkovateľ hostený v cloude, nazýva sa to cloud MQTT. Existuje veľa cloudových služieb MQTT ako Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure atď. MQTT sa dá použiť aj s populárnym cloudom Amazon AWS, čo sme si vysvetlili v tutoriáli Začíname s Amazon AWS.
Môžeme si vyrobiť vlastného brokera MQTT pomocou Raspberry Pi. Bude to miestny sprostredkovateľ MQTT, tj. Údaje z miestnej siete môžete odosielať a prijímať iba odkiaľkoľvek. Takže tu nainštalujeme brokera Mosquitto MQTT na Raspberry Pi, aby sa stal lokálnym brokerom MQTT, a pošleme údaje o teplote z NodeMCU do aplikácie dashboardu MQTT. Tiež budeme pomocou sprostredkovateľa ovládať LED pripojenú k NodeMCU.
Inštalácia Mosquitto MQTT Broker na Raspberry Pi
Otvorte terminál na vašom Raspberry pi a zadajte nasledujúce príkazy na inštaláciu sprostredkovateľa
sudo apt aktualizácia sudo apt nainštalovať -y mosquitto mosquitto-klientov
Počkajte na dokončenie inštalácie. Teraz, aby ste spustili sprostredkovateľa pri štarte malinovej pi, zadajte nasledujúci príkaz
sudo systemctl povoliť mosquitto.service
To je všetko, všetci sme pripravení spustiť nášho sprostredkovateľa MQTT. Ak chcete skontrolovať, či je správne nainštalovaný, zadajte nasledujúci príkaz
komár -v
Tento príkaz vám poskytne verziu vášho sprostredkovateľa MQTT. Malo by to byť 1.4.x alebo vyššie.
Testovanie sprostredkovateľa Mosquitto Raspberry Pi
1. Spustite brokera Mosquitto na pozadí pomocou nižšie uvedeného príkazu
mosquitto -d
2. Teraz si prihlásime na odber témy v príklade Topic pomocou nasledujúceho príkazu
mosquitto_sub -d -t príkladTéma
3. Teraz zverejníme správu pre exampleTopic
mosquitto_pub -d -t exampleTopic -m "Hello world!"
Dostanete Hello world! Správa v predplatiteľskom termináli.
Teraz je čas kontrolovať a získavať údaje z iného zariadenia, v našom prípade používame aplikáciu dashboardu NodeMCU a MQTT .
- Najskôr budeme ovládať LED zaslaním príkazu pomocou aplikácie, takže v tomto prípade sa NodeMCU bude správať ako predplatiteľ a aplikácia ako vydavateľ.
- Potom má ESP12E k sebe pripojený aj senzor DHT11 a toto meranie teploty odosiela do aplikácie Mobile MQTT, takže v tomto prípade bude predplatiteľom mobilný telefón a vydavateľom bude NodeMCU. A na preposielanie týchto správ na príslušné Témy sa používa broker Mosquitto MQTT.
Schéma zapojenia
Pripojte obvod podľa obrázka. Tu sa používa DHT11 na odčítanie teploty, ale je možné použiť aj teplotný snímač LM35. Senzor DHT11 sme už použili na stavbu meteorologickej stanice v mnohých našich projektoch, napríklad aj s NodeMCU.
Začnime písať kód pre NodeMCU na prihlásenie a zverejnenie údajov.
Kód a vysvetlenie
Tu použijeme šablónu knižnice Adafruit MQTT a zmeníme požadované veci v kóde. Rovnaký kód možno použiť na zverejnenie a prihlásenie sa na odber dát do cloudu Adafruit IO iba zmenou niekoľkých vecí.Na tento účel si stiahnite knižnicu Adafruit MQTT z aplikácie Skica -> Zahrnúť knižnicu -> Spravovať knižnice. Vyhľadajte Adafruit MQTT a nainštalujte ho. Po nainštalovaní knižnice. Prejdite na príklady -> knižnica Adafruit mqtt -> mqtt_esp8266
Potom tento kód upravte podľa našej IP adresy Raspberry Pi a poverení Wi-Fi.
Zahrňte všetky knižnice pre ESP8266WIFI a Adafruit MQTT .
#include
Potom definujte SSID a heslo pre vašu Wi-Fi, ku ktorej sa chcete pripojiť k svojmu ESP-12e. Zaistite, aby sa vaše RPi a NodeMCU pripojili k rovnakej sieti.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Táto časť definuje server Adafruit, v tomto prípade adresu IP vášho Raspberry Pi a port servera.
#define AIO_SERVER "ip adresa vášho Pi" #define AIO_SERVERPORT 1883
Polia nižšie zostanú prázdne, pretože nepoužívame cloud Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Potom vytvorte triedu ESP8266 WiFiClient na pripojenie k serveru MQTT.
Klient WiFiClient;
Nastavením triedy klienta MQTT odovzdaním klienta WiFi a servera MQTT a prihlasovacích údajov.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Nastavte informačný kanál s názvom „Teplota“ na zverejnenie teploty.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Nastavte informačný kanál s názvom „led1“ na prihlásenie na odber zmien.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Vo funkcii nastavenia deklarujeme PIN NodeMCU, na ktorý chcete dostať výstup. Potom pripojte NodeMCU k prístupovému bodu Wi-fi.
void setup () { Serial.begin (115200); oneskorenie (10); pinMode (LED, VÝSTUP); Serial.println (F ("Adafruit MQTT demo")); // Pripojenie k prístupovému bodu WiFi. Serial.println (); Serial.println (); Serial.print („pripája sa k“); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) { …. …. ... Nastaviť predplatné MQTT pre informačný kanál LED. mqtt.subscribe (& led1); }
Vo funkcii loop zabezpečíme, aby bolo pripojenie k serveru MQTT živé pomocou MQTT_connect (); funkcia.
void loop () { MQTT_connect ();
Teraz sa prihláste na odber informačného kanála „led“ a získajte reťazec od sprostredkovateľa MQTT a tento reťazec preveďte na číslo pomocou atoi (); funkcie a toto číslo napíš na pin LED pomocou digitalWrite (); funkcia.
Adafruit_MQTT_Subscribe * predplatné; 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); }
Teraz získajte teplotu v premennej a túto hodnotu zverejnite pomocou funkcie Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
Celý kód s demonštračným videom je uvedený na konci tohto tutoriálu. Nahrajte kód na dosku NodeMCU a otvorte aplikáciu palubnej dosky MQTT, ktorú ste si stiahli do smartphonu.
Môžete tiež ovládať Raspberry Pi GPIO odkiaľkoľvek na svete pomocou cloudu MQTT, ako sú Adafruit IO, MQTT.IO atď., O ktorých sa dozvieme v ďalšom tutoriále.