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.
130 lines
11 KiB
130 lines
11 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "3ac42e284a7222c0e83d2d43231a364f",
|
|
"translation_date": "2025-08-27T12:03:20+00:00",
|
|
"source_file": "2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md",
|
|
"language_code": "pa"
|
|
}
|
|
-->
|
|
# ਆਪਣਾ IoT ਡਿਵਾਈਸ ਕਲਾਉਡ ਨਾਲ ਜੋੜੋ - ਵਰਚੁਅਲ IoT ਹਾਰਡਵੇਅਰ ਅਤੇ ਰਾਸਪਬੈਰੀ ਪਾਈ
|
|
|
|
ਇਸ ਪਾਠ ਦੇ ਇਸ ਹਿੱਸੇ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਜਾਂ ਰਾਸਪਬੈਰੀ ਪਾਈ ਨੂੰ ਆਪਣੇ IoT ਹੱਬ ਨਾਲ ਜੋੜੋਗੇ, ਤਾਂ ਜੋ ਟੈਲੀਮੇਟਰੀ ਭੇਜ ਸਕੋ ਅਤੇ ਕਮਾਂਡ ਪ੍ਰਾਪਤ ਕਰ ਸਕੋ।
|
|
|
|
## ਆਪਣੇ ਡਿਵਾਈਸ ਨੂੰ IoT ਹੱਬ ਨਾਲ ਜੋੜੋ
|
|
|
|
ਅਗਲਾ ਕਦਮ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਨੂੰ IoT ਹੱਬ ਨਾਲ ਜੋੜਨਾ ਹੈ।
|
|
|
|
### ਟਾਸਕ - IoT ਹੱਬ ਨਾਲ ਜੋੜੋ
|
|
|
|
1. `soil-moisture-sensor` ਫੋਲਡਰ ਨੂੰ VS Code ਵਿੱਚ ਖੋਲ੍ਹੋ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਟਰਮੀਨਲ ਵਿੱਚ ਚੱਲ ਰਿਹਾ ਹੈ ਜੇ ਤੁਸੀਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਰਤ ਰਹੇ ਹੋ।
|
|
|
|
1. ਕੁਝ ਵਾਧੂ Pip ਪੈਕੇਜ ਇੰਸਟਾਲ ਕਰੋ:
|
|
|
|
```sh
|
|
pip3 install azure-iot-device
|
|
```
|
|
|
|
`azure-iot-device` ਤੁਹਾਡੇ IoT ਹੱਬ ਨਾਲ ਸੰਚਾਰ ਕਰਨ ਲਈ ਇੱਕ ਲਾਇਬ੍ਰੇਰੀ ਹੈ।
|
|
|
|
1. ਹੇਠਾਂ ਦਿੱਤੇ ਇਮਪੋਰਟਸ ਨੂੰ `app.py` ਫਾਈਲ ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਮੌਜੂਦਾ ਇਮਪੋਰਟਸ ਦੇ ਹੇਠਾਂ ਸ਼ਾਮਲ ਕਰੋ:
|
|
|
|
```python
|
|
from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
|
|
```
|
|
|
|
ਇਹ ਕੋਡ ਤੁਹਾਡੇ IoT ਹੱਬ ਨਾਲ ਸੰਚਾਰ ਕਰਨ ਲਈ SDK ਨੂੰ ਇਮਪੋਰਟ ਕਰਦਾ ਹੈ।
|
|
|
|
1. `import paho.mqtt.client as mqtt` ਲਾਈਨ ਨੂੰ ਹਟਾਓ ਕਿਉਂਕਿ ਇਹ ਲਾਇਬ੍ਰੇਰੀ ਹੁਣ ਲੋੜੀਂਦੀ ਨਹੀਂ ਹੈ। ਸਾਰੇ MQTT ਕੋਡ ਨੂੰ ਹਟਾਓ ਜਿਸ ਵਿੱਚ ਟਾਪਿਕ ਨਾਂ, `mqtt_client` ਵਰਤਣ ਵਾਲਾ ਕੋਡ ਅਤੇ `handle_command` ਸ਼ਾਮਲ ਹੈ। `while True:` ਲੂਪ ਨੂੰ ਰੱਖੋ, ਸਿਰਫ ਇਸ ਲੂਪ ਵਿੱਚੋਂ `mqtt_client.publish` ਲਾਈਨ ਨੂੰ ਹਟਾਓ।
|
|
|
|
1. ਇਮਪੋਰਟ ਸਟੇਟਮੈਂਟਸ ਦੇ ਹੇਠਾਂ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ:
|
|
|
|
```python
|
|
connection_string = "<connection string>"
|
|
```
|
|
|
|
`<connection string>` ਨੂੰ ਇਸ ਪਾਠ ਵਿੱਚ ਪਹਿਲਾਂ ਪ੍ਰਾਪਤ ਕੀਤੇ ਡਿਵਾਈਸ ਲਈ ਕਨੈਕਸ਼ਨ ਸਟ੍ਰਿੰਗ ਨਾਲ ਬਦਲੋ।
|
|
|
|
> 💁 ਇਹ ਸਹੀ ਤਰੀਕਾ ਨਹੀਂ ਹੈ। ਕਨੈਕਸ਼ਨ ਸਟ੍ਰਿੰਗਜ਼ ਨੂੰ ਕਦੇ ਵੀ ਸੋਰਸ ਕੋਡ ਵਿੱਚ ਸਟੋਰ ਨਹੀਂ ਕਰਨਾ ਚਾਹੀਦਾ, ਕਿਉਂਕਿ ਇਹ ਸੋਰਸ ਕੋਡ ਕੰਟਰੋਲ ਵਿੱਚ ਚੈੱਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਕਿਸੇ ਵੀ ਦੁਆਰਾ ਲੱਭਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਅਸੀਂ ਇਹ ਸਿਰਫ ਸਹੂਲਤ ਲਈ ਕਰ ਰਹੇ ਹਾਂ। ਆਦਰਸ਼ ਤੌਰ 'ਤੇ ਤੁਹਾਨੂੰ ਕੁਝ ਜਿਵੇਂ ਇਨਵਾਇਰਨਮੈਂਟ ਵੈਰੀਏਬਲ ਅਤੇ [`python-dotenv`](https://pypi.org/project/python-dotenv/) ਵਰਗੇ ਟੂਲ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ। ਤੁਸੀਂ ਇਸ ਬਾਰੇ ਅਗਲੇ ਪਾਠ ਵਿੱਚ ਹੋਰ ਸਿੱਖੋਗੇ।
|
|
|
|
1. ਇਸ ਕੋਡ ਦੇ ਹੇਠਾਂ, ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ ਤਾਂ ਜੋ ਇੱਕ ਡਿਵਾਈਸ ਕਲਾਇੰਟ ਆਬਜੈਕਟ ਬਣਾਇਆ ਜਾ ਸਕੇ ਜੋ IoT ਹੱਬ ਨਾਲ ਸੰਚਾਰ ਕਰ ਸਕੇ ਅਤੇ ਇਸਨੂੰ ਕਨੈਕਟ ਕਰ ਸਕੇ:
|
|
|
|
```python
|
|
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
|
|
|
|
print('Connecting')
|
|
device_client.connect()
|
|
print('Connected')
|
|
```
|
|
|
|
1. ਇਸ ਕੋਡ ਨੂੰ ਚਲਾਓ। ਤੁਸੀਂ ਦੇਖੋਗੇ ਕਿ ਤੁਹਾਡਾ ਡਿਵਾਈਸ ਕਨੈਕਟ ਹੋ ਗਿਆ ਹੈ।
|
|
|
|
```output
|
|
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py
|
|
Connecting
|
|
Connected
|
|
Soil moisture: 379
|
|
```
|
|
|
|
## ਟੈਲੀਮੇਟਰੀ ਭੇਜੋ
|
|
|
|
ਹੁਣ ਜਦੋਂ ਤੁਹਾਡਾ ਡਿਵਾਈਸ ਕਨੈਕਟ ਹੋ ਗਿਆ ਹੈ, ਤੁਸੀਂ MQTT ਬ੍ਰੋਕਰ ਦੀ ਬਜਾਏ IoT ਹੱਬ ਨੂੰ ਟੈਲੀਮੇਟਰੀ ਭੇਜ ਸਕਦੇ ਹੋ।
|
|
|
|
### ਟਾਸਕ - ਟੈਲੀਮੇਟਰੀ ਭੇਜੋ
|
|
|
|
1. ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ `while True` ਲੂਪ ਦੇ ਅੰਦਰ, ਸਿਰਫ ਸਲੀਪ ਤੋਂ ਪਹਿਲਾਂ ਸ਼ਾਮਲ ਕਰੋ:
|
|
|
|
```python
|
|
message = Message(json.dumps({ 'soil_moisture': soil_moisture }))
|
|
device_client.send_message(message)
|
|
```
|
|
|
|
ਇਹ ਕੋਡ ਇੱਕ IoT ਹੱਬ `Message` ਬਣਾਉਂਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਮਿੱਟੀ ਦੀ ਨਮੀ ਦੀ ਪੜਚੋਲ JSON ਸਟ੍ਰਿੰਗ ਦੇ ਰੂਪ ਵਿੱਚ ਹੁੰਦੀ ਹੈ, ਅਤੇ ਇਸਨੂੰ IoT ਹੱਬ ਨੂੰ ਡਿਵਾਈਸ ਤੋਂ ਕਲਾਉਡ ਸੁਨੇਹੇ ਵਜੋਂ ਭੇਜਦਾ ਹੈ।
|
|
|
|
## ਕਮਾਂਡਸ ਨੂੰ ਹੈਂਡਲ ਕਰੋ
|
|
|
|
ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਨੂੰ ਸਰਵਰ ਕੋਡ ਤੋਂ ਇੱਕ ਕਮਾਂਡ ਹੈਂਡਲ ਕਰਨ ਦੀ ਲੋੜ ਹੈ ਤਾਂ ਜੋ ਰੀਲੇ ਨੂੰ ਕੰਟਰੋਲ ਕੀਤਾ ਜਾ ਸਕੇ। ਇਹ ਇੱਕ ਡਾਇਰੈਕਟ ਮੈਥਡ ਰਿਕਵੈਸਟ ਵਜੋਂ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ।
|
|
|
|
## ਟਾਸਕ - ਡਾਇਰੈਕਟ ਮੈਥਡ ਰਿਕਵੈਸਟ ਨੂੰ ਹੈਂਡਲ ਕਰੋ
|
|
|
|
1. `while True` ਲੂਪ ਤੋਂ ਪਹਿਲਾਂ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ:
|
|
|
|
```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()
|
|
```
|
|
|
|
ਇਹ ਇੱਕ ਮੈਥਡ, `handle_method_request`, ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ ਜੋ IoT ਹੱਬ ਦੁਆਰਾ ਇੱਕ ਡਾਇਰੈਕਟ ਮੈਥਡ ਕਾਲ ਕੀਤੇ ਜਾਣ 'ਤੇ ਕਾਲ ਕੀਤਾ ਜਾਵੇਗਾ। ਹਰ ਡਾਇਰੈਕਟ ਮੈਥਡ ਦਾ ਇੱਕ ਨਾਂ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਇਹ ਕੋਡ ਇੱਕ ਮੈਥਡ ਦੀ ਉਮੀਦ ਕਰਦਾ ਹੈ ਜਿਸਨੂੰ `relay_on` ਰੀਲੇ ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਅਤੇ `relay_off` ਰੀਲੇ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
|
|
|
|
> 💁 ਇਹ ਇੱਕ ਸਿੰਗਲ ਡਾਇਰੈਕਟ ਮੈਥਡ ਰਿਕਵੈਸਟ ਵਿੱਚ ਵੀ ਲਾਗੂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਰੀਲੇ ਦੀ ਚਾਹੀਦੀ ਸਥਿਤੀ ਨੂੰ ਇੱਕ ਪੇਲੋਡ ਵਿੱਚ ਪਾਸ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਜੋ ਮੈਥਡ ਰਿਕਵੈਸਟ ਨਾਲ ਪਾਸ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ `request` ਆਬਜੈਕਟ ਤੋਂ ਉਪਲਬਧ ਹੋ ਸਕਦਾ ਹੈ।
|
|
|
|
1. ਡਾਇਰੈਕਟ ਮੈਥਡਸ ਨੂੰ ਇੱਕ ਰਿਸਪਾਂਸ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਤਾਂ ਜੋ ਕਾਲ ਕਰਨ ਵਾਲੇ ਕੋਡ ਨੂੰ ਦੱਸਿਆ ਜਾ ਸਕੇ ਕਿ ਇਹ ਹੈਂਡਲ ਕੀਤਾ ਗਿਆ ਹੈ। `handle_method_request` ਫੰਕਸ਼ਨ ਦੇ ਅੰਤ ਵਿੱਚ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ ਤਾਂ ਜੋ ਰਿਕਵੈਸਟ ਲਈ ਇੱਕ ਰਿਸਪਾਂਸ ਬਣਾਇਆ ਜਾ ਸਕੇ:
|
|
|
|
```python
|
|
method_response = MethodResponse.create_from_method_request(request, 200)
|
|
device_client.send_method_response(method_response)
|
|
```
|
|
|
|
ਇਹ ਕੋਡ ਡਾਇਰੈਕਟ ਮੈਥਡ ਰਿਕਵੈਸਟ ਨੂੰ HTTP ਸਟੇਟਸ ਕੋਡ 200 ਦੇ ਨਾਲ ਇੱਕ ਰਿਸਪਾਂਸ ਭੇਜਦਾ ਹੈ, ਅਤੇ ਇਸਨੂੰ IoT ਹੱਬ ਨੂੰ ਵਾਪਸ ਭੇਜਦਾ ਹੈ।
|
|
|
|
1. ਇਸ ਫੰਕਸ਼ਨ ਪਰਿਭਾਸ਼ਾ ਦੇ ਹੇਠਾਂ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ:
|
|
|
|
```python
|
|
device_client.on_method_request_received = handle_method_request
|
|
```
|
|
|
|
ਇਹ ਕੋਡ IoT ਹੱਬ ਕਲਾਇੰਟ ਨੂੰ ਦੱਸਦਾ ਹੈ ਕਿ ਜਦੋਂ ਇੱਕ ਡਾਇਰੈਕਟ ਮੈਥਡ ਕਾਲ ਕੀਤਾ ਜਾਵੇ ਤਾਂ `handle_method_request` ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰੋ।
|
|
|
|
> 💁 ਤੁਸੀਂ ਇਹ ਕੋਡ [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi) ਜਾਂ [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device) ਫੋਲਡਰ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ।
|
|
|
|
😀 ਤੁਹਾਡਾ ਮਿੱਟੀ ਨਮੀ ਸੈਂਸਰ ਪ੍ਰੋਗਰਾਮ ਤੁਹਾਡੇ IoT ਹੱਬ ਨਾਲ ਜੁੜ ਗਿਆ ਹੈ!
|
|
|
|
---
|
|
|
|
**ਅਸਵੀਕਤੀ**:
|
|
ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਹਾਲਾਂਕਿ ਅਸੀਂ ਸਹੀਅਤ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ। |