- Co je MQTT?
- Instalace Mosquitto MQTT Broker na Raspberry Pi
- Testování makléře Raspberry Pi Mosquitto
- Kruhový diagram
- Kód a vysvětlení
MQTT je protokol používaný k odesílání a přijímání zpráv přes internet. Tento protokol jsme dříve použili ke zveřejnění dat na internetu v Iot Electricity meter a Raspberry Pi Alexa. V tomto tutoriálu se dozvíme více o MQTT a podmínkách s ním souvisejících. Zde budeme používat Raspberry Pi jako lokálního brokera MQTT a ovládat LED připojenou k NodeMCU ESP12E prostřednictvím řídicího panelu aplikace MQTT. Senzor DHT11 je také připojen k NodeMCU, takže získáváme odečet teploty a vlhkosti na palubní desce MQTT opětovným použitím Raspberry Pi jako místního brokera MQTT.
Začněme tedy porozuměním MQTT a pojmům s ním souvisejících.
Co je MQTT?
MQTT je zkratka pro Message Queue Telemetry Transport, kterou navrhla IBM. Tento protokol je jednoduchý a lehký, který se používá k odesílání a přijímání zpráv přes internet a je určen pro zařízení, která využívají malou šířku pásma. V dnešní době se tento protokol často používá v zařízeních IoT k odesílání a přijímání dat ze senzorů. Také v domácích automatizačních systémech založených na IoT lze tento protokol snadno použít bez použití velké části internetových dat.
V MQTT se často používá několik termínů:
- Přihlaste se k odběru a publikujte
- Zpráva
- Téma
- Makléř
1. Přihlásit se a publikovat: Přihlásit se k odběru znamená získat data z jiného zařízení a publikovat znamená odeslat data do jiného zařízení.
Když zařízení1 odešle data do zařízení2, je známé jako vydavatel a další je odběratel a naopak.
2. Zpráva: Zprávy jsou informace, které odesíláme a přijímáme. Může to být datový nebo jakýkoli typ příkazu. Například pokud publikujeme data o teplotě do cloudu, pak jsou tato data o teplotě známá jako Zpráva.
3. Téma: Toto je způsob, jakým registrujete zájem o příchozí zprávy nebo jak určíte, kde chcete zprávu publikovat. Témata jsou reprezentována řetězci oddělenými lomítkem. Data o tématech jsou publikována pomocí MQTT a poté se zařízení MQTT přihlásí k odběru tématu, aby získala data.
4. MQTT Broker: Tato věc je zodpovědná za přijímání všech zpráv od vydavatelů, filtruje zprávy a poté publikuje zprávy předplatitelům, kteří o ně mají zájem.
Pokud je tento broker hostován v cloudu, nazývá se to cloud MQTT. Existuje mnoho cloudových služeb MQTT, jako jsou Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure atd. MQTT lze také použít s populárním cloudem Amazon AWS, který jsme vysvětlili v tutoriálu Začínáme s Amazon AWS.
Můžeme si vytvořit vlastního MQTT brokera pomocí Raspberry Pi. Bude to místní MQTT broker, tj. Můžete odesílat a přijímat data ve vaší místní síti pouze ne odkudkoli. Takže zde budeme instalovat Mosquitto MQTT makléř v Raspberry Pi, aby bylo místní MQTT broker a pošle údaje o teplotě z aplikace NodeMCU na MQTT palubní desce. Také budeme kontrolovat LED připojenou k NodeMCU pomocí brokera.
Instalace Mosquitto MQTT Broker na Raspberry Pi
Otevřete terminál v Raspberry pi a zadejte následující příkazy pro instalaci brokera
sudo apt update sudo apt install -y mosquitto mosquitto-clients
Počkejte na dokončení instalace. Nyní, abyste spustili brokera při spuštění maliny pi, zadejte následující příkaz
sudo systemctl povolit mosquitto.service
To je vše, jsme připraveni zahájit činnost našeho makléře MQTT. Chcete-li zkontrolovat, zda je správně nainstalován, zadejte následující příkaz
mosquitto -v
Tento příkaz vám poskytne verzi vašeho brokera MQTT. Mělo by to být 1.4.x nebo vyšší.
Testování makléře Raspberry Pi Mosquitto
1. Spusťte brokera Mosquitto na pozadí pomocí níže uvedeného příkazu
mosquitto -d
2. Nyní se přihlásíme k odběru tématu v příkladu Topic pomocí následujícího příkazu
mosquitto_sub -d -t příkladTéma
3. Nyní zveřejníme nějakou zprávu pro exampleTopic
mosquitto_pub -d -t exampleTopic -m "Hello world!"
Obdržíte Hello world! Zpráva v předplatitelském terminálu.
Nyní je čas kontrolovat a získávat data z jiného zařízení, v našem případě používáme aplikaci NodeMCU a MQTT dashboard .
- Nejprve budeme ovládat LED zasláním příkazu pomocí aplikace, takže v tomto případě se NodeMCU chová jako odběratel a aplikace jako vydavatel.
- Poté má ESP12E také připojený snímač DHT11 a toto čtení teploty odesílá do aplikace Mobile MQTT, takže v tomto případě bude předplatitelem mobilní zařízení a vydavatelem bude NodeMCU. A k předávání těchto zpráv na příslušná témata se používá makléř Mosquitto MQTT.
Kruhový diagram
Připojte obvod podle obrázku. Zde se používá DHT11 pro odečty teploty, ale lze použít také teplotní čidlo LM35. Senzor DHT11 jsme již použili v mnoha našich projektech, včetně NodeMCU, k vybudování meteorologické stanice.
Začněme psát kód pro NodeMCU k odběru a publikování dat.
Kód a vysvětlení
Zde použijeme šablonu knihovny Adafruit MQTT a změníme požadované věci v kódu. Stejný kód lze použít k publikování a odběru dat do cloudu Adafruit IO pouhou změnou několika věcí.Z tohoto důvodu si stáhněte knihovnu Adafruit MQTT z aplikace Skica -> Zahrnout knihovnu -> Spravovat knihovny. Vyhledejte Adafruit MQTT a nainstalujte jej. Po instalaci knihovny. Přejít na příklady -> Knihovna Adafruit mqtt -> mqtt_esp8266
Poté tento kód upravte podle naší IP adresy Raspberry Pi a pověření Wi-Fi.
Zahrňte všechny knihovny pro ESP8266WIFI a Adafruit MQTT .
#zahrnout
Poté definujte SSID a heslo pro vaši Wi-Fi, ze které chcete připojit svůj ESP-12e. Ujistěte se, že se vaše RPi a NodeMCU připojují ke stejné síti.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Tato část definuje server Adafruit, v tomto případě IP adresu vašeho Raspberry Pi a port serveru.
#define AIO_SERVER "ip adresa vašeho Pi" #define AIO_SERVERPORT 1883
Níže uvedená pole zůstanou prázdná, protože nepoužíváme cloud Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Poté vytvořte třídu ESP8266 WiFiClient pro připojení k serveru MQTT.
WiFiClient klient;
Nastavte třídu klienta MQTT předáním klienta WiFi a serveru MQTT a přihlašovacích údajů.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Nastavte zdroj s názvem „Teplota“ pro publikování teploty.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Chcete-li se přihlásit k odběru změn, nastavte zdroj s názvem „led1“.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Ve funkci nastavení deklarujeme PIN NodeMCU, na který chcete získat výstup. Poté připojte NodeMCU k přístupovému bodu Wi-fi.
void setup () { Serial.begin (115200); zpoždění (10); pinMode (LED, VÝSTUP); Serial.println (F ("Adafruit MQTT demo")); // Připojte se k přístupovému bodu WiFi. Serial.println (); Serial.println (); Serial.print ("Připojení k"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) { …. …. … Nastavit předplatné MQTT pro zdroj LED. mqtt.subscribe (& led1); }
Ve funkci smyčky zajistíme, aby připojení k serveru MQTT bylo živé pomocí MQTT_connect (); funkce.
void loop () { MQTT_connect ();
Nyní se přihlaste k odběru kanálu „led“ a získejte řetězec od brokera MQTT a převeďte tento řetězec na číslo pomocí atoi (); funkce a zapište toto číslo na pin LED pomocí digitalWrite (); funkce.
Adafruit_MQTT_Subscribe * předplatné; 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); }
Nyní získejte teplotu v proměnné a tuto hodnotu publikujte pomocí funkce Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
Celý kód s ukázkovým videem je uveden na konci tohoto kurzu. Nahrajte kód na desku NodeMCU a otevřete aplikaci řídicího panelu MQTT, kterou jste si stáhli do smartphonu.
Můžete také ovládat Raspberry Pi GPIO odkudkoli na světě pomocí cloudu MQTT, jako je Adafruit IO, MQTT.IO atd., O kterém se dozvíme v dalším tutoriálu.