- Vad är MQTT?
- Installerar Mosquitto MQTT Broker på Raspberry Pi
- Testa Raspberry Pi Mosquitto Broker
- Kretsschema
- Kod och förklaring
MQTT är ett protokoll som används för att skicka och ta emot meddelanden via internet. Vi använde tidigare detta protokoll i Iot Electricity meter och Raspberry Pi Alexa för att publicera data på internet. I den här handledningen lär vi oss mer om MQTT och termerna relaterade till den. Här kommer vi att använda Raspberry Pi som lokal MQTT-mäklare och styra en LED ansluten till NodeMCU ESP12E via MQTT-applikationspanelen. En DHT11-sensor är också ansluten till NodeMCU så att vi får avläsning av temperatur och luftfuktighet på MQTT-instrumentpanelen genom att återigen använda Raspberry Pi som lokal MQTT-mäklare.
Så, låt oss börja med att underskatta MQTT och termerna relaterade till det.
Vad är MQTT?
MQTT står för Message Queue Telemetry Transport som är designad av IBM. Detta protokoll är enkelt och lätt som används för att skicka och ta emot meddelanden över internet och det är utformat för enheter som har låg bandbredd. Numera används detta protokoll ofta i IoT-enheterna för att skicka och ta emot sensordata. I IoT-baserade hemautomationssystem kan detta protokoll enkelt användas utan att använda mycket av internetdata.
Det finns få termer som används ofta i MQTT:
- Prenumerera och publicera
- Meddelande
- Ämne
- Mäklare
1. Prenumerera och publicera: Prenumerera betyder att hämta data från andra enheter och publicera medel för att skicka data till annan enhet.
När enhet1 skickar data till enhet2 är den känd som Publisher och en annan är prenumerant och vice versa.
2. Meddelande: Meddelanden är den information som vi skickar och tar emot. Det kan vara en data eller vilken typ av kommando som helst. Om vi till exempel publicerar temperaturdata till molnet kallas temperaturdata för meddelande.
3. Ämne: Så här registrerar du intresse för inkommande meddelanden eller hur du anger var du vill publicera meddelandet. Ämnen representeras med strängar åtskilda av ett snedstreck framåt. Data publiceras om ämnena med MQTT och sedan prenumererar MQTT-enheten på ämnet för att få data.
4. MQTT-mäklare: Denna sak är ansvarig för att ta emot alla meddelanden från utgivare, filtrera meddelandena och sedan publicera meddelandena till de prenumeranter som är intresserade av dem.
När denna mäklare är värd på molnet kallas det MQTT-moln. Det finns många molnbaserade MQTT-tjänster som Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, etc. MQTT kan också användas med populära Amazon AWS-moln, vilket vi har förklarat i Komma igång med Amazon AWS-handledning.
Vi kan skapa vår egen MQTT-mäklare med Raspberry Pi. Detta kommer att vara den lokala MQTT-mäklaren, dvs. du kan bara skicka och ta emot data i ditt lokala nätverk, inte var som helst. Så här installerar vi Mosquitto MQTT-mäklaren i Raspberry Pi för att göra den till lokal MQTT-mäklare och skickar temperaturdata från NodeMCU till MQTT-instrumentpanelapplikationen. Vi kommer också att styra en LED ansluten till NodeMCU med hjälp av mäklaren.
Installerar Mosquitto MQTT Broker på Raspberry Pi
Öppna terminalen i din Raspberry pi och skriv följande kommandon för att installera mäklaren
sudo apt uppdatera sudo apt installera -y mygga mygg-klienter
Vänta tills installationen är klar. För att starta mäklaren vid start av hallon pi, skriv följande kommando
sudo systemctl aktiverar mosquitto.service
Det är allt, vi är alla redo att lansera vår MQTT-mäklare. För att kontrollera att den är korrekt installerad, ange följande kommando
mygga -v
Detta kommando ger dig versionen av din MQTT-mäklare. Det bör vara 1.4.x eller högre.
Testa Raspberry Pi Mosquitto Broker
1. Kör Mosquitto-mäklaren i bakgrunden med kommandot nedan
mygga -d
2. Nu kommer vi att prenumerera på ett ämne i exempelTopic med följande kommando
mosquitto_sub -d -t exempelTopic
3. Nu kommer vi att publicera ett meddelande till exempelTopic
mosquitto_pub -d -t exempelTopic -m "Hej världen!"
Du får Hej världen! Meddelande i abonnentterminalen.
Nu är det dags att kontrollera och få data från en annan enhet i vårt fall använder vi NodeMCU och MQTT instrumentpanel applikation.
- Först kommer vi att styra en LED genom att skicka kommando med App så i det här fallet beter sig NodeMCU som abonnent och App som utgivare.
- Sedan har ESP12E också DHT11-sensor ansluten till den och den skickar denna temperaturavläsning till Mobile MQTT-applikationen så i det här fallet blir mobil abonnent och NodeMCU kommer att vara utgivare. Och för att vidarebefordra dessa meddelanden på respektive ämnen används Mosquitto MQTT-mäklaren.
Kretsschema
Anslut kretsen enligt bilden. Här används DHT11 för temperaturavläsningar men en LM35 temperatursensor kan också användas. Vi har redan använt DHT11-sensorn i många av våra projekt inklusive NodeMCU för att bygga en väderstation.
Låt oss börja skriva koden för NodeMCU för att prenumerera och publicera data.
Kod och förklaring
Här kommer vi att använda Adafruit MQTT-biblioteksmallen och ändra de nödvändiga sakerna i koden. Samma kod kan användas för att publicera och prenumerera på Adafruit IO-molnet genom att bara ändra några saker.För detta ladda ner Adafruit MQTT-biblioteket från Skiss -> Inkludera bibliotek -> Hantera bibliotek. Sök efter Adafruit MQTT och installera den. Efter att ha installerat biblioteket. Gå till exempel -> Adafruit mqtt-bibliotek -> mqtt_esp8266
Redigera sedan den här koden enligt vår Raspberry Pi IP-adress och Wi-Fi-referenser.
Inkludera alla bibliotek för ESP8266WIFI och Adafruit MQTT .
#omfatta
Definiera sedan SSID och lösenord för ditt Wi-Fi, från vilket du vill ansluta din ESP-12e. Se till att din RPi och NodeMCU ansluter till samma nätverk.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Detta avsnitt definierar Adafruit-servern, i det här fallet IP-adressen till din Raspberry Pi och serverport.
#define AIO_SERVER "ip address of your Pi" #define AIO_SERVERPORT 1883
Nedanstående fält kommer att förbli tomma eftersom vi inte använder Adafruit-molnet.
#define AIO_USERNAME "" #define AIO_KEY ""
Skapa sedan en ESP8266 WiFiClient-klass för att ansluta till MQTT-servern.
WiFiClient-klient;
Ställ in MQTT-klientklassen genom att skicka in WiFi-klienten och MQTT-servern och inloggningsinformation.
Adafruit_MQTT_Client mqtt (& klient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Ställ in ett flöde som heter 'Temperatur' för att publicera temperaturen.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Ställ in ett flöde som heter 'led1' för att prenumerera på ändringar.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
I installationsfunktionen deklarerar vi PIN för NodeMCU som du vill få utdata på. Anslut sedan NodeMCU till Wi-fi-åtkomstpunkten.
ogiltig installation () { Serial.begin (115200); fördröjning (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Anslut till WiFi-åtkomstpunkt. Serial.println (); Serial.println (); Serial.print ("Ansluter till"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); medan (WiFi.status ()! = WL_CONNECTED) { …. …. ... Ställ in MQTT-prenumeration för LED-flöde. mqtt.subscribe (& led1); }
I loop- funktion kommer vi att se till att anslutningen till MQTT-servern är vid liv med MQTT_connect (); fungera.
ogiltig slinga () { MQTT_connect ();
Prenumerera nu på "led" -flöde och hämta strängen från MQTT-mäklaren och konvertera den här strängen till nummer med atoi (); funktion och skriv detta nummer till LED-stift med digitalWrite (); fungera.
Adafruit_MQTT_Prenumerera * prenumeration; medan ((prenumeration = mqtt.readSubscription (20000))) { if (prenumeration == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastad); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Nu får du temperaturen i en variabel och publicerar detta värde med hjälp av funktionen Temperature.publish (t) .
float t = dht.readTemperature (); ... .. om (! Temperature.publish (t)) { Serial.println (F ("Failed")); } annat { Serial.println (F ("OK!")); }
Fullständig kod med en demonstrationsvideo ges i slutet av denna handledning. Ladda upp koden till NodeMCU-kortet och öppna MQTT-instrumentpanelappen som du har laddat ner i Smartphone.
Du kan också styra Raspberry Pi GPIO var som helst i världen med hjälp av MQTT-moln som Adafruit IO, MQTT.IO etc, vilket vi lär oss i nästa handledning.