|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "6754c915dae64ba70fcd5e52c37f3adf",
|
|
|
"translation_date": "2025-08-28T13:49:16+00:00",
|
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md",
|
|
|
"language_code": "sr"
|
|
|
}
|
|
|
-->
|
|
|
# Контролишите своје ноћно светло преко интернета - 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). Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода. |