- Componenten vereist
- Schakelschema
- MQTT Cloud Libraries installeren op Raspberry Pi
- Codering Uitleg voor het aansturen van Raspberry Pi GPIO met MQTT
In de vorige tutorial hebben we het MQTT-protocol besproken en een lokale MQTT-server op onze Raspberry Pi geïnstalleerd voor het lokaal besturen van de GPIO. Maar het nadeel van een lokale MQTT-server is dat we de GPIO's niet overal ter wereld kunnen besturen, het levert alleen lokaal services. Maar als deze MQTT-server in een cloud wordt gehost, kunnen alle apparaten die op Raspberry Pi zijn aangesloten, wereldwijd worden bestuurd.
Hier, in deze tutorial, zullen we Adafruit IO gebruiken als MQTT-makelaar om een AC-apparaat te besturen dat is aangesloten op Raspberry Pi GPIO. Bekijk ook andere IoT-gestuurde Home Automation-tutorials:
- IOT-gebaseerde spraakgestuurde huisautomatisering met behulp van ESP8266 en Android-app
- Slimme telefoongestuurde domotica met behulp van Arduino
- IoT-gebaseerde webgestuurde domotica met behulp van PIC Microcontroller en Adafruit IO
- IoT-gebaseerde webgestuurde huisautomatisering met Raspberry Pi
- Op Google Assistent gebaseerde spraakgestuurde domotica met behulp van DIY Arduino Wi-Fi Shield
Componenten vereist
- Raspberry Pi met Raspbian Stretch erin geïnstalleerd.
- Relaismodule
- Lamp
- Doorverbindingsdraden
Hier zullen we SSH gebruiken om toegang te krijgen tot Raspberry Pi op de laptop. U kunt VNC of Remote Desktop-verbinding op de laptop gebruiken, of uw Raspberry pi verbinden met een monitor. Lees hier meer over het headless instellen van Raspberry Pi zonder monitor.
Schakelschema
Het schakelschema voor deze IoT-gestuurde huishoudelijke apparaten met MQTT-cloud en Raspberry Pi is eenvoudig, sluit gewoon een lamp met relaismodule aan op GPIO-pin 35 van Raspberry Pi.
MQTT Cloud Libraries installeren op Raspberry Pi
Hier wordt het Adafruit IO-platform gebruikt met Raspberry Pi als MQTT-makelaar. Omdat we het Adafruit IO- platform vele malen hebben gebruikt in onze vorige tutorials, kunnen we het op dezelfde manier gebruiken in Raspberry Pi.
Maak gewoon een account aan op het Adafruit IO-platform en maak een feed, als u niet weet hoe u een feed moet maken en het Adafruit-dashboard moet aanpassen, volg dan de link.
Installeer na het maken van een dashboard enkele bibliotheken in Raspberry Pi om aan de slag te gaan met MQTT.
1. Werk eerst uw Pi en Python bij door de volgende opdrachten te geven
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2. Installeer nu Rpi.gpio en Adafruit blink bibliotheken met behulp van onderstaande commando's
sudo pip3 installeer RPI.GPIO sudo pip3 installeer adafruit-blinka
3. Installeer de Adafruit IO-bibliotheek met de onderstaande opdracht
sudo pip3 installeer adafruit-io
4. Kloon de adafruit-voorbeelden van github met het onderstaande commando
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5. Navigeer vervolgens naar de map met voorbeelden door de volgende opdracht in de terminal in te voeren:
cd Adafruit_IO_Python / voorbeelden / basics
Als u niet zeker weet in welke directory u zich bevindt, kunt u dit controleren door pwd uit te voeren.
6. Voor alle voorbeelden in deze map moet u de ADAFRUIT_IO_KEY en ADAFRUIT_IO_USERNAME instellen, die u kunt vinden op het Adafruit-dashboard. Zoals hieronder getoond
Schakel de knop op het Adafruit IO-dashboard in en u zou het volgende in de terminal van uw Pi moeten zien.
7. Open nu het subscribe.py- bestand met de nano- editor. Typ het volgende commando om het te openen
sudo nano subscribe.py
We moeten dit programma aanpassen om elke GPIO vanaf het dashboard te bedienen.
Codering Uitleg voor het aansturen van Raspberry Pi GPIO met MQTT
Importeer eerst alle vereiste bibliotheken om GPIO-pinnen en Adafruit MQTT-client te gebruiken.
importeer RPi.GPIO als GPIO importeer sys uit Adafruit_IO importeer MQTTClient
Stel nu de GPIO-modus in en definieer het LED-pincode en stel in als uitvoer.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Vervolgens moeten we de AIO-sleutel en gebruikersnaam instellen die we hebben gevonden tijdens het maken van het dashboard.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Voer de feednaam in die u heeft opgegeven om het licht in en uit te schakelen. Hier is het "licht".
FEED_ID = 'licht'
Definieer nu een functie die zal worden aangeroepen wanneer er een gebeurtenis plaatsvindt. Dus we zullen de feed abonneren met client.subscribe (FEED_ID)
def connected (client): client.subscribe (FEED_ID) print ('Waiting for feed data…')
Nadat we ons op de feed hebben geabonneerd, moeten we de nieuwe waarde controleren en deze opslaan in een payload- variabele. Voor deze berichtfunctie wordt aangeroepen. Dus, telkens als er "1" in de variabele payload is, maak de led-pin HOOG en voor "0" LAAG.
def bericht (client, feed_id, payload): print ('Feed {0} heeft nieuwe waarde ontvangen: {1}'. format (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) anders: GPIO.output (ledPin, GPIO.LOW)
Maak nu een MQTT-client om verbinding te maken met het Adafruit IO-platform en de berichten heen en weer te sturen.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = verbonden client.on_disconnect = verbroken
Let ook op de juiste inspringing in de code, anders wordt er een fout weergegeven. De volledige python-code wordt aan het einde van de tutorial gegeven.
Sla ten slotte het programma op met ctrl + x en druk op enter. Nu moeten we het script uitvoeren om de berichten te abonneren. Dus typ in de terminal python subscribe.py en druk op enter.
python subscribe.py
U ziet een bericht Waiting For Feed Data … zoals hieronder weergegeven.
Zorg er nu voor dat de relaismodule is verbonden met de GPIO-pin van Raspberry Pi en ga vervolgens naar het Adafruit IO-dashboard en verander de lichtfeed. De lamp moet gaan branden als "1" wordt ontvangen en uitgeschakeld als "0" wordt ontvangen, zoals hieronder weergegeven.
Op deze manier kunnen we elk apparaat van overal ter wereld besturen door Raspberry Pi en MQTT cloud te gebruiken