Inhoudsopgave:

Hoe MQTT te gebruiken met de Raspberry Pi en ESP8266 - Ajarnpa
Hoe MQTT te gebruiken met de Raspberry Pi en ESP8266 - Ajarnpa

Video: Hoe MQTT te gebruiken met de Raspberry Pi en ESP8266 - Ajarnpa

Video: Hoe MQTT te gebruiken met de Raspberry Pi en ESP8266 - Ajarnpa
Video: Home Assistant - подключаем адресную ленту WS2812B через ESP8266 с прошивкой WLED 2024, Juni-
Anonim
Hoe MQTT te gebruiken met de Raspberry Pi en ESP8266
Hoe MQTT te gebruiken met de Raspberry Pi en ESP8266

In deze Instructable zal ik uitleggen wat het MQTT-protocol is en hoe het wordt gebruikt om tussen apparaten te communiceren. Vervolgens zal ik u als praktische demonstratie laten zien hoe u een eenvoudig systeem met twee clients kunt opzetten, waarbij een ESP8266-module een bericht verzendt naar een Python-programma wanneer er op een knop wordt gedrukt. In het bijzonder gebruik ik een Adafruit HUZZAH-module voor dit project, een Raspberry Pi en een desktopcomputer. De Raspberry Pi zal fungeren als de MQTT-broker en de Python-client zal worden uitgevoerd vanaf een afzonderlijke desktopcomputer (optioneel, omdat dit op de Raspberry Pi kan worden uitgevoerd).

Om deze Instructable te volgen, moet je enige basiskennis van elektronica hebben en de Arduino-software gebruiken. Je moet ook bekend zijn met het gebruik van een opdrachtregelinterface (voor de Raspberry Pi). Hopelijk, als je eenmaal de kennis hebt opgedaan van wat MQTT is en hoe je het in een basisscenario kunt gebruiken, kun je je eigen IoT-projecten maken!

Vereiste onderdelen

  • 1 x Raspberry Pi, aangesloten op een lokaal netwerk (met Jessie)
  • 1 x ESP8266-module (Adafruit HUZZAH)
  • 1 x Breadboard
  • 3 x jumperdraden (man naar man)
  • 1 x drukknop
  • 1 x 10k Ohm Weerstand (Bruin-Zwart-Oranje kleurcode)

Ik heb deze Instructable gemaakt, omdat MQTT me altijd als een protocol heeft geïnteresseerd en er zijn veel verschillende manieren waarop het kan worden gebruikt. Ik kon er echter niet achter komen hoe ik apparaten moest coderen om het te gebruiken. Dit was omdat ik niet wist/begreep wat er werkelijk aan de hand was om mijn "Hallo wereld!" van apparaat A en stuur het naar apparaat B. Daarom besloot ik dit Instructable te schrijven om je (hopelijk) te leren hoe het werkt, en om ook mijn eigen begrip ervan te versterken!

Stap 1: Wat is MQTT?

Wat is MQTT?
Wat is MQTT?

MQTT, of MQ Telemetry Transport, is een berichtenprotocol waarmee meerdere apparaten met elkaar kunnen praten. Momenteel is het een populair protocol voor het internet der dingen, hoewel het voor andere doeleinden is gebruikt, bijvoorbeeld voor Facebook Messenger. Interessant is dat MQTT in 1999 is uitgevonden - wat betekent dat het net zo oud is als ik!

MQTT is gebaseerd op het idee dat apparaten onderwerpen kunnen publiceren of erop kunnen abonneren. Dus bijvoorbeeld. Als apparaat #1 de temperatuur van een van zijn sensoren heeft geregistreerd, kan het een bericht publiceren met de temperatuurwaarde die het heeft geregistreerd, naar een onderwerp (bijvoorbeeld "Temperatuur"). Dit bericht wordt verzonden naar een MQTT-makelaar, die u kunt zien als een switch/router op een lokaal netwerk. Zodra de MQTT-makelaar het bericht heeft ontvangen, stuurt hij het naar alle apparaten (in dit geval apparaat #2) die zijn geabonneerd op hetzelfde onderwerp.

In dit project zullen we publiceren naar een onderwerp met behulp van een ESP8266, en een Python-script maken dat zich op hetzelfde onderwerp zal abonneren, via een Raspberry Pi die zal fungeren als de MQTT-makelaar. Het mooie van MQTT is dat het licht van gewicht is, dus perfect voor gebruik op kleine microcontrollers zoals een ESP8266, maar het is ook algemeen beschikbaar - dus we kunnen het ook op een Python-script uitvoeren.

Hopelijk heb je aan het einde van dit project inzicht in wat MQTT is en hoe je het in de toekomst voor je eigen projecten kunt gebruiken.

Stap 2: De MQTT Broker installeren op de Raspberry Pi

De MQTT Broker installeren op de Raspberry Pi
De MQTT Broker installeren op de Raspberry Pi
De MQTT Broker installeren op de Raspberry Pi
De MQTT Broker installeren op de Raspberry Pi
De MQTT Broker installeren op de Raspberry Pi
De MQTT Broker installeren op de Raspberry Pi

Om ons MQTT-systeem in te stellen, hebben we een makelaar nodig, zoals uitgelegd in de vorige stap. Voor de Raspberry Pi zullen we de " Mosquitto " MQTT-makelaar gebruiken. Voordat we dit installeren, is het altijd het beste om onze Raspberry Pi te updaten.

sudo apt-get update

sudo apt-get upgrade

Zodra je dit hebt gedaan, installeer je Mosquitto en vervolgens de Mosquitto-clients-pakketten.

sudo apt-get install mug -y

sudo apt-get install mosquitto-clients -y

Wanneer u klaar bent met het installeren van deze twee pakketten, moeten we de broker configureren. Het configuratiebestand van de mug-makelaar bevindt zich in /etc/mosquitto/mosquitto.conf, dus open dit met uw favoriete teksteditor. Als je geen favoriete teksteditor hebt of niet weet hoe je een van de opdrachtregeleditors moet gebruiken, gebruik ik nano, zodat je kunt volgen:

sudo nano /etc/mosquitto/mosquitto.conf

Onderaan dit bestand zou je de regel moeten zien:

include_dir /etc/mosquitto/conf.d

Verwijder deze regel. Voeg de volgende regels toe aan de onderkant van het bestand.

allow_anonymous false

wachtwoord_bestand /etc/mosquitto/pwfile luisteraar 1883

Door die regels te typen, hebben we Mosquitto verteld dat we niet willen dat iemand verbinding maakt met onze makelaar die geen geldige gebruikersnaam en wachtwoord opgeeft (we zullen deze zo instellen) en dat we willen dat Mosquitto luister naar berichten op poortnummer 1883.

Als u niet wilt dat de makelaar een gebruikersnaam en wachtwoord vereist, neem dan niet de eerste twee regels op die we hebben toegevoegd (d.w.z. allow_anonymous… en password_file…). Als je dit hebt gedaan, ga dan verder met het opnieuw opstarten van de Raspberry Pi.

Sluit (en sla) nu dat bestand op. Als u het nano-voorbeeld volgt, drukt u op CTRL+X en typt u Y wanneer daarom wordt gevraagd.

Omdat we Mosquitto zojuist hebben verteld dat gebruikers die de MQTT-makelaar willen gebruiken, moeten worden geverifieerd, moeten we Mosquitto nu vertellen wat de gebruikersnaam en het wachtwoord zijn! Typ dus de volgende opdracht - vervang gebruikersnaam door de gewenste gebruikersnaam - en voer vervolgens het gewenste wachtwoord in wanneer daarom wordt gevraagd (Opmerking: als u bij het bewerken van het configuratiebestand een ander wachtwoord_bestandspad hebt opgegeven, vervangt u het onderstaande pad door de een die je hebt gebruikt).

sudo mosquitto_passwd -c /etc/mosquitto/pwfile gebruikersnaam

Omdat we zojuist het Mosquitto-configuratiebestand hebben gewijzigd, moeten we de Raspberry Pi opnieuw opstarten.

sudo reboot

Zodra de Raspberry Pi opnieuw is opgestart, zou u een volledig functionerende MQTT-makelaar moeten hebben! Vervolgens gaan we proberen ermee te communiceren, met behulp van een aantal verschillende apparaten/methoden!

Stap 3: De makelaar testen

De makelaar testen
De makelaar testen

Zodra je Mosquitto op de Raspberry Pi hebt geïnstalleerd, kun je het een snelle test geven - om er zeker van te zijn dat alles correct werkt. Voor dit doel zijn er twee opdrachten die we op de opdrachtregel kunnen gebruiken. mosquitto_pub en mosquitto_sub. In deze stap zal ik u begeleiden bij het gebruik van elk van deze om onze makelaar te testen.

Om de broker te testen, moet u twee opdrachtregelvensters openen. Als je Putty of een andere SSH-client gebruikt, is dit net zo eenvoudig als het openen van een ander SSH-venster en inloggen zoals gewoonlijk. Als u uw Pi vanaf een UNIX-terminal benadert, is dit precies hetzelfde. Als u de Raspberry Pi rechtstreeks gebruikt, moet u twee terminalvensters openen in de GUI-modus (het commando startx kan worden gebruikt om de GUI te starten).

Nu je twee vensters hebt geopend, kunnen we aan de slag met het testen. Typ in een van de twee terminals de volgende opdracht en vervang de gebruikersnaam en het wachtwoord door degene die u in de vorige stap hebt ingesteld.

mosquitto_sub -d -u gebruikersnaam -P wachtwoord -t test

Als je in de vorige stap hebt besloten geen gebruikersnaam en wachtwoord in te stellen, negeer dan vanaf nu de vlaggen -u en -P in de opdrachten. Dus, als voorbeeld, zou de opdracht mosquitto_sub nu zijn:

mosquitto_sub -d -t test

De opdracht mosquitto_sub zal zich abonneren op een onderwerp en alle berichten die naar het opgegeven onderwerp zijn verzonden, weergeven in het terminalvenster. Hier betekent -d debug-modus, dus alle berichten en activiteiten worden op het scherm weergegeven. -u en -P zouden voor zichzelf moeten spreken. Ten slotte is -t de naam van het onderwerp waarop we ons willen abonneren - in dit geval "test".

Vervolgens gaan we in het andere terminalvenster proberen een bericht naar het "test" -onderwerp te publiceren. Typ het volgende en onthoud nogmaals dat u de gebruikersnaam en het wachtwoord moet wijzigen:

mosquitto_pub -d -u gebruikersnaam -P wachtwoord -t test -m "Hallo wereld!"

Als je op enter drukt, zou je je bericht "Hallo, wereld!" moeten zien. verschijnen in het eerste terminalvenster dat we hebben gebruikt (om te abonneren). Als dit het geval is, kun je aan de slag met de ESP8266!

Stap 4: Het opzetten van de ESP8266 (Adafruit HUZZAH)

De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)
De ESP8266 instellen (Adafruit HUZZAH)

Deze stap is specifiek voor de Adafruit HUZZAH (want dat is wat ik gebruik om dit project te voltooien). Als u een ander Arduino / ESP8266-apparaat gebruikt, wilt u deze stap misschien overslaan. Ik zou u echter aanraden om het snel te lezen, voor het geval er informatie is die voor u relevant kan zijn.

Voor dit project ga ik de HUZZAH programmeren met de Arduino-software. Dus, als je dat nog niet hebt gedaan, zorg er dan voor dat je de Arduino-software installeert (nieuwer dan 1.6.4). Je kunt het hier downloaden.

Nadat u de Arduino-software hebt geïnstalleerd, opent u deze en navigeert u naar Bestand->Voorkeuren. Hier zou u (onderaan het venster) een tekstvak moeten zien met het label: "Extra Boards Manager-URL's". Kopieer en plak in dit tekstvak de volgende link:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klik op OK om uw wijzigingen op te slaan. Open nu de Board Manager (Extra->Board->Board Manager) en zoek naar ESP8266. Installeer het esp8266 by ESP8266 Community-pakket. Start de Arduino-software opnieuw.

Nu, voordat we het bord kunnen programmeren, moeten we een paar verschillende opties selecteren. Selecteer in de menuoptie Tools Adafruit HUZZAH ESP8266 voor Board, 80 MHz voor de CPU-frequentie (je kunt 160 MHz gebruiken als je het wilt overklokken, maar voor nu ga ik 80 MHz gebruiken), 4M (3M SPIFFS) voor de flitsgrootte en 115200 voor de uploadsnelheid. Zorg er ook voor dat u de COM-poort selecteert die u gebruikt (dit is afhankelijk van uw instellingen).

Voordat je een code kunt uploaden, moet je ervoor zorgen dat de HUZZAH in de bootloader-modus staat. Om dit in te schakelen, houdt u de knop op het bord met de aanduiding GPIO0 ingedrukt en terwijl u deze ingedrukt houdt, houdt u ook de Reset-knop ingedrukt. Laat vervolgens de Reset-knop los en vervolgens GPIO0. Als je dit correct hebt gedaan, moet de rode LED die aanging toen je op GPIO0 drukte, nu gedimd oplichten.

Om code naar de microcontroller te uploaden, zorgt u er eerst voor dat de HUZZAH in de bootloader-modus staat en klikt u vervolgens op de uploadknop in de Arduino IDE.

Als je problemen hebt met het instellen van de HUZZAH, kun je meer informatie vinden in Adafruit's eigen tutorial.

Stap 5: Programmeren van de ESP8266

Programmeren van de ESP8266
Programmeren van de ESP8266

Nu zullen we beginnen met het programmeren van de ESP8266, maar voordat we kunnen beginnen, moet u de volgende bibliotheken installeren in de Arduino Bibliotheekmanager (Sketch->Include Libraries->Manage Libraries)

  • Stuiteren2
  • PubSubClient

Zodra je die bibliotheken hebt geïnstalleerd, kun je de code uitvoeren die ik in deze Instructable (MQTT_Publish.zip) heb opgenomen. Ik heb ervoor gezorgd dat ik er commentaar op heb, zodat je kunt begrijpen wat elke sectie doet, en dit zou je hopelijk in staat moeten stellen om het aan je behoeften aan te passen.

Vergeet niet om de constanten bovenaan de code te wijzigen, zodat uw ESP8266 verbinding kan maken met uw WiFi-netwerk en uw MQTT-makelaar (de Raspberry Pi).

Als je hebt besloten geen gebruikersnaam en wachtwoord in te stellen voor de MQTT Broker, download dan in plaats daarvan het bestand MQTT_PublishNoPassword.zip.

Stap 6: Python Client installeren (paho-mqtt)

Python-client installeren (paho-mqtt)
Python-client installeren (paho-mqtt)

Gelukkig is deze stap heel eenvoudig! Om de Mosquitto Python-client te installeren, hoeft u alleen maar het volgende in de opdrachtregel (Linux/Mac) of zelfs de opdrachtprompt (Windows) te typen.

pip installeer paho-mqtt

Opmerking: Windows-opdrachtprompt kan een probleem hebben met het uitvoeren van de pip-opdracht als u niet hebt opgegeven dat u pip wilt installeren en python wilt toevoegen aan uw PATH-variabele toen u Python installeerde. Er zijn een aantal manieren om dit op te lossen, maar ik denk dat Python gewoon opnieuw installeren de gemakkelijkste manier is. Als u twijfelt - geef het een google!

Stap 7: Python Client - Abonneren

Python Client - Abonneren
Python Client - Abonneren

In deze stap gaan we het Python-script instellen (op de Raspberry Pi zelf of op een andere computer die op het netwerk is aangesloten) om alle berichten te verwerken die door de ESP8266 naar het MQTT-onderwerp worden verzonden (gepubliceerd).

Ik heb de python-code hieronder toegevoegd (PythonMQTT_Subscribe.py), die is becommentarieerd om u te helpen begrijpen wat er aan de hand is, maar ik zal hier ook enkele van de belangrijkste functies uitleggen.

Als u niet eerder een gebruikersnaam en wachtwoord voor de MQTT-verbinding hebt ingesteld, downloadt u in plaats daarvan het bestand PythonMQTT_SubscribeNoPassword.py.

Stap 8: Communiceren tussen ESP8266-apparaten

Communiceren tussen ESP8266-apparaten
Communiceren tussen ESP8266-apparaten

Als u bijvoorbeeld een IoT-netwerk wilt opzetten, wilt u misschien communiceren tussen ESP8266-apparaten. Gelukkig is dit niet veel ingewikkelder dan de code die we eerder hebben geschreven, maar er zijn een paar opmerkelijke veranderingen.

Als de ene ESP gegevens naar de andere wil sturen, moet de eerste ESP naar het onderwerp publiceren en moet de tweede ESP zich op dat onderwerp abonneren. Deze opstelling maakt een eenrichtingsgesprek mogelijk - ESP(1) naar ESP(2). Als we willen dat ESP(2) terugspreekt met ESP(1), kunnen we een nieuw onderwerp aanmaken, waarop ESP(2) zal publiceren, en ESP(1) zal zich abonneren. Gelukkig kunnen we meerdere abonnees hebben over hetzelfde onderwerp, dus als je gegevens naar een aantal systemen wilt verzenden, heb je maar één onderwerp nodig (waarop ze allemaal geabonneerd zijn, behalve het apparaat dat de gegevens verzendt, want dat zal publiceren).

Als je hulp nodig hebt bij het uitzoeken wat elk apparaat moet doen, beschouw het systeem dan als een ruimte met mensen. Als ESP(1) publiceert, kunt u zich dit apparaat voorstellen als een "spreker", en alle apparaten die zich abonneren op het onderwerp zijn in dit voorbeeld "luisteraars".

Ik heb hieronder een voorbeeldcode toegevoegd, die laat zien hoe een ESP8266 zich kan abonneren op een onderwerp en kan luisteren naar bepaalde berichten - 1 en 0. Als 1 wordt ontvangen, gaat de ingebouwde LED (voor de HUZZAH - GPIO 0) aan. Als 0 wordt ontvangen, gaat deze LED uit.

Als u complexere gegevens wilt verwerken, moet u dit doen in de functie ReceivedMessage (zie code).

Als u voor uw eigen projecten zowel gegevens moet verzenden als ontvangen, kunt u de publicatiefunctie uit het vorige voorbeeld opnemen in de code die in deze stap is opgenomen. Dit moet worden afgehandeld in de hoofdfunctie van de Arduino-lus ().

Vergeet niet om de variabelen bovenaan de code aan te passen aan uw netwerk!

Aanbevolen: