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.
93 lines
4.0 KiB
93 lines
4.0 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "6754c915dae64ba70fcd5e52c37f3adf",
|
|
"translation_date": "2025-08-26T15:02:20+00:00",
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md",
|
|
"language_code": "es"
|
|
}
|
|
-->
|
|
# Controla tu luz nocturna a través de Internet - Wio Terminal
|
|
|
|
En esta parte de la lección, te suscribirás a los comandos enviados desde un broker MQTT a tu Wio Terminal.
|
|
|
|
## Suscribirse a comandos
|
|
|
|
El siguiente paso es suscribirse a los comandos enviados desde el broker MQTT y responder a ellos.
|
|
|
|
### Tarea
|
|
|
|
Suscríbete a los comandos.
|
|
|
|
1. Abre el proyecto de luz nocturna en VS Code.
|
|
|
|
1. Agrega el siguiente código al final del archivo `config.h` para definir el nombre del tema para los comandos:
|
|
|
|
```cpp
|
|
const string SERVER_COMMAND_TOPIC = ID + "/commands";
|
|
```
|
|
|
|
El `SERVER_COMMAND_TOPIC` es el tema al que el dispositivo se suscribirá para recibir comandos de LED.
|
|
|
|
1. Agrega la siguiente línea al final de la función `reconnectMQTTClient` para suscribirte al tema de comandos cuando el cliente MQTT se reconecte:
|
|
|
|
```cpp
|
|
client.subscribe(SERVER_COMMAND_TOPIC.c_str());
|
|
```
|
|
|
|
1. Agrega el siguiente código debajo de la función `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);
|
|
}
|
|
```
|
|
|
|
Esta función será el callback que el cliente MQTT llamará cuando reciba un mensaje del servidor.
|
|
|
|
El mensaje se recibe como un array de enteros sin signo de 8 bits, por lo que necesita ser convertido a un array de caracteres para tratarlo como texto.
|
|
|
|
El mensaje contiene un documento JSON, y se decodifica utilizando la biblioteca ArduinoJson. La propiedad `led_on` del documento JSON se lee, y dependiendo de su valor, el LED se enciende o se apaga.
|
|
|
|
1. Agrega el siguiente código a la función `createMQTTClient`:
|
|
|
|
```cpp
|
|
client.setCallback(clientCallback);
|
|
```
|
|
|
|
Este código establece el `clientCallback` como el callback que se llamará cuando se reciba un mensaje del broker MQTT.
|
|
|
|
> 💁 El manejador `clientCallback` se llama para todos los temas suscritos. Si más adelante escribes código que escucha múltiples temas, puedes obtener el tema al que se envió el mensaje desde el parámetro `topic` que se pasa a la función callback.
|
|
|
|
1. Sube el código a tu Wio Terminal y utiliza el Monitor Serial para ver los niveles de luz que se envían al broker MQTT.
|
|
|
|
1. Ajusta los niveles de luz detectados por tu dispositivo físico o virtual. Verás mensajes siendo recibidos y comandos siendo enviados en el terminal. También verás el LED encendiéndose y apagándose dependiendo del nivel de luz.
|
|
|
|
> 💁 Puedes encontrar este código en la carpeta [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal).
|
|
|
|
😀 Has codificado exitosamente tu dispositivo para responder a comandos de un broker MQTT.
|
|
|
|
---
|
|
|
|
**Descargo de responsabilidad**:
|
|
Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. |