You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/pl/2-farm/lessons/4-migrate-your-plant-to-the.../single-board-computer-conne...

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

  1. 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.

  2. Zainstaluj dodatkowe pakiety Pip:

    pip3 install azure-iot-device
    

    azure-iot-device to biblioteka umożliwiająca komunikację z IoT Hub.

  3. 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.

  4. 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ący mqtt_client oraz handle_command. Zachowaj pętlę while True:, ale usuń linię mqtt_client.publish z tej pętli.

  5. 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.

  6. 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')
    
  7. 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

  1. 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

  1. 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 nazwie relay_on, aby włączyć przekaźnik, oraz relay_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.

  2. 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.

  3. 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.