6.2 KiB
Csatlakoztassa IoT eszközét a felhőhöz - Virtuális IoT hardver és Raspberry Pi
A lecke ezen részében csatlakoztatni fogja virtuális IoT eszközét vagy Raspberry Pi-jét az IoT Hubhoz, hogy telemetriát küldjön és parancsokat fogadjon.
Csatlakoztassa eszközét az IoT Hubhoz
A következő lépés az eszköz csatlakoztatása az IoT Hubhoz.
Feladat - csatlakozás az IoT Hubhoz
-
Nyissa meg a
soil-moisture-sensor
mappát a VS Code-ban. Győződjön meg arról, hogy a virtuális környezet fut a terminálban, ha virtuális IoT eszközt használ. -
Telepítsen néhány további Pip csomagot:
pip3 install azure-iot-device
Az
azure-iot-device
egy könyvtár, amely lehetővé teszi az IoT Hubbal való kommunikációt. -
Adja hozzá a következő importokat az
app.py
fájl tetejére, a meglévő importok alá:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Ez a kód importálja az SDK-t az IoT Hubbal való kommunikációhoz.
-
Távolítsa el az
import paho.mqtt.client as mqtt
sort, mivel erre a könyvtárra már nincs szükség. Távolítsa el az összes MQTT kódot, beleértve a témaneveket, az összes kódot, amely amqtt_client
-et használja, és ahandle_command
-ot. Tartsa meg awhile True:
ciklust, csak törölje amqtt_client.publish
sort ebből a ciklusból. -
Adja hozzá a következő kódot az import utasítások alá:
connection_string = "<connection string>"
Cserélje ki a
<connection string>
helyére azt a kapcsolat karakterláncot, amelyet korábban a lecke során az eszközhöz lekért.💁 Ez nem a legjobb gyakorlat. A kapcsolat karakterláncokat soha nem szabad a forráskódban tárolni, mivel ezek bekerülhetnek a verziókezelésbe, és bárki megtalálhatja őket. Itt az egyszerűség kedvéért tesszük ezt. Ideális esetben környezeti változót és egy olyan eszközt kellene használni, mint a
python-dotenv
. Erről többet fog tanulni egy következő leckében. -
E kód alá adja hozzá a következőt, hogy létrehozzon egy eszköz kliens objektumot, amely képes kommunikálni az IoT Hubbal, és csatlakoztassa azt:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Futtassa ezt a kódot. Látni fogja, hogy az eszköz csatlakozik.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Telemetria küldése
Most, hogy az eszköz csatlakozott, telemetriát küldhet az IoT Hubnak az MQTT broker helyett.
Feladat - telemetria küldése
-
Adja hozzá a következő kódot a
while True
ciklusba, közvetlenül az alvás előtt:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Ez a kód létrehoz egy IoT Hub
Message
-t, amely a talajnedvesség-értéket JSON karakterláncként tartalmazza, majd ezt eszköz-felhő üzenetként elküldi az IoT Hubnak.
Parancsok kezelése
Az eszköznek kezelnie kell egy parancsot a szerver kódjától, hogy vezérelje a relét. Ez közvetlen metódus kérésként kerül elküldésre.
Feladat - közvetlen metódus kérés kezelése
-
Adja hozzá a következő kódot a
while True
ciklus elé: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()
Ez definiál egy metódust,
handle_method_request
, amelyet akkor hívnak meg, amikor az IoT Hub közvetlen metódust hív meg. Minden közvetlen metódusnak van egy neve, és ez a kód egyrelay_on
nevű metódust vár, amely bekapcsolja a relét, valamint egyrelay_off
nevű metódust, amely kikapcsolja azt.💁 Ez egyetlen közvetlen metódus kérésben is megvalósítható, amely a relé kívánt állapotát egy payloadban adja át, amelyet a metódus kéréshez lehet csatolni, és amely elérhető a
request
objektumból. -
A közvetlen metódusok válaszra van szükségük, hogy jelezzék a hívó kódnak, hogy kezelték őket. Adja hozzá a következő kódot a
handle_method_request
függvény végéhez, hogy választ hozzon létre a kérésre:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Ez a kód válaszol a közvetlen metódus kérésre egy 200-as HTTP státuszkóddal, és visszaküldi ezt az IoT Hubnak.
-
Adja hozzá a következő kódot a függvény definíciója alá:
device_client.on_method_request_received = handle_method_request
Ez a kód azt mondja az IoT Hub kliensnek, hogy hívja meg a
handle_method_request
függvényt, amikor egy közvetlen metódust hívnak meg.
💁 Ezt a kódot megtalálja a code/pi vagy code/virtual-device mappában.
😀 A talajnedvesség-érzékelő programja csatlakozott az IoT Hubhoz!
Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.