- Hvad er MQTT-protokol?
- Hvordan fungerer MQTT?
- Eclipse Mosquitto-mægleren
- Komponenter, der kræves
- Eclipse MQTT Test-Circuit - skematisk
- Programmering ESP8266 til etablering af kommunikation med mægler
- Test af MQTT med ESP8266 ved hjælp af Arduino
I løbet af de sidste par år er IoT-enheder (Internet of Things) blevet en uadskillelig del af vores daglige liv. Fra smarte hjem, smarte pærer til smarte apparater; skabere og udviklere inkorporerer denne teknologi for at skabe et netværk af tilsluttede enheder, der gør vores daglige liv lidt mere spændende. Alt dette er blevet mulig på grund af den lette kommunikation. Der er mange mulige måder at kommunikere mellem enheder på, men i kommercielle produkter og hobbyprodukter er en enkelt protokol, der ofte bruges, Message Queuing Telemetry Transport (MQTT). Vi har tidligere bygget en stemmestyret FM-radio ved hjælp af Arduino og Google Assistant, der bruger MQTT til at kommunikere med NodeMCU-kortet. Tjek det, hvis det lyder interessant for dig.
I dette projekt bruger vi en gratis og populær Eclipse MQTT-mægler og lærer at forbinde en IoT-enhed (i vores tilfælde er det et NodeMCU-modul) til en MQTT-mægler og overføre data mellem MQTT-mægleren og NodeMCU.
Hvad er MQTT-protokol?
Før vi går videre, er det bedre at have en klar idé om MQTT (Message Queuing Telemetri Transport) protokol. Det er en let messaging-protokol, der bruger publicerings- / abonnementsmetoden og oversætter meddelelser mellem flere enheder. Ved hjælp af MQTT-protokollen kan vi også sende / modtage data og kontrollere forskellige outputenheder, som læst sensordata osv. Det er udviklet oven på TCP, hvorfor det er hurtigere end lignende protokoller som HTTP. Bortset fra det har det mange andre fordele i forhold til andre protokoller som dens meget lette, så det spiser ikke overskydende hukommelse, det kan arbejde med meget mindre netværksbåndbredde, derudover har det en robust indbygget sikkerhedsprotokol. Disse funktioner gør den velegnet til mange applikationer.
Hvordan fungerer MQTT?
For at forstå funktionen af MQTT-protokollen er vi bare nødt til at forstå tre grundlæggende ting; ovenstående diagram viser det. Vi har også forklaret det nedenfor i artiklen.
MQTT-klient:
En MQTT-klient er en hvilken som helst enhed (det kan være en mikrocontroller eller en server), der kører MQTT-funktioner og kommunikerer med en central server, der er kendt som " mægler ". Mægleren håndterer datakommunikationen mellem de tilsluttede klienter.
MQTT Udgiver:
Når en klient ønsker at sende oplysninger, er klienten kendt som en "Publisher". Forlaget offentliggør oplysningerne om et bestemt emne. “ Emne ” er en sti, hvor vi kan offentliggøre / abonnere på beskeder. Mægleren sender derefter de oplysninger, der er offentliggjort af brugeren, til de klienter (også kendt som abonnent), der har abonneret på det specifikke emne.
MQTT-abonnent:
Den MQTT Abonnenten abonnerer på emner på en MQTT mægler til at læse de beskeder, der sendes af mægler.
Eclipse Mosquitto-mægleren
Eclipse Mosquitto er en MQTT-mægler med open source, som er let og er velegnet til brug på IoT-enheder til kommunikation. Den MQTT protokol giver en let metode til overførsel af information ved hjælp af et offentliggøre / abonnere model. Hvis du vil lære mere om emnet, kan du besøge det officielle myggeside.
Opsætning af Eclipse Mosquitto-mægler:
For at etablere kommunikation med mægleren skal vi først konfigurere den. I dette projekt bruges en Android-applikation til at offentliggøre og abonnere på informationen hos mægleren. De følgende trin giver dig en bedre idé om installationsprocessen.
Trin 1:
Først skal du downloade enhver “MQTT-klient” -applikation, der er tilgængelig i Google Play Store / App Store, og installere den. I dette projekt bruges et program med navnet “MQTT-klient”, der ligner billedet vist nedenfor.
Trin 2:
Klik på “+” - tegnet for at angive de ekstra muligheder i applikationen, hvor vi skal tilføje en ny mægler. Når der klikkes på knappen, vises en ny skærm som vist nedenfor.
Trin 3:
Derefter skal mæglerens detaljer udfyldes i det krævede felt. Klik først på indstillingen "Enabled" vist i applikationen. I dette projekt bruges Eclipse MQTT-mægleren, detaljerne, der skal udfyldes, er angivet nedenfor:
Kælenavn: Giv et navn på din præference
Vært: mqtt.eclipse.org
Havn: 1883
Klient-id: Giv et id for din præference
Ovenstående detaljer skal udfyldes i deres respektive felter. Alle andre felter er ikke nødvendige og kan efterlades tomme. Efter vellykket afslutning skal du klikke på knappen Gem for at gemme mægleroplysningerne.
Når det er gjort, er installationsprocessen for Android-applikationen slut, og nu kan vi gå videre til hardware-siden af tingene.
Komponenter, der kræves
En komplet liste over nødvendige dele er beskrevet nedenfor. Da dette kredsløb er simpelt, kan du finde alle de nødvendige dele i din lokale hobbybutik.
- NodeMCU
- LED
- Brødbræt
- Tilslutning af ledninger
- Programmeringskabel
Eclipse MQTT Test-Circuit - skematisk
Kredsløbsdiagrammet til Basic MQTT-projektet er angivet nedenfor:
Programmering ESP8266 til etablering af kommunikation med mægler
En simpel Arduino-kode tager sig af al den nødvendige kommunikation mellem MQTT-mægleren og NodeMCU. I dette afsnit lærer vi, hvordan denne funktionalitet fungerer i detaljer.
Opsæt Arduino IDE og upload koden:
Hvis du uploader koden til NodeMCU for første gang, skal du først konfigurere Arduino IDE. For at gøre det skal du blot følge den enkle instruktion nedenfor.
Åbn først Arduino IDE, og gå derefter til File–> Preferences–> Settings .
Kopier derefter nedenstående URL og indsæt den i feltet 'Yderligere Board Manager URL ', og klik på 'Ok'. Du kan tjekke billedet nedenfor for at vide, hvordan vi har gjort det.
Link:
Gå derefter til Værktøjer> Board> Boards Manager . Skriv Board ESP 8266 i søgefeltet i Board's Manager-vindue, og tryk på Enter. Vælg derefter den nyeste version fra rullemenuen, og klik på installer. Billedet nedenfor giver dig en klar idé.
Når installationen er afsluttet, skal du endelig gå til Værktøjer -> Board -> og vælge NodeMCU 1.0 (ESP-12E-modul). Nu kan du programmere NodeMCU med Arduino IDE. Da vi er færdige med at konfigurere Arduino IDE, kan vi nu uploade den komplette kode. Men læs først den hurtige forklaring af hele koden.
For det første har vi inkluderet “ESP8266WiFi.h” til brug af ESP8266 og “PubSubClient.h” til MQTT.
Du kan finde ESP8266-biblioteket forudbygget inde i Arduino-biblioteket, men du skal downloade PubSubClient-biblioteket fra det tilknyttede GitHub-lager.
#omfatte
Definer derefter netværksoplysningerne såsom dit Wi-Fi-brugernavn og din adgangskode. Udskift dine legitimationsoplysninger i stedet for henholdsvis “admin” og “12345678”.
const char * ssid = "admin"; const char * password = "12345678";
Dernæst skal vi konfigurere MQTT-serveren. Vi har brugt Eclipse MQTT-serveren til dette projekt, hvorfor serveradressen er angivet som “mqtt.eclipse.org”. Men hvis du planlægger at bruge en hvilken som helst anden server som Mosquitto, Adafruit, kan du erstatte den med din specifikke serveradresse og portnummer.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Derefter oprettes forekomsterne til klasse WiFiClient og PubSubClient , som vil blive brugt i hele programmet.
WiFiClient espClient; PubSubClient-klient (espClient);
I opsætningsafsnittet () kalder vi WiFi.begin () først, når vi kalder denne metode, forbindes ESP til din foretrukne HotSpot.
WiFi.begin (ssid, password);
Dernæst kontrollerer vi for en vellykket netværksforbindelse ved hjælp af metoden WiFi.status () . Efter en vellykket forbindelse udskrives en besked på Serial Monitor med det tilsluttede netværks SSID.
mens (WiFi.status ()! = WL_CONNECTED) {forsinkelse (500); Serial.println ("Opretter forbindelse til WiFi.."); } Serial.print ("Forbundet til WiFi:"); Serial.println (WiFi.SSID ());
Nu skal vi oprette en mægler. Til det har vi brugt setServer- metoden; denne metode tager to argumenter, som vi har foruddefineret tidligere. Hvis vi nu vil modtage beskeder fra serveren, skal vi oprette en tilbagekaldsfunktion. Til det bruger vi metoden setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Nu har vi brugt forbindelsesfunktionen (clientID) til at oprette forbindelse til ESP8266-klienten. Her er clientID navnet på klienten, og det skal være unikt. Hvis den er tilsluttet, kan der vises en succesmeddelelse inde i den serielle skærm.
hvis (client.connect ("ESP8266")) {Serial.println ("forbundet"); } andet {Serial.print ("mislykkedes med tilstand") Serial.println (client.state ()); forsinkelse (2000); }
Dernæst kalder vi client.subscribe () , en indbygget MQTT-funktion, der bruges til at abonnere på et bestemt emne. Til dette projekt har vi brugt “ esp / test ” som vores abonnentnavn.
client.subscribe ("esp / test");
Nu kaldes MQTTcallback- funktionen for at kontrollere, om opdaterede oplysninger er tilgængelige eller ej. Hvis der er nye data til rådighed, håndterer denne funktion de modtagne data og udskriver en meddelelse i den serielle skærm med den originale besked og emne navn, hvor beskeden modtages.
Derefter konverterer vi meddelelserne til en streng, så den kan sammenlignes og kontrolleres for udløsende handlinger. I dette projekt tændes / slukkes en LED ved hjælp af MQTT-kommandoer, som vist i koden nedenfor.
for (int i = 0; i <længde; i ++) {meddelelse = besked + (char) nyttelast; } Serial.print (besked); hvis (besked == "til") {digitalWrite (LED, HIGH); }
Endelig at offentliggøre oplysningerne om emnet. Funktionen client.publish () bruges. I dette projekt kontrolleres en trykknapstatus, hvis der trykkes på knappen, offentliggøres en besked til et emne “ esp / test1 ” som vist nedenfor.
hvis (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hej fra ESP8266"); } andet; client.loop ();
Test af MQTT med ESP8266 ved hjælp af Arduino
Til vores endelige test skal vi bruge Android-applikationen, som vi har oprettet tidligere.
Åbn MQTT-klientapplikationen, og sørg for, at din mobil har en aktiv internetforbindelse. Det hotspot, som NodeMCU er tilsluttet, skal også have en aktiv internetforbindelse. Når alt er forbundet til internettet, sender vi en “Hej fra ESP8266” -streng fra ESP-modulet, som afspejles i Android-appen, og vi får en underretning. Derefter sender vi en streng fra Android-appen, som tænder en LED, der er forbundet til ESP8266 Node MCU-kortet.
Trin 1: (Abonner på emnet):
Klik på den gemte MQTT-indstilling på App, som vi har konfigureret tidligere. Det vil poppe op på en skærm, hvor den bliver bedt om at "Abonner på et emne". Vi har tidligere konfigureret emnet som “ esp / test1 ”. Så i Android-appen skriver vi " esp / test1 ". Klik på Abonner, hvor du får en skærm som nedenfor, hvor den vil blive skrevet som "Ingen besked modtaget" fra det aktuelle emne.
Klik nu på knappen 'Connected', der er forbundet til nodeMCU. I henhold til vores kode vil en meddelelse “ Hej fra ESP8266 ” blive offentliggjort til emnet, og der vil være en meddelelse på skærmen med den modtagne besked som vist nedenfor.
Trin 2: Udgiv til emnet:
For nu at offentliggøre i emnet skal du klikke på OP-PIL-knappen i applikationen, og den åbner en skærm som vist nedenfor.
Nu, i emnefeltet, skriv “ esp / test ” og i meddelelsesfeltet, skriv “ on ” eller “ off ” for at tænde og slukke for henholdsvis LED. For eksempel, hvis “on” er offentliggjort til emnet, vil LED'en blive tændt, og hvis “off” er offentliggjort til emnet, vil LED'en blive slukket.
Jeg håber, du kunne lide artiklen og lærte noget nyt. Hvis du har spørgsmål vedrørende denne artikel, er du velkommen til at kommentere nedenfor, eller du kan bruge vores forum i stedet.