- Erforderliche Komponenten
- Schaltplan
- Installieren von MQTT Cloud Libraries auf Raspberry Pi
- Codierung Erläuterung zur Steuerung von Raspberry Pi GPIO mit MQTT
Im vorherigen Tutorial haben wir das MQTT-Protokoll besprochen und den lokalen MQTT-Server auf unserem Raspberry Pi installiert, um den GPIO lokal zu steuern. Der Nachteil des lokalen MQTT-Servers besteht jedoch darin, dass wir die GPIOs nicht von überall auf der Welt aus steuern können, sondern nur lokale Dienste bereitstellen. Wenn dieser MQTT-Server jedoch in einer Cloud gehostet wird, können alle mit Raspberry Pi verbundenen Appliances global gesteuert werden.
In diesem Tutorial verwenden wir Adafruit IO als MQTT-Broker, um eine an Raspberry Pi GPIO angeschlossene AC-Appliance zu steuern. Überprüfen Sie auch andere IoT-gesteuerte Home Automation-Tutorials:
- IOT-basierte sprachgesteuerte Heimautomation mit ESP8266 und Android App
- Smartphone-gesteuerte Hausautomation mit Arduino
- IoT-basierte webgesteuerte Heimautomation mit PIC Microcontroller und Adafruit IO
- IoT-basierte webgesteuerte Hausautomation mit Raspberry Pi
- Sprachgesteuerte Heimautomatisierung auf Basis von Google Assistant mit DIY Arduino Wi-Fi Shield
Erforderliche Komponenten
- Raspberry Pi mit Raspbian Stretch installiert.
- Relaismodul
- Birne
- Überbrückungsdrähte
Hier verwenden wir SSH, um auf Raspberry Pi auf dem Laptop zuzugreifen. Sie können eine VNC- oder Remotedesktopverbindung auf dem Laptop verwenden oder Ihren Raspberry pi mit einem Monitor verbinden. Erfahren Sie hier mehr über das kopflose Einrichten von Raspberry Pi ohne Monitor.
Schaltplan
Der Schaltplan für diese IoT-gesteuerten Haushaltsgeräte mit MQTT-Cloud und Raspberry Pi ist einfach. Schließen Sie einfach eine Glühlampe mit Relaismodul an den GPIO-Pin 35 des Himbeer-Pi an.
Installieren von MQTT Cloud Libraries auf Raspberry Pi
Hier wird die Adafruit IO-Plattform mit Raspberry Pi als MQTT-Broker verwendet. Da wir die Adafruit IO- Plattform in unseren vorherigen Tutorials viele Male verwendet haben, können wir sie auch in Raspberry Pi verwenden.
Erstellen Sie einfach ein Konto auf der Adafruit IO-Plattform und erstellen Sie einen Feed. Wenn Sie nicht wissen, wie Sie einen Feed erstellen und das Adafruit-Dashboard anpassen können, folgen Sie dem Link.
Installieren Sie nach dem Erstellen des Dashboards einige Bibliotheken in Raspberry Pi, um mit MQTT zu beginnen.
1. Aktualisieren Sie zunächst Ihren Pi und Python, indem Sie die folgenden Befehle eingeben
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2. Installieren Sie nun die Blink-Bibliotheken Rpi.gpio und Adafruit mit den folgenden Befehlen
sudo pip3 installiere RPI.GPIO sudo pip3 installiere adafruit-blinka
3. Installieren Sie die Adafruit IO-Bibliothek mit dem folgenden Befehl
sudo pip3 installiere adafruit-io
4. Klonen Sie die Adafruit-Beispiele mit dem folgenden Befehl von Github
Git-Klon https://github.com/adafruit/Adafruit_IO_Python.git
5. Navigieren Sie anschließend zum Beispielordner, indem Sie den folgenden Befehl in das Terminal eingeben:
cd Adafruit_IO_Python / Beispiele / Grundlagen
Wenn Sie nicht sicher sind, in welchem Verzeichnis Sie sich befinden, können Sie dies überprüfen, indem Sie pwd ausführen.
6. Für alle Beispiele in diesem Ordner müssen Sie ADAFRUIT_IO_KEY und ADAFRUIT_IO_USERNAME festlegen, die über das Adafruit-Dashboard abgerufen werden können. Wie nachfolgend dargestellt
Schalten Sie die Schaltfläche im Adafruit IO-Dashboard um, und im Terminal Ihres Pi sollte Folgendes angezeigt werden.
7. Öffnen Sie nun die Datei subscribe.py mit dem Nano- Editor. Geben Sie den folgenden Befehl ein, um es zu öffnen
sudo nano subscribe.py
Wir müssen dieses Programm ändern, um GPIO über das Dashboard zu steuern.
Codierung Erläuterung zur Steuerung von Raspberry Pi GPIO mit MQTT
Importieren Sie zunächst alle erforderlichen Bibliotheken, um GPIO-Pins und den Adafruit MQTT-Client zu verwenden.
Import RPi.GPIO als GPIO import sys von Adafruit_IO Import MQTTClient
Stellen Sie nun den GPIO-Modus ein, definieren Sie die LED-Pin-Nummer und stellen Sie sie als Ausgang ein.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Als nächstes müssen wir den AIO-Schlüssel und den Benutzernamen festlegen, die wir beim Erstellen des Dashboards gefunden haben.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Geben Sie den Feed-Namen ein, den Sie zum Ein- und Ausschalten des Lichts angegeben haben. Hier ist es "Licht".
FEED_ID = 'Licht'
Definieren Sie nun eine Funktion, die aufgerufen wird, wenn ein Ereignis eintritt. Also werden wir den Feed mit client.subscribe (FEED_ID) abonnieren.
def connect (client): client.subscribe (FEED_ID) print ('Warten auf Feed-Daten…')
Nach dem Abonnieren des Feeds müssen wir nach dem neuen Wert suchen und ihn in einer Nutzlastvariablen speichern. Für diese Meldung wird die Funktion aufgerufen. Wenn die Nutzlastvariable also "1" enthält, stellen Sie den LED-Pin auf HIGH und für "0" auf LOW.
def message (client, feed_id, payload): print ('Feed {0} hat neuen Wert erhalten: {1}'. format (feed_id, payload)) wenn payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: GPIO.output (ledPin, GPIO.LOW)
Erstellen Sie jetzt einen MQTT-Client, um eine Verbindung mit der Adafruit IO-Plattform herzustellen und die Nachrichten hin und her zu senden.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = verbunden client.on_disconnect = getrennt
Achten Sie auch auf die richtige Einrückung im Code, da sonst ein Fehler angezeigt wird. Der vollständige Python-Code wird am Ende des Tutorials angegeben.
Speichern Sie das Programm abschließend mit Strg + x und drücken Sie die Eingabetaste. Jetzt müssen wir das Skript ausführen, um die Nachrichten zu abonnieren. Geben Sie im Terminal python subscribe.py ein und drücken Sie die Eingabetaste.
python subscribe.py
Sie sehen eine Meldung Warten auf Feed-Daten … wie im folgenden Schnappschuss gezeigt.
Stellen Sie nun sicher, dass das Relaismodul mit dem GPIO-Pin des Raspberry Pi verbunden ist, und wechseln Sie dann zum Adafruit IO-Dashboard und ändern Sie die Lichtzufuhr. Die Lampe sollte sich einschalten, wenn „1“ empfangen wird, und ausgeschaltet werden, wenn „0“ empfangen wird, wie unten gezeigt.
Auf diese Weise können wir jede Appliance von überall auf der Welt mithilfe der Raspberry Pi und MQTT Cloud steuern