|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "6754c915dae64ba70fcd5e52c37f3adf",
|
|
|
"translation_date": "2025-08-28T17:10:45+00:00",
|
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md",
|
|
|
"language_code": "uk"
|
|
|
}
|
|
|
-->
|
|
|
# Керуйте нічним світлом через Інтернет - Wio Terminal
|
|
|
|
|
|
У цій частині уроку ви будете підписуватися на команди, які надсилаються з брокера MQTT до вашого Wio Terminal.
|
|
|
|
|
|
## Підписка на команди
|
|
|
|
|
|
Наступний крок — підписатися на команди, які надсилаються з брокера MQTT, і реагувати на них.
|
|
|
|
|
|
### Завдання
|
|
|
|
|
|
Підпишіться на команди.
|
|
|
|
|
|
1. Відкрийте проєкт нічного світла у VS Code.
|
|
|
|
|
|
1. Додайте наступний код в кінці файлу `config.h`, щоб визначити назву теми для команд:
|
|
|
|
|
|
```cpp
|
|
|
const string SERVER_COMMAND_TOPIC = ID + "/commands";
|
|
|
```
|
|
|
|
|
|
`SERVER_COMMAND_TOPIC` — це тема, на яку пристрій буде підписуватися, щоб отримувати команди для LED.
|
|
|
|
|
|
1. Додайте наступний рядок в кінці функції `reconnectMQTTClient`, щоб підписатися на тему команд, коли MQTT-клієнт буде перепідключено:
|
|
|
|
|
|
```cpp
|
|
|
client.subscribe(SERVER_COMMAND_TOPIC.c_str());
|
|
|
```
|
|
|
|
|
|
1. Додайте наступний код нижче функції `reconnectMQTTClient`.
|
|
|
|
|
|
```cpp
|
|
|
void clientCallback(char *topic, uint8_t *payload, unsigned int length)
|
|
|
{
|
|
|
char buff[length + 1];
|
|
|
for (int i = 0; i < length; i++)
|
|
|
{
|
|
|
buff[i] = (char)payload[i];
|
|
|
}
|
|
|
buff[length] = '\0';
|
|
|
|
|
|
Serial.print("Message received:");
|
|
|
Serial.println(buff);
|
|
|
|
|
|
DynamicJsonDocument doc(1024);
|
|
|
deserializeJson(doc, buff);
|
|
|
JsonObject obj = doc.as<JsonObject>();
|
|
|
|
|
|
bool led_on = obj["led_on"];
|
|
|
|
|
|
if (led_on)
|
|
|
digitalWrite(D0, HIGH);
|
|
|
else
|
|
|
digitalWrite(D0, LOW);
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Ця функція буде зворотним викликом, який MQTT-клієнт викликатиме, коли отримуватиме повідомлення від сервера.
|
|
|
|
|
|
Повідомлення отримується як масив беззнакових 8-бітних цілих чисел, тому його потрібно перетворити на масив символів, щоб обробляти як текст.
|
|
|
|
|
|
Повідомлення містить JSON-документ, який декодується за допомогою бібліотеки ArduinoJson. Властивість `led_on` JSON-документа зчитується, і залежно від значення LED вмикається або вимикається.
|
|
|
|
|
|
1. Додайте наступний код до функції `createMQTTClient`:
|
|
|
|
|
|
```cpp
|
|
|
client.setCallback(clientCallback);
|
|
|
```
|
|
|
|
|
|
Цей код встановлює `clientCallback` як зворотний виклик, який буде викликатися, коли повідомлення отримується від брокера MQTT.
|
|
|
|
|
|
> 💁 Обробник `clientCallback` викликається для всіх тем, на які підписано. Якщо ви пізніше напишете код, який слухає кілька тем, ви можете отримати тему, до якої було надіслано повідомлення, з параметра `topic`, переданого до функції зворотного виклику.
|
|
|
|
|
|
1. Завантажте код на ваш Wio Terminal і використовуйте Serial Monitor, щоб побачити рівні освітлення, які надсилаються до брокера MQTT.
|
|
|
|
|
|
1. Відрегулюйте рівні освітлення, які визначаються вашим фізичним або віртуальним пристроєм. Ви побачите, як повідомлення отримуються, а команди надсилаються в терміналі. Ви також побачите, як LED вмикається і вимикається залежно від рівня освітлення.
|
|
|
|
|
|
> 💁 Ви можете знайти цей код у папці [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal).
|
|
|
|
|
|
😀 Ви успішно запрограмували ваш пристрій для реагування на команди від брокера MQTT.
|
|
|
|
|
|
---
|
|
|
|
|
|
**Відмова від відповідальності**:
|
|
|
Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу. |