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.
IoT-For-Beginners/translations/bg/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md

93 lines
5.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "6754c915dae64ba70fcd5e52c37f3adf",
"translation_date": "2025-08-28T10:10:49+00:00",
"source_file": "1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md",
"language_code": "bg"
}
-->
# Контролирайте нощната си лампа през Интернет - 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);
}
```
Тази функция ще бъде callback, който MQTT клиентът ще извика, когато получи съобщение от сървъра.
Съобщението се получава като масив от беззнакови 8-битови числа, затова трябва да бъде преобразувано в масив от символи, за да се третира като текст.
Съобщението съдържа JSON документ, който се декодира с помощта на библиотеката ArduinoJson. Свойството `led_on` от JSON документа се прочита и, в зависимост от стойността му, LED светлината се включва или изключва.
1. Добавете следния код към функцията `createMQTTClient`:
```cpp
client.setCallback(clientCallback);
```
Този код задава `clientCallback` като callback, който ще бъде извикан, когато се получи съобщение от MQTT брокера.
> 💁 Callback обработчикът `clientCallback` се извиква за всички теми, за които сте се абонирали. Ако по-късно напишете код, който слуша множество теми, можете да получите темата, към която е изпратено съобщението, от параметъра `topic`, предаден на callback функцията.
1. Качете кода на вашия Wio Terminal и използвайте Serial Monitor, за да видите нивата на светлина, които се изпращат към MQTT брокера.
1. Регулирайте нивата на светлина, засечени от вашето физическо или виртуално устройство. Ще видите съобщения, които се получават, и команди, които се изпращат в терминала. Също така ще видите как LED светлината се включва и изключва в зависимост от нивото на светлина.
> 💁 Можете да намерите този код в папката [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal).
😀 Успешно програмирахте вашето устройство да реагира на команди от MQTT брокер.
---
**Отказ от отговорност**:
Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод.