6.3 KiB
Verbinden Sie Ihr IoT-Gerät mit der Cloud - Virtuelle IoT-Hardware und Raspberry Pi
In diesem Abschnitt der Lektion verbinden Sie Ihr virtuelles IoT-Gerät oder Ihren Raspberry Pi mit Ihrem IoT Hub, um Telemetrie zu senden und Befehle zu empfangen.
Verbinden Sie Ihr Gerät mit dem IoT Hub
Der nächste Schritt besteht darin, Ihr Gerät mit dem IoT Hub zu verbinden.
Aufgabe - Verbindung zum IoT Hub herstellen
-
Öffnen Sie den Ordner
soil-moisture-sensor
in VS Code. Stellen Sie sicher, dass die virtuelle Umgebung im Terminal läuft, wenn Sie ein virtuelles IoT-Gerät verwenden. -
Installieren Sie einige zusätzliche Pip-Pakete:
pip3 install azure-iot-device
azure-iot-device
ist eine Bibliothek, um mit Ihrem IoT Hub zu kommunizieren. -
Fügen Sie die folgenden Importe oben in die Datei
app.py
ein, unterhalb der bereits vorhandenen Importe:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Dieser Code importiert das SDK, um mit Ihrem IoT Hub zu kommunizieren.
-
Entfernen Sie die Zeile
import paho.mqtt.client as mqtt
, da diese Bibliothek nicht mehr benötigt wird. Entfernen Sie den gesamten MQTT-Code einschließlich der Themennamen, aller Codezeilen, diemqtt_client
verwenden, und der Funktionhandle_command
. Behalten Sie die Schleifewhile True:
, löschen Sie jedoch die Zeilemqtt_client.publish
aus dieser Schleife. -
Fügen Sie den folgenden Code unterhalb der Import-Anweisungen hinzu:
connection_string = "<connection string>"
Ersetzen Sie
<connection string>
durch den Verbindungsstring, den Sie zuvor in dieser Lektion für das Gerät abgerufen haben.💁 Dies ist keine Best Practice. Verbindungsstrings sollten niemals im Quellcode gespeichert werden, da sie in die Versionskontrolle eingecheckt und von jedem gefunden werden können. Wir machen dies hier der Einfachheit halber. Idealerweise sollten Sie etwas wie eine Umgebungsvariable und ein Tool wie
python-dotenv
verwenden. Sie werden mehr darüber in einer kommenden Lektion lernen. -
Fügen Sie unterhalb dieses Codes Folgendes hinzu, um ein Geräte-Client-Objekt zu erstellen, das mit dem IoT Hub kommunizieren kann, und verbinden Sie es:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Führen Sie diesen Code aus. Sie werden sehen, wie Ihr Gerät sich verbindet.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Telemetrie senden
Jetzt, da Ihr Gerät verbunden ist, können Sie Telemetrie an den IoT Hub senden, anstatt an den MQTT-Broker.
Aufgabe - Telemetrie senden
-
Fügen Sie den folgenden Code in die Schleife
while True
ein, direkt vor die Schlafanweisung:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Dieser Code erstellt eine IoT Hub
Message
, die die Bodenfeuchtigkeitsmessung als JSON-String enthält, und sendet diese als Gerät-zu-Cloud-Nachricht an den IoT Hub.
Befehle verarbeiten
Ihr Gerät muss einen Befehl vom Servercode verarbeiten, um das Relais zu steuern. Dies wird als direkte Methodenanforderung gesendet.
Aufgabe - eine direkte Methodenanforderung verarbeiten
-
Fügen Sie den folgenden Code vor der Schleife
while True
hinzu:def handle_method_request(request): print("Direct method received - ", request.name) if request.name == "relay_on": relay.on() elif request.name == "relay_off": relay.off()
Dies definiert eine Methode,
handle_method_request
, die aufgerufen wird, wenn eine direkte Methode vom IoT Hub aufgerufen wird. Jede direkte Methode hat einen Namen, und dieser Code erwartet eine Methode namensrelay_on
, um das Relais einzuschalten, undrelay_off
, um das Relais auszuschalten.💁 Dies könnte auch in einer einzigen direkten Methodenanforderung implementiert werden, indem der gewünschte Zustand des Relais in einer Nutzlast übergeben wird, die mit der Methodenanforderung übergeben und aus dem
request
-Objekt abgerufen werden kann. -
Direkte Methoden erfordern eine Antwort, um dem aufrufenden Code mitzuteilen, dass sie verarbeitet wurden. Fügen Sie den folgenden Code am Ende der Funktion
handle_method_request
hinzu, um eine Antwort auf die Anfrage zu erstellen:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Dieser Code sendet eine Antwort auf die direkte Methodenanforderung mit einem HTTP-Statuscode von 200 und sendet diese zurück an den IoT Hub.
-
Fügen Sie den folgenden Code unterhalb dieser Funktionsdefinition hinzu:
device_client.on_method_request_received = handle_method_request
Dieser Code weist den IoT Hub-Client an, die Funktion
handle_method_request
aufzurufen, wenn eine direkte Methode aufgerufen wird.
💁 Sie finden diesen Code im Ordner code/pi oder code/virtual-device.
😀 Ihr Bodenfeuchtigkeitssensor-Programm ist mit Ihrem IoT Hub verbunden!
Haftungsausschluss:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.