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.
65 lines
4.9 KiB
65 lines
4.9 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "c527ce85d69b1a3875366ec61cbed8aa",
|
|
"translation_date": "2025-08-25T21:54:29+00:00",
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md",
|
|
"language_code": "fa"
|
|
}
|
|
-->
|
|
# کنترل چراغ خواب خود از طریق اینترنت - سختافزار مجازی IoT و Raspberry Pi
|
|
|
|
در این بخش از درس، شما به دستورات ارسالشده از یک MQTT broker به Raspberry Pi یا دستگاه IoT مجازی خود اشتراک خواهید کرد.
|
|
|
|
## اشتراک در دستورات
|
|
|
|
مرحله بعدی اشتراک در دستورات ارسالشده از MQTT broker و پاسخ به آنها است.
|
|
|
|
### وظیفه
|
|
|
|
اشتراک در دستورات.
|
|
|
|
1. پروژه چراغ خواب را در VS Code باز کنید.
|
|
|
|
1. اگر از یک دستگاه IoT مجازی استفاده میکنید، مطمئن شوید که ترمینال محیط مجازی را اجرا میکند. اگر از Raspberry Pi استفاده میکنید، نیازی به استفاده از محیط مجازی ندارید.
|
|
|
|
1. کد زیر را بعد از تعریفهای `client_telemetry_topic` اضافه کنید:
|
|
|
|
```python
|
|
server_command_topic = id + '/commands'
|
|
```
|
|
|
|
`server_command_topic` موضوع MQTT است که دستگاه برای دریافت دستورات LED در آن اشتراک خواهد کرد.
|
|
|
|
1. کد زیر را درست بالای حلقه اصلی، بعد از خط `mqtt_client.loop_start()` اضافه کنید:
|
|
|
|
```python
|
|
def handle_command(client, userdata, message):
|
|
payload = json.loads(message.payload.decode())
|
|
print("Message received:", payload)
|
|
|
|
if payload['led_on']:
|
|
led.on()
|
|
else:
|
|
led.off()
|
|
|
|
mqtt_client.subscribe(server_command_topic)
|
|
mqtt_client.on_message = handle_command
|
|
```
|
|
|
|
این کد یک تابع به نام `handle_command` تعریف میکند که یک پیام را بهعنوان یک سند JSON میخواند و مقدار ویژگی `led_on` را بررسی میکند. اگر مقدار آن `True` باشد، LED روشن میشود، در غیر این صورت خاموش میشود.
|
|
|
|
کلاینت MQTT در موضوعی که سرور پیامها را ارسال خواهد کرد اشتراک میکند و تابع `handle_command` را تنظیم میکند تا هنگام دریافت پیام فراخوانی شود.
|
|
|
|
> 💁 هندلر `on_message` برای تمام موضوعاتی که در آنها اشتراک دارید فراخوانی میشود. اگر بعداً کدی بنویسید که به چندین موضوع گوش دهد، میتوانید موضوعی که پیام به آن ارسال شده است را از شیء `message` که به تابع هندلر ارسال میشود، دریافت کنید.
|
|
|
|
1. کد را به همان روشی که کد بخش قبلی تکلیف را اجرا کردید، اجرا کنید. اگر از یک دستگاه IoT مجازی استفاده میکنید، مطمئن شوید که برنامه CounterFit در حال اجرا است و حسگر نور و LED در پینهای صحیح ایجاد شدهاند.
|
|
|
|
1. سطح نور تشخیص دادهشده توسط دستگاه فیزیکی یا مجازی خود را تنظیم کنید. پیامهای دریافتشده و دستورات ارسالشده در ترمینال نوشته خواهند شد. LED نیز بسته به سطح نور روشن و خاموش خواهد شد.
|
|
|
|
> 💁 شما میتوانید این کد را در پوشه [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device) یا پوشه [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi) پیدا کنید.
|
|
|
|
😀 شما با موفقیت دستگاه خود را برای پاسخ به دستورات از یک MQTT broker کدنویسی کردید.
|
|
|
|
**سلب مسئولیت**:
|
|
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه میشود از ترجمه حرفهای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. |