- Hvad er MQTT?
- Installation af Mosquitto MQTT Broker på Raspberry Pi
- Test af Raspberry Pi Mosquitto Broker
- Kredsløbsdiagram
- Kode og forklaring
MQTT er en protokol, der bruges til at sende og modtage meddelelser over internettet. Vi har tidligere brugt denne protokol i Iot Electricity meter og Raspberry Pi Alexa til at offentliggøre dataene på internettet. I denne vejledning lærer vi mere at vide om MQTT og de vilkår, der er relateret til den. Her bruger vi Raspberry Pi som lokal MQTT-mægler og styrer en LED tilsluttet NodeMCU ESP12E gennem MQTT-applikationsdashboard. En DHT11-sensor er også forbundet til NodeMCU, så vi får læsning af temperatur og fugtighed på MQTT-dashboard ved igen at bruge Raspberry Pi som lokal MQTT-mægler.
Så lad os starte med at undervurdere MQTT og de vilkår, der er relateret til det.
Hvad er MQTT?
MQTT står for Message Queue Telemetry Transport, som er designet af IBM. Denne protokol er enkel og let, som bruges til at sende og modtage meddelelser over internettet, og den er designet til enheder, der har lav båndbreddeanvendelse. I dag bruges denne protokol ofte i IoT-enhederne til at sende og modtage sensordataene. Også i IoT-baserede hjemmeautomatiseringssystemer kan denne protokol let bruges uden at bruge meget af internetdata.
Der er få udtryk, der ofte bruges i MQTT:
- Abonner og publicer
- Besked
- Emne
- Mægler
1. Abonner og publicer: Abonner betyder at hente data fra anden enhed, og offentliggøre midler til at sende data til anden enhed.
Når enhed1 sender dataene til enhed2, er det kendt som Publisher, og en anden er abonnent og omvendt.
2. Besked: Beskeder er de oplysninger, vi sender og modtager. Det kan være data eller en hvilken som helst kommando. For eksempel, hvis vi offentliggør temperaturdataene til skyen, kaldes disse temperaturdata som Message.
3. Emne: Dette er den måde, du registrerer interesse for indgående beskeder, eller hvordan du angiver, hvor du vil offentliggøre beskeden. Emner er repræsenteret med strenge adskilt af et skråstreg fremad. Data offentliggøres om emnerne ved hjælp af MQTT, og derefter abonnerer MQTT-enheden på emnet for at hente dataene.
4. MQTT-mægler: Denne ting er ansvarlig for at modtage alle beskeder fra udgivere, filtrere beskederne og derefter offentliggøre beskederne til de abonnenter, der er interesserede i dem.
Når denne mægler er hostet i skyen, kaldes det MQTT cloud. Der er mange skybaserede MQTT-tjenester som Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure osv. MQTT kan også bruges med populær Amazon AWS-sky, som vi har forklaret i Kom godt i gang med Amazon AWS-tutorial.
Vi kan lave vores egen MQTT-mægler ved hjælp af Raspberry Pi. Dette vil være den lokale MQTT-mægler, dvs. du kan kun sende og modtage dataene på dit lokale netværk ikke hvor som helst. Så her installerer vi Mosquitto MQTT-mægler i Raspberry Pi for at gøre det til lokal MQTT-mægler og sender temperaturdataene fra NodeMCU til MQTT-dashboard-applikationen. Vi styrer også en LED tilsluttet NodeMCU ved hjælp af mægleren.
Installation af Mosquitto MQTT Broker på Raspberry Pi
Åbn terminalen i din Raspberry pi, og skriv følgende kommandoer for at installere mægleren
sudo apt opdatering sudo apt install -y myg mosquitto-klienter
Vent på, at installationen er færdig. For at starte mægleren ved opstart af hindbær pi skal du skrive følgende kommando
sudo systemctl aktiver mosquitto.service
Det er det, vi er alle klar til at lancere vores MQTT-mægler. For at kontrollere, at den er installeret korrekt, skal du indtaste følgende kommando
myg -v
Denne kommando giver dig versionen af din MQTT-mægler. Det skal være 1.4.x eller derover.
Test af Raspberry Pi Mosquitto Broker
1. Kør Mosquitto-mægleren i baggrunden ved hjælp af nedenstående kommando
myg -d
2. Nu abonnerer vi på et emne i eksempelTopic ved hjælp af følgende kommando
mosquitto_sub -d -t eksempelTopic
3. Nu vil vi offentliggøre en besked til exampleTopic
mosquitto_pub -d -t eksempelTopic -m "Hej verden!"
Du vil modtage Hej verden! Besked i abonnentterminalen.
Nu er det tid til at kontrollere og hente dataene fra en anden enhed, hvis vi bruger NodeMCU og MQTT dashboard- applikationen.
- Først styrer vi en LED ved at sende kommando ved hjælp af App, så i dette tilfælde opfører NodeMCU sig som abonnent og App som udgiver.
- Derefter har ESP12E også DHT11-sensor tilsluttet sig, og den sender denne temperaturmåling til Mobile MQTT-applikationen, så i dette tilfælde vil mobil være abonnent og NodeMCU vil være udgiver. Og for at videresende disse meddelelser på de respektive emner bruges Mosquitto MQTT-mægleren.
Kredsløbsdiagram
Tilslut kredsløbet som vist i diagrammet. Her bruges DHT11 til temperaturmålingerne, men en LM35 temperaturføler kan også bruges. Vi har allerede brugt DHT11-sensorer i mange af vores projekter, herunder med NodeMCU til at bygge en vejrstation.
Lad os begynde at skrive koden for NodeMCU for at abonnere og offentliggøre dataene.
Kode og forklaring
Her bruger vi Adafruit MQTT-biblioteksskabelonen og ændrer de nødvendige ting i koden. Den samme kode kan bruges til at offentliggøre og abonnere på Adafruit IO-skyen ved blot at ændre få ting.Til denne download Adafruit MQTT-biblioteket fra Skitse -> Inkluder bibliotek -> Administrer biblioteker. Søg efter Adafruit MQTT og installer den. Efter installation af biblioteket. Gå til eksempler -> Adafruit mqtt-bibliotek -> mqtt_esp8266
Rediger derefter denne kode i henhold til vores Raspberry Pi IP-adresse og Wi-Fi-legitimationsoplysninger.
Inkluder alle bibliotekerne til ESP8266WIFI og Adafruit MQTT .
#omfatte
Definer derefter SSID og adgangskode til dit Wi-Fi, hvorfra du vil oprette forbindelse til din ESP-12e. Sørg for, at din RPi og NodeMCU opretter forbindelse til det samme netværk.
#definer WLAN_SSID "xxxxxxxx" #definer WLAN_PASS "xxxxxxxxxxx"
Dette afsnit definerer Adafruit-serveren, i dette tilfælde IP-adressen på din Raspberry Pi og serverporten.
#define AIO_SERVER "ip-adresse på din Pi" #define AIO_SERVERPORT 1883
Nedenstående felter forbliver tomme, fordi vi ikke bruger Adafruit-skyen.
#define AIO_USERNAME "" #define AIO_KEY ""
Opret derefter en ESP8266 WiFiClient-klasse for at oprette forbindelse til MQTT-serveren.
WiFiClient-klient;
Opsæt MQTT-klientklassen ved at sende WiFi-klienten og MQTT-serveren og loginoplysninger.
Adafruit_MQTT_Client mqtt (& klient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Opsæt et feed kaldet 'Temperatur' til offentliggørelse af temperaturen.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Konfigurer et feed kaldet 'led1' til abonnement på ændringer.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
I installationsfunktionen erklærer vi PIN-kode for NodeMCU, som du ønsker at få output på. Tilslut derefter NodeMCU til Wi-fi-adgangspunktet.
ugyldig opsætning () { Serial.begin (115200); forsinkelse (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Opret forbindelse til WiFi-adgangspunkt. Serial.println (); Serial.println (); Serial.print ("Opretter forbindelse til"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); mens (WiFi.status ()! = WL_CONNECTED) { …. …. … Opsæt MQTT-abonnement til ledet feed. mqtt.subscribe (& led1); }
I loop- funktion vil vi sikre, at forbindelsen til MQTT-serveren er i live ved hjælp af MQTT_connect (); fungere.
ugyldig sløjfe () { MQTT_connect ();
Abonner nu 'ledet' feed og få strengen fra MQTT-mægler, og konverter denne streng til nummer ved hjælp af atoi (); funktion og skriv dette nummer til LED-pin ved hjælp af digitalWrite (); fungere.
Adafruit_MQTT_Abonner * abonnement; while ((abonnement = mqtt.readSubscription (20000))) { if (abonnement == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Få nu temperaturen i en variabel, og udgiv denne værdi ved hjælp af funktionen Temperature.publish (t) .
flyde t = dht.readTemperature (); … .. hvis (! Temperature.publish (t)) { Serial.println (F ("Mislykket")); } andet { Serial.println (F ("OK!")); }
Fuld kode med en demonstrationsvideo er givet i slutningen af denne tutorial. Upload koden til NodeMCU-kortet, og åbn MQTT-dashboard-appen, som du har downloadet i Smartphone.
Du kan også styre Raspberry Pi GPIO fra hvor som helst i verden ved hjælp af MQTT-sky som Adafruit IO, MQTT.IO osv., Som vi lærer i næste tutorial.