- Hva er MQTT-protokoll?
- Hvordan fungerer MQTT?
- Eclipse Mosquitto-megleren
- Komponenter kreves
- Formørkelse MQTT-testkrets - skjematisk
- Programmering ESP8266 for å etablere kommunikasjon med megler
- Tester MQTT med ESP8266 ved hjelp av Arduino
I løpet av de siste årene har IoT-enheter (Internet of Things) blitt en skille del av hverdagen vår. Fra smarte hjem, smarte pærer til smarte apparater; skapere og utviklere bruker denne teknologien for å skape et nettverk av tilkoblede enheter som gjør vårt daglige liv litt mer spennende. Alt dette er gjort mulig på grunn av den enkle kommunikasjonen. Det er mange mulige måter å kommunisere mellom enheter på, men i kommersielle produkter og hobbyprodukter er en enkelt protokoll som ofte brukes Message Queuing Telemetry Transport (MQTT). Vi har tidligere bygget en stemmestyrt FM-radio ved hjelp av Arduino og Google Assistant som bruker MQTT til å kommunisere med NodeMCU-kortet. Sjekk det ut hvis det høres interessant ut for deg.
I dette prosjektet vil vi bruke en gratis og populær Eclipse MQTT-megler og lære å koble en IoT-enhet (i vårt tilfelle er det en NodeMCU-modul) til en MQTT-megler og overføre data mellom MQTT-megleren og NodeMCU.
Hva er MQTT-protokoll?
Før vi går videre, er det bedre å ha en klar idé om MQTT (Message Queuing Telemetri Transport) protokoll. Det er en lett meldingsprotokoll som bruker publiser / abonner-metoden og oversetter meldinger mellom flere enheter. Ved hjelp av MQTT-protokollen kan vi også sende / motta data og kontrollere forskjellige utdataenheter, som å lese sensordata osv. Den er utviklet på toppen av TCP, og det er derfor den er raskere enn lignende protokoller som HTTP. Bortsett fra det, har den mange andre fordeler i forhold til andre protokoller, som den er veldig lett, så den bruker ikke overflødig minne, den kan fungere med veldig mindre nettverksbåndbredde, i tillegg har den en robust innebygd sikkerhetsprotokoll. Disse funksjonene gjør den egnet for mange applikasjoner.
Hvordan fungerer MQTT?
For å forstå hvordan MQTT-protokollen fungerer, trenger vi bare å forstå tre grunnleggende ting; ovenstående diagram viser at. Vi har også forklart det nedenfor i artikkelen.
MQTT-klient:
En MQTT-klient er hvilken som helst enhet (det kan være en mikrokontroller eller en server) som kjører MQTT-funksjoner og kommuniserer med en sentral server, som er kjent som " megleren ". Megleren håndterer datakommunikasjonen mellom de tilkoblede klientene.
MQTT Utgiver:
Når en klient ønsker å sende informasjon, er klienten kjent som en “Publisher”. Forlaget vil publisere informasjonen om et bestemt emne. “ Emne ” er en bane der vi kan publisere / abonnere på meldinger. Megleren sender deretter informasjonen publisert av brukeren til klientene (også kjent som abonnent) som har abonnert på det spesifikke emnet.
MQTT-abonnent:
Den MQTT abonnent abonnerer på emner på en MQTT megler for å lese meldinger sendt av megleren.
Eclipse Mosquitto-megleren
Eclipse Mosquitto er en MQTT-megler med åpen kildekode, som er lett og er egnet for bruk på IoT-enheter for kommunikasjon. Den MQTT protokollen gir en lett metode for overføring av informasjon ved hjelp av en publiserings / abonnere modell. Hvis du vil lære mer om emnet, kan du besøke det offisielle myggnettstedet.
Sette opp Eclipse Mosquitto-megler:
For å etablere kommunikasjon med megleren, må vi sette den opp først. I dette prosjektet brukes en Android-applikasjon til å publisere og abonnere på informasjonen hos megleren. Følgende trinn vil gi deg en bedre ide om installasjonsprosessen.
Trinn 1:
Først laster du ned hvilken som helst “MQTT-klient” -applikasjon tilgjengelig i Google Play Store / App Store og installerer den. I dette prosjektet brukes et program som heter “MQTT client”, som ser ut som bildet vist nedenfor.
Steg 2:
Klikk på "+" - tegnet for å liste opp tilleggsalternativene i applikasjonen, der vi skal legge til en ny megler. Når du klikker på knappen, vises et nytt skjermbilde som vist nedenfor.
Trinn 3:
Deretter må detaljene til megleren fylles ut i det obligatoriske feltet. Klikk først på alternativet "Aktivert" som vises i applikasjonen. I dette prosjektet brukes Eclipse MQTT-megleren, detaljene som skal fylles ut er gitt nedenfor:
Kallenavn: Gi et navn på din preferanse
Vert: mqtt.eclipse.org
Havn: 1883
Klient-ID: Gi en ID for din preferanse
Ovennevnte detaljer må fylles ut i sine respektive felt. Alle andre felt er ikke nødvendige og kan stå blanke. Etter vellykket fullføring, klikk på lagre-knappen for å lagre megleropplysningene.
Når det er gjort, er installasjonsprosessen for Android-applikasjonen over, og nå kan vi gå videre til maskinvaresiden av ting.
Komponenter kreves
En komplett liste over nødvendige deler er beskrevet nedenfor. Siden denne kretsen er enkel, kan du finne alle nødvendige deler hos din lokale hobbybutikk.
- NodeMCU
- LED
- Brettbrett
- Koble ledninger
- Programmeringskabel
Formørkelse MQTT-testkrets - skjematisk
Kretsskjemaet for Basic MQTT-prosjektet er gitt nedenfor:
Programmering ESP8266 for å etablere kommunikasjon med megler
En enkel Arduino-kode tar seg av all nødvendig kommunikasjon mellom MQTT-megleren og NodeMCU. I denne delen vil vi lære hvordan denne funksjonaliteten fungerer i detalj.
Sett opp Arduino IDE og last opp koden:
Hvis du laster opp koden til NodeMCU for første gang, må du først sette opp Arduino IDE. For å gjøre det, følg bare den enkle instruksjonen nedenfor.
Først åpner du Arduino IDE, og deretter går du til Fil–> Innstillinger–> Innstillinger .
Deretter kopierer du URL-adressen nedenfor og limer den inn i feltet 'Tilleggsstyrer-URL ' og klikker 'OK'. Du kan sjekke bildet nedenfor for å vite hvordan vi har gjort det.
Lenke:
Gå deretter til Verktøy> Tavle> Tavlebehandling . I styrets ledervindu skriver du ESP 8266 i søkeboksen og trykker på enter. Velg deretter den siste versjonen fra rullegardinmenyen, og klikk på installer. Bildet nedenfor gir deg en klar ide.
Når installasjonen er fullført, går du til slutt til Verktøy -> Kort -> og velger NodeMCU 1.0 (ESP-12E-modul). Nå kan du programmere NodeMCU med Arduino IDE. Når vi er ferdig med å konfigurere Arduino IDE, kan vi nå laste opp hele koden. Men først, les på den raske forklaringen av hele koden.
For det første har vi tatt med “ESP8266WiFi.h” for bruk av ESP8266 og “PubSubClient.h” for MQTT.
Du finner ESP8266-biblioteket forhåndsbygd i Arduino-biblioteket, men du må laste ned PubSubClient-biblioteket fra det tilknyttede GitHub-arkivet.
#inkludere
Definer deretter nettverkslegitimasjonen som Wi-Fi-brukernavnet og passordet ditt. Bytt ut legitimasjonen din i stedet for henholdsvis “admin” og “12345678”.
const char * ssid = "admin"; const char * passord = "12345678";
Deretter må vi konfigurere MQTT-serveren. Vi har brukt Eclipse MQTT-serveren for dette prosjektet, og det er derfor serveradressen er oppgitt som “mqtt.eclipse.org”. Men hvis du planlegger å bruke en hvilken som helst annen server som Mosquitto, Adafruit, kan du erstatte den med din spesifikke serveradresse og portnummer.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Deretter opprettes forekomster for klasse WiFiClient og PubSubClient , som skal brukes gjennom hele programmet.
WiFiClient espClient; PubSubClient-klient (espClient);
I delen setup () kaller vi WiFi.begin () først, når du kaller denne metoden, kobles ESP til din foretrukne HotSpot.
WiFi.begin (ssid, passord);
Deretter ser vi etter en vellykket nettverkstilkobling ved hjelp av WiFi.status () -metoden. Etter en vellykket tilkobling blir en melding skrevet ut på Serial Monitor med SSID for det tilkoblede nettverket.
mens (WiFi.status ()! = WL_CONNECTED) {forsinkelse (500); Serial.println ("Koble til WiFi.."); } Serial.print ("Connected to WiFi:"); Serial.println (WiFi.SSID ());
Nå må vi opprette en megler. For det har vi brukt setServer- metoden; denne metoden tar to argumenter som vi har forhåndsdefinert tidligere. Nå, hvis vi vil motta meldinger fra serveren, må vi opprette en tilbakeringingsfunksjon. For det bruker vi metoden setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Nå har vi brukt connect (clientID) -funksjonen til å koble til ESP8266-klienten. Her er clientID navnet på klienten, og det må være unikt. Hvis den er koblet til, kan en vellykket melding vises inne i den serielle skjermen.
hvis (client.connect ("ESP8266")) {Serial.println ("tilkoblet"); } annet {Serial.print ("mislyktes med tilstanden") Serial.println (client.state ()); forsinkelse (2000); }
Deretter kaller vi client.subscribe () , en innebygd MQTT-funksjon, som brukes til å abonnere på et bestemt emne. For dette prosjektet har vi brukt “ esp / test ” som abonnentnavn.
client.subscribe ("esp / test");
Nå kalles MQTTcallback- funksjonen for å sjekke om oppdatert informasjon er tilgjengelig eller ikke. Hvis nye data er tilgjengelige, håndterer denne funksjonen de mottatte dataene og skriver ut en melding i den serielle skjermen med den originale meldingen og emnetavnet der meldingen mottas.
Deretter konverterer vi meldingene til en streng, slik at de kan sammenlignes og kontrolleres for utløsende handlinger. I dette prosjektet slås en LED PÅ / AV ved hjelp av MQTT-kommandoer, som vist i koden nedenfor.
for (int i = 0; i <lengde; i ++) {melding = melding + (char) nyttelast; } Serial.print (melding); hvis (melding == "på") {digitalWrite (LED, HØY); }
Til slutt, for å publisere informasjonen om emnet. Den client.publish () funksjonen brukes. I dette prosjektet blir en trykknappstatus sjekket. Hvis du trykker på knappen, blir en melding publisert til emnet " esp / test1 " som vist nedenfor.
hvis (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } annet; client.loop ();
Tester MQTT med ESP8266 ved hjelp av Arduino
For vår endelige testing skal vi bruke Android-applikasjonen, som vi har satt opp tidligere.
Åpne MQTT-klientapplikasjonen, og sørg for at mobilen din har en aktiv internettforbindelse. I tillegg bør hotspotet som NodeMCU er koblet til ha en aktiv internettforbindelse. Når alt er koblet til internett, skal vi sende en "Hei fra ESP8266" -streng fra ESP-modulen, som vil gjenspeiles i Android-appen, og vi vil få et varsel. Deretter sender vi en streng fra Android-appen, som slår PÅ en LED som er koblet til ESP8266 Node MCU-kortet.
Trinn 1: (Abonner på emnet):
Klikk på Lagret MQTT-alternativet på App, som vi har konfigurert tidligere. Det vil dukke opp et skjermbilde der det blir bedt om å "Abonner på et emne". Vi har tidligere konfigurert emnet som “ esp / test1 ”. Så i Android-appen vil vi skrive “ esp / test1 ”. Klikk på Abonner, slik at du får en skjerm som nedenfor, der den vil bli skrevet som "Ingen melding mottatt" fra det aktuelle emnet.
Klikk nå på knappen 'Connected' som er koblet til nodeMCU. Nå som per vår kode, vil meldingen " Hello from ESP8266 " bli publisert til emnet, og det vil bli varslet på skjermen med mottatt melding som vist nedenfor.
Trinn 2: Publiser til emnet:
For å publisere i emnet, klikk på PIL OPP-knappen i applikasjonen, og den åpner et skjermbilde som vist nedenfor.
Nå, i emnefeltet, skriv " esp / test " og i meldingsfeltet, skriv " på " eller " av " for å slå på og av henholdsvis LED. For eksempel, hvis "på" blir publisert i emnet, vil LED-lampen slås på, og hvis "av" blir publisert i emnet, vil LED-en bli slått av.
Jeg håper du likte artikkelen og lærte noe nytt. Hvis du har spørsmål angående denne artikkelen, er du velkommen til å kommentere nedenfor, eller du kan bruke forumet vårt i stedet.