|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "3ac42e284a7222c0e83d2d43231a364f",
|
|
|
"translation_date": "2025-08-28T20:33:54+00:00",
|
|
|
"source_file": "2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md",
|
|
|
"language_code": "lt"
|
|
|
}
|
|
|
-->
|
|
|
# Prijunkite savo IoT įrenginį prie debesies - Virtuali IoT aparatinė įranga ir Raspberry Pi
|
|
|
|
|
|
Šioje pamokos dalyje prijungsite savo virtualų IoT įrenginį arba Raspberry Pi prie IoT Hub, kad galėtumėte siųsti telemetriją ir gauti komandas.
|
|
|
|
|
|
## Prijunkite savo įrenginį prie IoT Hub
|
|
|
|
|
|
Kitas žingsnis – prijungti savo įrenginį prie IoT Hub.
|
|
|
|
|
|
### Užduotis - prisijungti prie IoT Hub
|
|
|
|
|
|
1. Atidarykite `soil-moisture-sensor` aplanką VS Code. Įsitikinkite, kad terminale veikia virtuali aplinka, jei naudojate virtualų IoT įrenginį.
|
|
|
|
|
|
1. Įdiekite keletą papildomų Pip paketų:
|
|
|
|
|
|
```sh
|
|
|
pip3 install azure-iot-device
|
|
|
```
|
|
|
|
|
|
`azure-iot-device` yra biblioteka, skirta bendrauti su jūsų IoT Hub.
|
|
|
|
|
|
1. Pridėkite šiuos importus į `app.py` failo viršų, po esamais importais:
|
|
|
|
|
|
```python
|
|
|
from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
|
|
|
```
|
|
|
|
|
|
Šis kodas importuoja SDK, skirtą bendrauti su jūsų IoT Hub.
|
|
|
|
|
|
1. Pašalinkite eilutę `import paho.mqtt.client as mqtt`, nes ši biblioteka nebėra reikalinga. Pašalinkite visą MQTT kodą, įskaitant temų pavadinimus, visą kodą, kuris naudoja `mqtt_client` ir `handle_command`. Palikite `while True:` ciklą, tiesiog ištrinkite `mqtt_client.publish` eilutę iš šio ciklo.
|
|
|
|
|
|
1. Pridėkite šį kodą po importo pareiškimais:
|
|
|
|
|
|
```python
|
|
|
connection_string = "<connection string>"
|
|
|
```
|
|
|
|
|
|
Pakeiskite `<connection string>` ryšio eilute, kurią gavote įrenginiui anksčiau šioje pamokoje.
|
|
|
|
|
|
> 💁 Tai nėra geriausia praktika. Ryšio eilutės niekada neturėtų būti saugomos šaltinio kode, nes jos gali būti įtrauktos į versijų kontrolę ir rasti bet kas. Mes tai darome čia dėl paprastumo. Idealiu atveju turėtumėte naudoti kažką panašaus į aplinkos kintamąjį ir įrankį, pvz., [`python-dotenv`](https://pypi.org/project/python-dotenv/). Apie tai sužinosite daugiau artimiausioje pamokoje.
|
|
|
|
|
|
1. Po šio kodo pridėkite šį kodą, kad sukurtumėte įrenginio klientą, kuris galėtų bendrauti su IoT Hub, ir prijunkite jį:
|
|
|
|
|
|
```python
|
|
|
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
|
|
|
|
|
|
print('Connecting')
|
|
|
device_client.connect()
|
|
|
print('Connected')
|
|
|
```
|
|
|
|
|
|
1. Paleiskite šį kodą. Pamatysite, kaip jūsų įrenginys prisijungia.
|
|
|
|
|
|
```output
|
|
|
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py
|
|
|
Connecting
|
|
|
Connected
|
|
|
Soil moisture: 379
|
|
|
```
|
|
|
|
|
|
## Siųskite telemetriją
|
|
|
|
|
|
Dabar, kai jūsų įrenginys prijungtas, galite siųsti telemetriją į IoT Hub, o ne į MQTT brokerį.
|
|
|
|
|
|
### Užduotis - siųsti telemetriją
|
|
|
|
|
|
1. Pridėkite šį kodą į `while True` ciklą, prieš miegą:
|
|
|
|
|
|
```python
|
|
|
message = Message(json.dumps({ 'soil_moisture': soil_moisture }))
|
|
|
device_client.send_message(message)
|
|
|
```
|
|
|
|
|
|
Šis kodas sukuria IoT Hub `Message`, kuriame yra dirvožemio drėgmės rodmenys kaip JSON eilutė, ir siunčia tai į IoT Hub kaip pranešimą iš įrenginio į debesį.
|
|
|
|
|
|
## Apdorokite komandas
|
|
|
|
|
|
Jūsų įrenginys turi apdoroti komandą iš serverio kodo, kad valdytų relę. Tai siunčiama kaip tiesioginio metodo užklausa.
|
|
|
|
|
|
## Užduotis - apdoroti tiesioginio metodo užklausą
|
|
|
|
|
|
1. Pridėkite šį kodą prieš `while True` ciklą:
|
|
|
|
|
|
```python
|
|
|
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()
|
|
|
```
|
|
|
|
|
|
Tai apibrėžia metodą `handle_method_request`, kuris bus iškviečiamas, kai tiesioginis metodas bus iškviestas IoT Hub. Kiekvienas tiesioginis metodas turi pavadinimą, ir šis kodas tikisi metodo, pavadinto `relay_on`, kad įjungtų relę, ir `relay_off`, kad ją išjungtų.
|
|
|
|
|
|
> 💁 Tai taip pat galėtų būti įgyvendinta viename tiesioginio metodo užklausoje, perduodant norimą relės būseną kaip naudingąją apkrovą, kurią galima perduoti su metodo užklausa ir pasiekti iš `request` objekto.
|
|
|
|
|
|
1. Tiesioginiai metodai reikalauja atsakymo, kad praneštų kviečiančiam kodui, jog jie buvo apdoroti. Pridėkite šį kodą `handle_method_request` funkcijos pabaigoje, kad sukurtumėte atsakymą į užklausą:
|
|
|
|
|
|
```python
|
|
|
method_response = MethodResponse.create_from_method_request(request, 200)
|
|
|
device_client.send_method_response(method_response)
|
|
|
```
|
|
|
|
|
|
Šis kodas siunčia atsakymą į tiesioginio metodo užklausą su HTTP būsenos kodu 200 ir siunčia tai atgal į IoT Hub.
|
|
|
|
|
|
1. Pridėkite šį kodą po šios funkcijos apibrėžimo:
|
|
|
|
|
|
```python
|
|
|
device_client.on_method_request_received = handle_method_request
|
|
|
```
|
|
|
|
|
|
Šis kodas nurodo IoT Hub klientui iškviesti `handle_method_request` funkciją, kai iškviečiamas tiesioginis metodas.
|
|
|
|
|
|
> 💁 Šį kodą galite rasti aplanke [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi) arba [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device).
|
|
|
|
|
|
😀 Jūsų dirvožemio drėgmės jutiklio programa prijungta prie jūsų IoT Hub!
|
|
|
|
|
|
---
|
|
|
|
|
|
**Atsakomybės apribojimas**:
|
|
|
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius dėl šio vertimo naudojimo. |