- Wat is het MQTT-protocol?
- Hoe MQTT werkt?
- De Eclipse Mosquitto-makelaar
- Componenten vereist
- Eclipse MQTT-testcircuit - schematisch
- ESP8266 programmeren om communicatie met makelaar tot stand te brengen
- MQTT testen met ESP8266 met Arduino
In de afgelopen jaren zijn IoT- apparaten (Internet of Things) een niet te onderscheiden onderdeel geworden van ons dagelijks leven. Van slimme huizen, slimme lampen tot slimme apparaten; makers en ontwikkelaars gebruiken deze technologie om een netwerk van verbonden apparaten te creëren dat ons dagelijks leven een beetje spannender maakt. Dit alles is mogelijk gemaakt door het gemak van communicatie. Er zijn veel manieren om tussen apparaten te communiceren, maar in commerciële en hobbyproducten wordt Message Queuing Telemetry Transport (MQTT) een enkel protocol dat vaak wordt gebruikt. We hebben eerder een spraakgestuurde FM-radio gebouwd met Arduino en Google Assistant die MQTT gebruikt om te communiceren met het NodeMCU-bord. Kijk maar eens of dat interessant voor je klinkt.
In dit project zullen we een gratis en populaire Eclipse MQTT-makelaar gebruiken en leren hoe we een IoT-apparaat (in ons geval een NodeMCU-module) kunnen verbinden met een MQTT-makelaar en gegevens kunnen overdragen tussen de MQTT-makelaar en NodeMCU.
Wat is het MQTT-protocol?
Voor we verder gaan verder, het is beter om een duidelijk idee over het hebben MQTT (Message Queuing Telemetrie Vervoer) protocol. Het is een lichtgewicht berichtenprotocol dat de publiceer / abonneer-methode gebruikt en berichten vertaalt tussen meerdere apparaten. Door het MQTT-protocol te gebruiken, kunnen we ook gegevens verzenden / ontvangen en verschillende uitvoerapparaten besturen, zoals sensorgegevens lezen, enz. Het is ontwikkeld bovenop TCP, en daarom is het sneller dan vergelijkbare protocollen zoals HTTP. Afgezien daarvan heeft het vele andere voordelen ten opzichte van andere protocollen, zoals het zeer lichte gewicht, dus het verbruikt geen overtollig geheugen, het kan werken met veel minder netwerkbandbreedte, bovendien heeft het een robuust beveiligingsprotocol ingebouwd. Deze eigenschappen maken het geschikt voor veel toepassingen.
Hoe MQTT werkt?
Om de werking van het MQTT-protocol te begrijpen, hoeven we slechts drie basiszaken te begrijpen; het bovenstaande diagram laat dat zien. Ook hebben we het hieronder in het artikel uitgelegd.
MQTT-klant:
Een MQTT-client is elk apparaat (het kan een microcontroller of een server zijn) dat MQTT-functies uitvoert en communiceert met een centrale server, die bekend staat als de " broker ". De makelaar verzorgt de datacommunicatie tussen de aangesloten klanten.
MQTT-uitgever:
Wanneer een klant informatie wil verzenden, staat de klant bekend als een "uitgever". De uitgever publiceert de informatie over een bepaald onderwerp. " Onderwerp " is een pad waar we berichten kunnen publiceren / abonneren. De makelaar stuurt vervolgens de door de gebruiker gepubliceerde informatie naar de klanten (ook bekend als abonnee) die zich op dat specifieke onderwerp hebben geabonneerd.
MQTT-abonnee:
De MQTT-abonnee abonneert zich op onderwerpen over een MQTT- makelaar om de berichten te lezen die door de makelaar zijn verzonden.
De Eclipse Mosquitto-makelaar
Eclipse Mosquitto is een open-source MQTT-broker, die lichtgewicht is en geschikt is voor gebruik op IoT-apparaten voor communicatie. Het MQTT-protocol biedt een lichtgewicht methode voor het overdragen van informatie met behulp van een publish / subscribe-model. Als je meer wilt weten over het onderwerp, kun je de officiële muggenwebsite bezoeken.
Eclipse Mosquitto-makelaar instellen:
Om communicatie met de makelaar tot stand te brengen, moeten we deze eerst instellen. In dit project wordt een Android-applicatie gebruikt om de informatie bij de makelaar te publiceren en erop te abonneren. De volgende stappen geven u een beter idee van het installatieproces.
Stap 1:
Download eerst een "MQTT-client" -toepassing die beschikbaar is in de Google Play Store / App Store en installeer deze. In dit project wordt een applicatie met de naam "MQTT-client" gebruikt, die eruitziet als de afbeelding hieronder.
Stap 2:
Klik op het "+" teken om de extra opties in de applicatie weer te geven, waar we een nieuwe makelaar gaan toevoegen. Wanneer op de knop wordt geklikt, verschijnt een nieuw scherm zoals hieronder weergegeven.
Stap 3:
Daarna moeten de gegevens van de makelaar worden ingevuld in het verplichte veld. Klik eerst op de optie "Ingeschakeld" die wordt weergegeven in de applicatie. In dit project wordt de Eclipse MQTT-makelaar gebruikt, de details die moeten worden ingevuld, worden hieronder weergegeven:
Bijnaam: geef een naam naar uw voorkeur
Gastheer: mqtt.eclipse.org
Poort: 1883
Klant-ID: geef een ID van uw voorkeur op
De bovenstaande gegevens moeten in hun respectievelijke velden worden ingevuld. Alle andere velden zijn niet nodig en kunnen leeg worden gelaten. Na succesvolle afronding, klikt u op de knop Opslaan om de makelaargegevens op te slaan.
Als u klaar bent, is het installatieproces van de Android-applicatie voorbij en kunnen we verder gaan met de hardware-kant van de dingen.
Componenten vereist
Een volledige lijst met vereiste onderdelen wordt hieronder beschreven. Omdat dit circuit eenvoudig is, kunt u alle benodigde onderdelen bij uw plaatselijke hobbywinkel vinden.
- NodeMCU
- LED
- Breadboard
- Draden aansluiten
- Programmeerkabel
Eclipse MQTT-testcircuit - schematisch
Het schakelschema voor het Basic MQTT-project wordt hieronder weergegeven:
ESP8266 programmeren om communicatie met makelaar tot stand te brengen
Een eenvoudige Arduino-code zorgt voor alle noodzakelijke communicatie tussen de MQTT-makelaar en de NodeMCU. In deze sectie zullen we in detail leren hoe deze functionaliteit werkt.
Stel Arduino IDE in en upload de code:
Als u de code voor het eerst uploadt naar de NodeMCU, moet u eerst de Arduino IDE instellen. Volg hiervoor de eenvoudige instructie hieronder.
Open eerst Arduino IDE en ga dan naar Bestand–> Voorkeuren–> Instellingen .
Kopieer vervolgens de onderstaande URL en plak deze in het veld 'Extra Board Manager URL ' en klik op 'Ok'. U kunt de onderstaande afbeelding bekijken om te weten hoe we dat hebben gedaan.
Link:
Ga vervolgens naar Tools> Board> Boards Manager . Typ ESP 8266 in het zoekvak in het venster van Board Manager en druk op Enter. Selecteer vervolgens de nieuwste versie uit de vervolgkeuzelijst en klik op installeren. Onderstaande afbeelding geeft u een duidelijk idee.
Als de installatie ten slotte is voltooid, ga je naar Tools -> Board -> en selecteer je NodeMCU 1.0 (ESP-12E Module). Nu kunt u NodeMCU programmeren met Arduino IDE. Aangezien we klaar zijn met het instellen van de Arduino IDE, kunnen we nu de volledige code uploaden. Maar lees eerst de korte uitleg van de hele code.
Ten eerste hebben we "ESP8266WiFi.h" toegevoegd voor het gebruik van ESP8266 en "PubSubClient.h" voor MQTT.
U kunt de vooraf gebouwde ESP8266-bibliotheek vinden in de Arduino-bibliotheek, maar u moet de PubSubClient-bibliotheek downloaden van de bijbehorende GitHub-repository.
# omvatten
Definieer vervolgens de netwerkreferenties, zoals uw Wi-Fi-gebruikersnaam en -wachtwoord. Vervang uw inloggegevens in plaats van respectievelijk "admin" en "12345678".
const char * ssid = "admin"; const char * password = "12345678";
Vervolgens moeten we de MQTT-server configureren. We hebben de Eclipse MQTT-server gebruikt voor dit project, daarom wordt het serveradres gegeven als "mqtt.eclipse.org". Maar als u van plan bent om een andere server zoals Mosquitto, Adafruit te gebruiken, dan kunt u deze vervangen door uw specifieke serveradres en poortnummer.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Vervolgens worden de instanties gemaakt voor de klasse WiFiClient en PubSubClient , die in het hele programma zullen worden gebruikt.
WiFiClient espClient; PubSubClient-client (espClient);
In de setup () -sectie noemen we eerst WiFi.begin () , door deze methode aan te roepen, wordt de ESP verbonden met uw favoriete HotSpot.
WiFi.begin (ssid, wachtwoord);
Vervolgens controleren we of er een succesvolle netwerkverbinding is met behulp van de WiFi.status () - methode. Na een succesvolle verbinding wordt een bericht afgedrukt op Serial Monitor met de SSID van het verbonden netwerk.
while (WiFi.status ()! = WL_CONNECTED) {vertraging (500); Serial.println ("Verbinding maken met wifi.."); } Serial.print ("Verbonden met wifi:"); Serial.println (WiFi.SSID ());
Nu moeten we een makelaar creëren. Daarvoor hebben we de setServer- methode gebruikt; deze methode heeft twee argumenten die we eerder hebben gedefinieerd. Als we nu berichten van de server willen ontvangen, moeten we een callback-functie maken. Daarvoor gebruiken we de setCallback (callback) -methode.
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Nu hebben we de connect (clientID) -functie gebruikt om verbinding te maken met de ESP8266-client. Hier is clientID de naam van de client, en deze moet uniek zijn. Als het is aangesloten, kan een succesbericht worden weergegeven in de seriële monitor.
if (client.connect ("ESP8266")) {Serial.println ("verbonden"); } else {Serial.print ("mislukt met status") Serial.println (client.state ()); vertraging (2000); }
Vervolgens noemen we de client.subscribe () , een ingebouwde MQTT-functie, die wordt gebruikt om u op een bepaald onderwerp te abonneren. Voor dit project hebben we " esp / test " gebruikt als onze abonneenaam.
client.subscribe ("esp / test");
Nu wordt de MQTTcallback- functie aangeroepen om te controleren of er bijgewerkte informatie beschikbaar is of niet. Als er nieuwe gegevens beschikbaar zijn, verwerkt deze functie de ontvangen gegevens en drukt een bericht af op de seriële monitor met het oorspronkelijke bericht en de onderwerpnaam waar het bericht is ontvangen.
Vervolgens zetten we de berichten om in een string, zodat deze kan worden vergeleken en gecontroleerd op triggerende acties. In dit project wordt een LED AAN / UIT gezet met behulp van MQTT-opdrachten, zoals weergegeven in de onderstaande code.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (bericht); if (message == "on") {digitalWrite (LED, HIGH); }
Ten slotte, om de informatie over het onderwerp te publiceren. De functie client.publish () wordt gebruikt. In dit project wordt de status van een drukknop gecontroleerd, als de knop wordt ingedrukt, wordt een bericht gepubliceerd naar een onderwerp “ esp / test1 ” zoals hieronder weergegeven.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hallo van ESP8266"); } anders; client.loop ();
MQTT testen met ESP8266 met Arduino
Voor onze laatste tests gaan we de Android-applicatie gebruiken, die we eerder hebben ingesteld.
Open de MQTT-clienttoepassing en zorg ervoor dat uw gsm een actieve internetverbinding heeft. Ook moet de hotspot waarmee de NodeMCU is verbonden een actieve internetverbinding hebben. Zodra alles is verbonden met internet, sturen we een "Hallo van ESP8266" -string vanuit de ESP-module, die wordt weergegeven in de Android-app, en we krijgen een melding. Vervolgens sturen we een string vanuit de Android-app, die een LED zal inschakelen die is verbonden met het ESP8266 Node MCU-bord.
Stap 1: (Abonneren op het onderwerp):
Klik op de Opgeslagen MQTT-optie op App, die we eerder hebben geconfigureerd. Er verschijnt een scherm waarin wordt gevraagd om "Abonneren op een onderwerp". We hebben eerder het onderwerp geconfigureerd als " esp / test1 ". Dus in de Android-app zullen we " esp / test1 " schrijven. Klik op Abonneren. Als u dit doet, krijgt u een scherm te zien zoals hieronder, waar het zal worden geschreven als "Geen bericht ontvangen" van het specifieke onderwerp.
Klik nu op de knop 'Verbonden' die is verbonden met de nodeMCU. Nu zal volgens onze code een bericht " Hallo van ESP8266 " worden gepubliceerd naar het onderwerp en zal er een melding op het scherm zijn met het ontvangen bericht zoals hieronder weergegeven.
Stap 2: Publiceer naar het onderwerp:
Om nu in het onderwerp te publiceren, klikt u op de knop PIJL OMHOOG van de toepassing en het zal een scherm openen zoals hieronder weergegeven.
Schrijf nu in het onderwerpveld " esp / test " en in het berichtveld " aan " of " uit " om respectievelijk de LED in en uit te schakelen. Als bijvoorbeeld "aan" wordt gepubliceerd naar het onderwerp, wordt de LED ingeschakeld en als "uit" wordt gepubliceerd naar het onderwerp, wordt de LED uitgeschakeld.
Ik hoop dat je het artikel leuk vond en iets nieuws hebt geleerd. Als u vragen heeft over dit artikel, kunt u hieronder reageren of u kunt ons forum gebruiken.