5.7 KiB
Povežite svojo IoT napravo s cloudom - Virtualna IoT strojna oprema in Raspberry Pi
V tem delu lekcije boste svojo virtualno IoT napravo ali Raspberry Pi povezali z vašim IoT Hubom, da boste lahko pošiljali telemetrijo in prejemali ukaze.
Povežite svojo napravo z IoT Hubom
Naslednji korak je povezava vaše naprave z IoT Hubom.
Naloga - povezava z IoT Hubom
-
Odprite mapo
soil-moisture-sensor
v VS Code. Prepričajte se, da je virtualno okolje zagnano v terminalu, če uporabljate virtualno IoT napravo. -
Namestite nekaj dodatnih Pip paketov:
pip3 install azure-iot-device
azure-iot-device
je knjižnica za komunikacijo z vašim IoT Hubom. -
Dodajte naslednje uvoze na vrh datoteke
app.py
, pod obstoječimi uvozi:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Ta koda uvozi SDK za komunikacijo z vašim IoT Hubom.
-
Odstranite vrstico
import paho.mqtt.client as mqtt
, saj ta knjižnica ni več potrebna. Odstranite vso MQTT kodo, vključno z imeni tem, vso kodo, ki uporabljamqtt_client
, inhandle_command
. Obdržite zankowhile True:
, samo izbrišite vrsticomqtt_client.publish
iz te zanke. -
Dodajte naslednjo kodo pod uvoznimi stavki:
connection_string = "<connection string>"
Zamenjajte
<connection string>
z naborom za povezavo, ki ste ga pridobili za napravo prej v tej lekciji.💁 To ni najboljša praksa. Nabori za povezavo nikoli ne bi smeli biti shranjeni v izvorni kodi, saj jih je mogoče vključiti v sistem za nadzor izvorne kode in jih lahko najde kdorkoli. Tukaj to počnemo zaradi enostavnosti. Idealno bi bilo uporabiti nekaj, kot so okoljske spremenljivke, in orodje, kot je
python-dotenv
. Več o tem boste izvedeli v eni od prihodnjih lekcij. -
Pod to kodo dodajte naslednje, da ustvarite objekt odjemalca naprave, ki lahko komunicira z IoT Hubom, in ga povežite:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Zaženite to kodo. Videli boste, da se vaša naprava poveže.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Pošiljanje telemetrije
Zdaj, ko je vaša naprava povezana, lahko pošiljate telemetrijo v IoT Hub namesto v MQTT posrednik.
Naloga - pošiljanje telemetrije
-
Dodajte naslednjo kodo znotraj zanke
while True
, tik pred ukazom za spanje:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Ta koda ustvari IoT Hub
Message
, ki vsebuje odčitek vlažnosti zemlje kot JSON niz, nato pa ga pošlje v IoT Hub kot sporočilo naprava-v-oblak.
Obdelava ukazov
Vaša naprava mora obdelati ukaz iz strežniške kode za upravljanje releja. To je poslano kot zahteva za neposredno metodo.
Naloga - obdelava zahteve za neposredno metodo
-
Dodajte naslednjo kodo pred zanko
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()
Ta koda definira metodo
handle_method_request
, ki se bo klicala, ko IoT Hub pokliče neposredno metodo. Vsaka neposredna metoda ima ime, ta koda pa pričakuje metodo z imenomrelay_on
za vklop releja inrelay_off
za izklop releja.💁 To bi lahko bilo implementirano tudi v eni sami zahtevi za neposredno metodo, kjer bi se želeno stanje releja posredovalo v obliki podatkovnega paketa, ki ga je mogoče posredovati z zahtevo metode in je na voljo iz objekta
request
. -
Neposredne metode zahtevajo odgovor, da sporočijo klicni kodi, da so bile obdelane. Dodajte naslednjo kodo na konec funkcije
handle_method_request
, da ustvarite odgovor na zahtevo:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Ta koda pošlje odgovor na zahtevo za neposredno metodo s statusno kodo HTTP 200 in ga pošlje nazaj v IoT Hub.
-
Dodajte naslednjo kodo pod definicijo te funkcije:
device_client.on_method_request_received = handle_method_request
Ta koda pove IoT Hub odjemalcu, naj pokliče funkcijo
handle_method_request
, ko je klicana neposredna metoda.
💁 To kodo lahko najdete v mapi code/pi ali code/virtual-device.
😀 Vaš program za senzor vlažnosti zemlje je povezan z vašim IoT Hubom!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.