6.1 KiB
Podłącz swoje urządzenie IoT do chmury - Wirtualny sprzęt IoT i Raspberry Pi
W tej części lekcji podłączysz swoje wirtualne urządzenie IoT lub Raspberry Pi do IoT Hub, aby wysyłać dane telemetryczne i odbierać polecenia.
Podłącz swoje urządzenie do IoT Hub
Kolejnym krokiem jest podłączenie urządzenia do IoT Hub.
Zadanie - podłączenie do IoT Hub
-
Otwórz folder
soil-moisture-sensor
w VS Code. Upewnij się, że środowisko wirtualne działa w terminalu, jeśli używasz wirtualnego urządzenia IoT. -
Zainstaluj dodatkowe pakiety Pip:
pip3 install azure-iot-device
azure-iot-device
to biblioteka umożliwiająca komunikację z IoT Hub. -
Dodaj następujące importy na początku pliku
app.py
, poniżej istniejących importów:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Ten kod importuje SDK do komunikacji z IoT Hub.
-
Usuń linię
import paho.mqtt.client as mqtt
, ponieważ ta biblioteka nie jest już potrzebna. Usuń cały kod MQTT, w tym nazwy tematów, cały kod używającymqtt_client
orazhandle_command
. Zachowaj pętlęwhile True:
, ale usuń linięmqtt_client.publish
z tej pętli. -
Dodaj następujący kod poniżej sekcji importów:
connection_string = "<connection string>"
Zamień
<connection string>
na ciąg połączenia, który pobrałeś dla urządzenia wcześniej w tej lekcji.💁 To nie jest najlepsza praktyka. Ciągi połączenia nigdy nie powinny być przechowywane w kodzie źródłowym, ponieważ mogą zostać zapisane w systemie kontroli wersji i znalezione przez innych. Robimy to tutaj dla uproszczenia. Idealnie powinno się używać czegoś takiego jak zmienne środowiskowe i narzędzia takie jak
python-dotenv
. Dowiesz się więcej na ten temat w kolejnej lekcji. -
Poniżej tego kodu dodaj następujący fragment, aby utworzyć obiekt klienta urządzenia, który może komunikować się z IoT Hub, i połącz go:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Uruchom ten kod. Zobaczysz, że Twoje urządzenie się połączy.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Wysyłanie danych telemetrycznych
Teraz, gdy Twoje urządzenie jest podłączone, możesz wysyłać dane telemetryczne do IoT Hub zamiast do brokera MQTT.
Zadanie - wysyłanie danych telemetrycznych
-
Dodaj następujący kod wewnątrz pętli
while True
, tuż przed funkcją sleep:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Ten kod tworzy
Message
IoT Hub zawierający odczyt wilgotności gleby jako ciąg JSON, a następnie wysyła go do IoT Hub jako wiadomość od urządzenia do chmury.
Obsługa poleceń
Twoje urządzenie musi obsługiwać polecenie z kodu serwera, aby sterować przekaźnikiem. Polecenie to jest wysyłane jako żądanie metody bezpośredniej.
Zadanie - obsługa żądania metody bezpośredniej
-
Dodaj następujący kod przed pętlą
while True
: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()
Ten kod definiuje metodę
handle_method_request
, która zostanie wywołana, gdy IoT Hub wyśle żądanie metody bezpośredniej. Każda metoda bezpośrednia ma nazwę, a ten kod oczekuje metody o nazwierelay_on
, aby włączyć przekaźnik, orazrelay_off
, aby go wyłączyć.💁 Można to również zaimplementować w jednej metodzie bezpośredniej, przekazując pożądany stan przekaźnika w ładunku, który można przesłać z żądaniem metody i który będzie dostępny z obiektu
request
. -
Metody bezpośrednie wymagają odpowiedzi, aby poinformować kod wywołujący, że zostały obsłużone. Dodaj następujący kod na końcu funkcji
handle_method_request
, aby utworzyć odpowiedź na żądanie:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Ten kod wysyła odpowiedź na żądanie metody bezpośredniej z kodem statusu HTTP 200 i przesyła ją z powrotem do IoT Hub.
-
Dodaj następujący kod poniżej definicji tej funkcji:
device_client.on_method_request_received = handle_method_request
Ten kod informuje klienta IoT Hub, aby wywołał funkcję
handle_method_request
, gdy zostanie wywołana metoda bezpośrednia.
💁 Ten kod znajdziesz w folderze code/pi lub code/virtual-device.
😀 Twój program czujnika wilgotności gleby jest podłączony do IoT Hub!
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.