4.0 KiB
Controle sua luz noturna pela Internet - Wio Terminal
Nesta parte da lição, você irá se inscrever para receber comandos enviados de um broker MQTT para o seu Wio Terminal.
Inscrever-se para comandos
O próximo passo é se inscrever para os comandos enviados pelo broker MQTT e responder a eles.
Tarefa
Inscreva-se para receber comandos.
-
Abra o projeto da luz noturna no VS Code.
-
Adicione o seguinte código ao final do arquivo
config.h
para definir o nome do tópico para os comandos:const string SERVER_COMMAND_TOPIC = ID + "/commands";
O
SERVER_COMMAND_TOPIC
é o tópico ao qual o dispositivo se inscreverá para receber comandos para o LED. -
Adicione a seguinte linha ao final da função
reconnectMQTTClient
para se inscrever no tópico de comandos quando o cliente MQTT for reconectado:client.subscribe(SERVER_COMMAND_TOPIC.c_str());
-
Adicione o seguinte código abaixo da função
reconnectMQTTClient
.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 função será o callback que o cliente MQTT chamará quando receber uma mensagem do servidor.
A mensagem é recebida como um array de inteiros não assinados de 8 bits, então precisa ser convertida para um array de caracteres para ser tratada como texto.
A mensagem contém um documento JSON, que é decodificado usando a biblioteca ArduinoJson. A propriedade
led_on
do documento JSON é lida e, dependendo do valor, o LED é ligado ou desligado. -
Adicione o seguinte código à função
createMQTTClient
:client.setCallback(clientCallback);
Este código define o
clientCallback
como o callback a ser chamado quando uma mensagem for recebida do broker MQTT.💁 O handler
clientCallback
é chamado para todos os tópicos aos quais você está inscrito. Se você escrever código posteriormente para ouvir múltiplos tópicos, poderá obter o tópico ao qual a mensagem foi enviada a partir do parâmetrotopic
passado para a função callback. -
Envie o código para o seu Wio Terminal e use o Monitor Serial para ver os níveis de luz sendo enviados para o broker MQTT.
-
Ajuste os níveis de luz detectados pelo seu dispositivo físico ou virtual. Você verá mensagens sendo recebidas e comandos sendo enviados no terminal. Também verá o LED sendo ligado e desligado dependendo do nível de luz.
💁 Você pode encontrar este código na pasta code-commands/wio-terminal.
😀 Você codificou com sucesso o seu dispositivo para responder a comandos de um broker MQTT.
Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.