- Wat is MQTT?
- Mosquitto MQTT Broker installeren op Raspberry Pi
- De Raspberry Pi Mosquitto Broker testen
- Schakelschema
- Code en uitleg
MQTT is een protocol dat wordt gebruikt om berichten via internet te verzenden en te ontvangen. We gebruikten dit protocol eerder in Iot Elektriciteitsmeter en Raspberry Pi Alexa om de gegevens op internet te publiceren. In deze tutorial zullen we meer te weten komen over de MQTT en de bijbehorende termen. Hier zullen we de Raspberry Pi gebruiken als lokale MQTT-makelaar en een LED besturen die is aangesloten op NodeMCU ESP12E via het MQTT-toepassingsdashboard. Een DHT11-sensor is ook verbonden met NodeMCU, zodat we de temperatuur en vochtigheid op het MQTT-dashboard kunnen lezen, door de Raspberry Pi opnieuw te gebruiken als lokale MQTT-makelaar.
Laten we dus beginnen met het onderschatten van de MQTT en de termen die ermee verband houden.
Wat is MQTT?
MQTT staat voor Message Queue Telemetry Transport en is ontworpen door IBM. Dit protocol is eenvoudig en licht en wordt gebruikt voor het verzenden en ontvangen van berichten via internet en is ontworpen voor apparaten die een laag bandbreedtegebruik hebben. Tegenwoordig wordt dit protocol veel gebruikt in de IoT-apparaten om de sensorgegevens te verzenden en te ontvangen. Ook in op IoT gebaseerde domoticasystemen kan dit protocol gemakkelijk worden gebruikt zonder veel internetgegevens te gebruiken.
Er zijn enkele termen die vaak worden gebruikt in MQTT:
- Abonneer en publiceer
- Bericht
- Onderwerp
- Makelaar
1. Abonneren en publiceren: abonneren betekent de gegevens van een ander apparaat ophalen, en publiceren betekent de gegevens naar een ander apparaat verzenden.
Wanneer device1 de gegevens naar device2 verzendt, staat het bekend als Publisher en een ander is Abonnee en vice versa.
2. Bericht: berichten zijn de informatie die we verzenden en ontvangen. Het kan een data of elk type commando zijn. Als we de temperatuurgegevens bijvoorbeeld naar de cloud publiceren, worden deze temperatuurgegevens Message genoemd.
3. Onderwerp: dit is de manier waarop u interesse voor inkomende berichten registreert of hoe u specificeert waar u het bericht wilt publiceren. Onderwerpen worden weergegeven met tekenreeksen gescheiden door een schuine streep. Gegevens worden gepubliceerd over de onderwerpen met behulp van MQTT en vervolgens abonneert het MQTT-apparaat zich op het onderwerp om de gegevens op te halen.
4. MQTT-makelaar: dit ding is verantwoordelijk voor het ontvangen van alle berichten van uitgevers, filtert de berichten en publiceert de berichten vervolgens naar de abonnees die erin geïnteresseerd zijn.
Wanneer deze broker in de cloud wordt gehost, wordt dit MQTT-cloud genoemd. Er zijn veel cloudgebaseerde MQTT-services zoals Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, enz. MQTT kan ook worden gebruikt met de populaire Amazon AWS-cloud, wat we hebben uitgelegd in de handleiding Aan de slag met Amazon AWS.
We kunnen onze eigen MQTT-makelaar maken met behulp van de Raspberry Pi. Dit zal de lokale MQTT-makelaar zijn, dwz u kunt de gegevens alleen op uw lokale netwerk verzenden en ontvangen, niet overal vandaan. Dus hier zullen we Mosquitto MQTT-makelaar in Raspberry Pi installeren om er een lokale MQTT-makelaar van te maken en de temperatuurgegevens van de NodeMCU naar de MQTT-dashboardtoepassing verzenden. We zullen ook een LED bedienen die is aangesloten op NodeMCU met behulp van de makelaar.
Mosquitto MQTT Broker installeren op Raspberry Pi
Open de terminal in je Raspberry pi en typ de volgende opdrachten om de broker te installeren
sudo apt update sudo apt install -y mosquitto mosquitto-clients
Wacht tot de installatie is voltooid. Om de makelaar nu te starten bij het opstarten van Raspberry Pi, typt u de volgende opdracht
sudo systemctl inschakelen mosquitto.service
Dat is alles, we zijn helemaal klaar om onze MQTT-makelaar te lanceren. Voer de volgende opdracht in om te controleren of het correct is geïnstalleerd
mosquitto -v
Deze opdracht geeft u de versie van uw MQTT-makelaar. Het moet 1.4.x of hoger zijn.
De Raspberry Pi Mosquitto Broker testen
1. Start de Mosquitto-makelaar op de achtergrond met behulp van de onderstaande opdracht
mosquitto -d
2. Nu zullen we een onderwerp in exampleTopic abonneren met de volgende opdracht
mosquitto_sub -d -t voorbeeld onderwerp
3. Nu zullen we een bericht naar exampleTopic publiceren
mosquitto_pub -d -t exampleTopic -m "Hallo wereld!"
Je ontvangt de Hello world! Bericht in de abonneeterminal.
Nu is het tijd om de gegevens van een ander apparaat te beheren en op te halen, in ons geval gebruiken we de NodeMCU- en MQTT-dashboardtoepassing .
- Eerst zullen we een LED besturen door een commando te verzenden met behulp van de app, dus in dit geval gedraagt NodeMCU zich als een abonnee en de app als een uitgever.
- Dan heeft de ESP12E ook een DHT11-sensor erop aangesloten en deze stuurt deze temperatuurmeting naar de mobiele MQTT-applicatie, dus in dit geval is mobiel de abonnee en NodeMCU de uitgever. En om deze berichten over de respectievelijke onderwerpen door te sturen, wordt de Mosquitto MQTT-makelaar gebruikt.
Schakelschema
Sluit het circuit aan zoals weergegeven in het diagram. Hier wordt de DHT11 gebruikt voor de temperatuurmetingen maar kan ook een LM35 Temperatuursensor worden gebruikt. We hebben de DHT11-sensor al in veel van onze projecten gebruikt, waaronder met NodeMCU om een weerstation te bouwen.
Laten we beginnen met het schrijven van de code voor de NodeMCU om zich te abonneren en de gegevens te publiceren.
Code en uitleg
Hier zullen we de Adafruit MQTT-bibliotheeksjabloon gebruiken en de vereiste dingen in de code wijzigen. Dezelfde code kan worden gebruikt om de gegevens te publiceren en te abonneren op Adafruit IO-cloud door slechts een paar dingen te wijzigen.Download hiervoor de Adafruit MQTT-bibliotheek van Sketch -> Bibliotheek opnemen -> Bibliotheken beheren. Zoek naar Adafruit MQTT en installeer het. Na het installeren van de bibliotheek. Ga naar voorbeelden -> Adafruit mqtt-bibliotheek -> mqtt_esp8266
Bewerk deze code vervolgens volgens ons Raspberry Pi IP-adres en Wi-Fi-inloggegevens.
Inclusief alle bibliotheken voor ESP8266WIFI en Adafruit MQTT .
# omvatten
Definieer vervolgens de SSID en het wachtwoord voor uw wifi, waarmee u uw ESP-12e wilt verbinden. Zorg ervoor dat uw RPi en NodeMCU verbinding maken met hetzelfde netwerk.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Deze sectie definieert de Adafruit-server, in dit geval het IP-adres van je Raspberry Pi en serverpoort.
#define AIO_SERVER "ip-adres van uw Pi" #define AIO_SERVERPORT 1883
Onderstaande velden blijven leeg omdat we geen gebruik maken van de Adafruit cloud.
#define AIO_USERNAME "" #define AIO_KEY ""
Maak vervolgens een ESP8266 WiFiClient-klasse om verbinding te maken met de MQTT-server.
WiFiClient-client;
Stel de MQTT-clientklasse in door de WiFi-client en MQTT-server en inloggegevens door te geven.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Stel een feed in met de naam 'Temperatuur' om de temperatuur te publiceren.
Adafruit_MQTT_Publish Temperatuur = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperatuur");
Stel een feed in met de naam 'led1' om in te schrijven op wijzigingen.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
In de instelfunctie verklaren we de PIN van NodeMCU waarop u uitvoer wilt krijgen. Verbind vervolgens NodeMCU met het Wi-Fi-toegangspunt.
ongeldige setup () { Serial.begin (115200); vertraging (10); pinMode (LED, UITGANG); Serial.println (F ("Adafruit MQTT demo")); // Maak verbinding met WiFi-toegangspunt. Serial.println (); Serial.println (); Serial.print ("Verbinden met"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) { …. …. … MQTT-abonnement instellen voor led-feed. mqtt.subscribe (& led1); }
In loop- functie zorgen we ervoor dat de verbinding met de MQTT-server actief is met behulp van MQTT_connect (); functie.
leegte lus () { MQTT_connect ();
Abonneer je nu op de 'led'-feed en haal de string van de MQTT-makelaar op en converteer deze string naar een nummer met atoi (); functie en schrijf dit nummer naar LED-pin met behulp van digitalWrite (); functie.
Adafruit_MQTT_Subscribe * 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); }
Haal nu de temperatuur op in een variabele en publiceer deze waarde met de functie Temperature.publish (t) .
zweven t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } anders { Serial.println (F ("OK!")); }
Aan het einde van deze tutorial wordt de volledige code met een demonstratievideo gegeven. Upload de code naar het NodeMCU-bord en open de MQTT-dashboard-app die u op de smartphone hebt gedownload.
Je kunt Raspberry Pi GPIO ook overal ter wereld besturen met behulp van MQTT-cloud zoals Adafruit IO, MQTT.IO enz., Die we in de volgende tutorial zullen leren.