5.6 KiB
Povežite svoj IoT uređaj s oblakom - Virtualni IoT hardver i Raspberry Pi
U ovom dijelu lekcije, povezat ćete svoj virtualni IoT uređaj ili Raspberry Pi s IoT Hubom kako biste slali telemetriju i primali naredbe.
Povežite svoj uređaj s IoT Hubom
Sljedeći korak je povezivanje vašeg uređaja s IoT Hubom.
Zadatak - povezivanje s IoT Hubom
-
Otvorite mapu
soil-moisture-sensor
u VS Codeu. Provjerite je li virtualno okruženje pokrenuto u terminalu ako koristite virtualni IoT uređaj. -
Instalirajte dodatne Pip pakete:
pip3 install azure-iot-device
azure-iot-device
je biblioteka za komunikaciju s vašim IoT Hubom. -
Dodajte sljedeće uvoze na vrh datoteke
app.py
, ispod postojećih uvoza:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Ovaj kod uvozi SDK za komunikaciju s vašim IoT Hubom.
-
Uklonite liniju
import paho.mqtt.client as mqtt
jer ova biblioteka više nije potrebna. Uklonite sav MQTT kod, uključujući nazive tema, sav kod koji koristimqtt_client
ihandle_command
. Zadržite petljuwhile True:
, samo izbrišite linijumqtt_client.publish
iz ove petlje. -
Dodajte sljedeći kod ispod uvoznih izjava:
connection_string = "<connection string>"
Zamijenite
<connection string>
s nizom za povezivanje koji ste ranije dobili za uređaj u ovoj lekciji.💁 Ovo nije najbolja praksa. Nizovi za povezivanje nikada ne bi trebali biti pohranjeni u izvornom kodu, jer se mogu dodati u kontrolu izvornog koda i pronaći ih bilo tko. Ovo radimo ovdje radi jednostavnosti. Idealno bi bilo koristiti nešto poput varijable okruženja i alat poput
python-dotenv
. Više o tome naučit ćete u nadolazećoj lekciji. -
Ispod ovog koda dodajte sljedeće kako biste stvorili objekt klijenta uređaja koji može komunicirati s IoT Hubom i povezati ga:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Pokrenite ovaj kod. Vidjet ćete da se vaš uređaj povezuje.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Slanje telemetrije
Sada kada je vaš uređaj povezan, možete slati telemetriju IoT Hubu umjesto MQTT brokeru.
Zadatak - slanje telemetrije
-
Dodajte sljedeći kod unutar petlje
while True
, neposredno prije spavanja:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Ovaj kod stvara IoT Hub
Message
koji sadrži očitanje vlažnosti tla kao JSON string, a zatim ga šalje IoT Hubu kao poruku od uređaja prema oblaku.
Obrada naredbi
Vaš uređaj treba obraditi naredbu od poslužiteljskog koda za upravljanje relejem. Ovo se šalje kao zahtjev za direktnu metodu.
Zadatak - obrada zahtjeva za direktnu metodu
-
Dodajte sljedeći kod prije petlje
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()
Ovo definira metodu
handle_method_request
koja će se pozvati kada IoT Hub pozove direktnu metodu. Svaka direktna metoda ima ime, a ovaj kod očekuje metodu nazvanurelay_on
za uključivanje releja irelay_off
za isključivanje releja.💁 Ovo bi se također moglo implementirati u jednoj direktnoj metodi, prosljeđujući željeno stanje releja u payload koji se može proslijediti sa zahtjevom metode i biti dostupan iz objekta
request
. -
Direktne metode zahtijevaju odgovor kako bi obavijestile pozivajući kod da su obrađene. Dodajte sljedeći kod na kraj funkcije
handle_method_request
kako biste stvorili odgovor na zahtjev:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Ovaj kod šalje odgovor na zahtjev za direktnu metodu s HTTP statusnim kodom 200 i šalje ga natrag IoT Hubu.
-
Dodajte sljedeći kod ispod definicije ove funkcije:
device_client.on_method_request_received = handle_method_request
Ovaj kod govori IoT Hub klijentu da pozove funkciju
handle_method_request
kada se pozove direktna metoda.
💁 Ovaj kod možete pronaći u mapi code/pi ili code/virtual-device.
😀 Vaš program senzora vlažnosti tla povezan je s vašim IoT Hubom!
Odricanje od odgovornosti:
Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.