- Hva er MQTT?
- Installere Mosquitto MQTT Broker på Raspberry Pi
- Testing Raspberry Pi Mosquitto Broker
- Kretsdiagram
- Kode og forklaring
MQTT er en protokoll som brukes til å sende og motta meldinger over internett. Vi har tidligere brukt denne protokollen i Iot Electricity meter og Raspberry Pi Alexa for å publisere dataene på internett. I denne opplæringen vil vi lære mer om MQTT og vilkårene relatert til den. Her vil vi bruke Raspberry Pi som lokal MQTT-megler og kontrollere en LED som er koblet til NodeMCU ESP12E gjennom MQTT-applikasjonsdashboard. En DHT11-sensor er også koblet til NodeMCU, slik at vi får avlesning av temperatur og fuktighet på MQTT-dashbordet, ved å bruke Raspberry Pi som lokal MQTT-megler.
Så, la oss starte med å undervurdere MQTT og vilkårene relatert til den.
Hva er MQTT?
MQTT står for Message Queue Telemetry Transport som er designet av IBM. Denne protokollen er enkel og lett som brukes til å sende og motta meldinger over internett, og den er designet for enheter som har lav båndbredde. I dag brukes denne protokollen ofte i IoT-enhetene for å sende og motta sensordataene. I IoT-baserte hjemmeautomatiseringssystemer kan denne protokollen enkelt brukes uten å bruke mye av internettdata.
Det er få ord som brukes ofte i MQTT:
- Abonner og publiser
- Beskjed
- Emne
- Megler
1. Abonner og publiser: Abonner betyr å hente dataene fra andre enheter, og publisere betyr å sende dataene til andre enheter.
Når enhet1 sender dataene til enhet2, er det kjent som utgiver, og en annen er abonnent og omvendt.
2. Melding: Meldinger er informasjonen vi sender og mottar. Det kan være data eller en hvilken som helst kommando. For eksempel, hvis vi publiserer temperaturdataene til skyen, er disse temperaturdataene kjent som Message.
3. Emne: Dette er måten du registrerer interesse for innkommende meldinger eller hvordan du spesifiserer hvor du vil publisere meldingen. Temaene er representert med strenger atskilt med en skråstrek fremover. Data publiseres om emnene ved hjelp av MQTT, og deretter abonnerer MQTT-enheten på emnet for å få dataene.
4. MQTT Megler: Denne tingen er ansvarlig for å motta alle meldinger fra utgivere, filtrere meldingene og deretter publisere meldingene til abonnentene som er interessert i dem.
Når denne megleren er vert på skyen, kalles den MQTT sky. Det er mange skybaserte MQTT-tjenester som Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, etc. MQTT kan også brukes med populær Amazon AWS-sky, som vi har forklart i Komme i gang med Amazon AWS tutorial.
Vi kan lage vår egen MQTT-megler ved hjelp av Raspberry Pi. Dette vil være den lokale MQTT-megleren, dvs. at du ikke kan sende og motta dataene på ditt lokale nettverk, ikke hvor som helst. Så her vil vi installere Mosquitto MQTT-megler i Raspberry Pi for å gjøre den til lokal MQTT-megler, og vil sende temperaturdataene fra NodeMCU til MQTT-dashbordapplikasjonen. Vi vil også kontrollere en LED koblet til NodeMCU ved hjelp av megleren.
Installere Mosquitto MQTT Broker på Raspberry Pi
Åpne terminalen i Raspberry pi og skriv inn følgende kommandoer for å installere megleren
sudo apt oppdater sudo apt installer -y mygg mygg-klienter
Vent til installasjonen er ferdig. For å starte megleren ved oppstart av bringebær pi, skriv inn følgende kommando
sudo systemctl aktiver mosquitto.service
Det er det, vi er klar til å lansere vår MQTT-megler. For å kontrollere at den er riktig installert, skriv inn følgende kommando
mygg -v
Denne kommandoen gir deg versjonen av din MQTT-megler. Det skal være 1.4.x eller høyere.
Testing Raspberry Pi Mosquitto Broker
1. Kjør Mosquitto-megleren i bakgrunnen ved å bruke kommandoen nedenfor
mygg -d
2. Nå vil vi abonnere på et emne i exampleTopic ved hjelp av følgende kommando
mosquitto_sub -d -t exampleTopic
3. Nå vil vi publisere noen meldinger til exampleTopic
mosquitto_pub -d -t eksempelTopic -m "Hallo verden!"
Du vil motta Hello world! Melding i abonnentterminalen.
Nå er det på tide å kontrollere og få data fra en annen enhet i vårt tilfelle vi bruker NodeMCU og MQTT dashboard- applikasjonen.
- Først vil vi kontrollere en LED ved å sende kommando ved hjelp av App, så i dette tilfellet oppfører NodeMCU seg som abonnent og App som utgiver.
- Deretter har ESP12E også DHT11-sensor koblet til seg, og den sender denne temperaturlesingen til Mobile MQTT-applikasjonen, så i dette tilfellet vil mobil være abonnent og NodeMCU vil være utgiver. Og for å videresende disse meldingene på de respektive emnene, brukes Mosquitto MQTT-megleren.
Kretsdiagram
Koble kretsen som vist i diagrammet. Her brukes DHT11 til temperaturavlesningene, men en LM35 temperatursensor kan også brukes. Vi brukte allerede DHT11-sensoren i mange av våre prosjekter, inkludert NodeMCU for å bygge en værstasjon.
La oss begynne å skrive koden for NodeMCU for å abonnere og publisere dataene.
Kode og forklaring
Her vil vi bruke Adafruit MQTT-bibliotekmalen og vil endre de nødvendige tingene i koden. Den samme koden kan brukes til å publisere og abonnere dataene på Adafruit IO sky bare ved å endre få ting.For dette lastet ned Adafruit MQTT-biblioteket fra Sketch -> Inkluder bibliotek -> Administrer biblioteker. Søk etter Adafruit MQTT og installer den. Etter installasjon av biblioteket. Gå til eksempler -> Adafruit mqtt-bibliotek -> mqtt_esp8266
Rediger deretter denne koden i henhold til vår Raspberry Pi IP-adresse og Wi-Fi-legitimasjon.
Inkluder alle bibliotekene for ESP8266WIFI og Adafruit MQTT .
#inkludere
Definer deretter SSID og passord for Wi-Fi, som du vil koble til ESP-12e fra. Forsikre deg om at RPi og NodeMCU kobles til det samme nettverket.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Denne delen definerer Adafruit-serveren, i dette tilfellet IP-adressen til Raspberry Pi og serverporten.
#define AIO_SERVER "ip address of your Pi" #define AIO_SERVERPORT 1883
Feltene nedenfor vil forbli tomme fordi vi ikke bruker Adafruit-skyen.
#define AIO_USERNAME "" #define AIO_KEY ""
Opprett deretter en ESP8266 WiFiClient-klasse for å koble til MQTT-serveren.
WiFiClient-klient;
Sett opp MQTT-klientklassen ved å sende inn WiFi-klienten og MQTT-serveren og påloggingsinformasjonen.
Adafruit_MQTT_Client mqtt (& klient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Sett opp en feed kalt 'Temperatur' for å publisere temperaturen.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Sett opp en feed kalt 'led1' for å abonnere på endringer.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
I oppsettfunksjonen erklærer vi PIN for NodeMCU som du vil få utdata på. Koble deretter NodeMCU til Wi-fi-tilgangspunktet.
ugyldig oppsett () { Serial.begin (115200); forsinkelse (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Koble til WiFi tilgangspunkt. Serial.println (); Serial.println (); Serial.print ("Koble til"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); mens (WiFi.status ()! = WL_CONNECTED) { …. …. … Konfigurer MQTT-abonnement for ledet feed. mqtt.abscribe (& led1); }
I loop- funksjon vil vi sikre at forbindelsen til MQTT-serveren er i live ved hjelp av MQTT_connect (); funksjon.
ugyldig sløyfe () { MQTT_connect ();
Abonner nå 'ledet' feed og få strengen fra MQTT-megler og konverter denne strengen til nummer ved hjelp av atoi (); funksjon og skriv dette nummeret til LED-pin ved hjelp av digitalWrite (); funksjon.
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); }
Nå får du temperaturen i en variabel og publiserer denne verdien ved hjelp av Temperature.publish (t) -funksjonen.
flyte t = dht.readTemperature (); … .. hvis (! Temperature.publish (t)) { Serial.println (F ("Mislyktes")); } annet { Serial.println (F ("OK!")); }
Full kode med en demonstrasjonsvideo er gitt på slutten av denne veiledningen. Last opp koden til NodeMCU-kortet og åpne MQTT dashboard-appen du har lastet ned i smarttelefonen.
Du kan også kontrollere Raspberry Pi GPIO fra hvor som helst i verden ved hjelp av MQTT-sky som Adafruit IO, MQTT.IO osv., Som vi vil lære i neste opplæring.