ÍNDICE DE CONTEÚDO
- Use o MQTT DASH para controlar uma lâmpada remotamente
- Exibindo valores de temperatura e umidade no app MQTT Dash com o sensor DHT11
O MQTT Dash é um dos melhores aplicativos para interface gráfica no smartphone. Recentemente ministrei um treinamento sobre IoT, no Samsung Ocean, onde usei esse app para auxiliar no ensino de MQTT. Possui uma interface agradável, de fácil customização e configuração, sendo um dos melhores aplicativos que já utilizei para esse fim. A seguir apresento como utilizar esse app em conjunto com o ESP8266 e um broker MQTT configurado no CloudMQTT, para comandar uma lâmpada remotamente. Veja como é fácil!
Materiais necessários
- Placa com ESP8266 (nodeMCU, Wemos D1 ou mini, etc);
- Módulo RELE;
- Lâmpada;
- Cabos e Jumpers;
- Smartphone Android.
Se você ainda tem dúvida em como acionar uma lâmpada com Arduino, confira os artigos:
Você também pode testar o exemplo apresentado aqui, sem o uso de rele e lâmpada, apenas usando uma placa com ESP8266 e LEDs em uma protoboard, por exemplo.
TOME CUIDADO QUANDO FOR TRABALHAR COM ACIONAMENTO DE CARGAS AC.
Programação
Para o funcionamento dessa aplicação precisamos configurar um broker MQTT. Existem diversas opções de Brokers MQTT disponíveis, e para nosso teste vou utilizar o CloudMQTT.
O CloudMQTT gerencia um servidor Mosquitto na nuvem. Para mais informações sobre o Mosquitto e MQTT, acesse o artigo do Marcelo Barros: MQTT – Protocolos para IoT.
O CloudMQTT possui um plano gratuito que permite 10 conexões com velocidade de 10 Kbit/s.
Criando uma instância no CloudMQTT
Acesse o site do CloudMQTT e faça o seu registro. Após o login, clique no botão “+Create New Instance”. Será aberta a seguinte página:
Preencha o nome, escolha o plano Free (Cute Cat) e clique em Create a New Instance.
Abra a instância criada:
Aqui estão as informações necessárias para conexão com o Broker: Server, User, Password e Port. Vamos usar essas informações no código do ESP8266 e no aplicativo MQTT Dash, mais a frente.
Código para placa ESP8266 no Arduino
Como subscriber vamos utilizar uma placa Wemos D1 que irá acionar uma lâmpada. A placa Wemos D1 R2 é similar ao nodeMCU e compatível ao pinout Arduino R3.
A programação foi realizada na IDE do Arduino. Se ainda tem dúvidas para programar o ESP8266 usando a IDE Arduino, confira os artigos:
Substitua as informações da rede WIFI (ssid, password) e do Broker MQTT (mqttServer, mqttUser, mqttPassword, mqttPort), indicados com x no código a seguir. Compile e carregue para a sua placa com ESP8266.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
//Acionamento de lampada com MQTT Dash //Por: Fábio Souza //Data: 12/02/18 #include <ESP8266WiFi.h> #include <PubSubClient.h> #define DEBUG #define L1 13 //pino de saida para acionamento da Lampada L1 //informações da rede WIFI const char* ssid = "xxxxx"; //SSID da rede WIFI const char* password = "xxxxxxx"; //senha da rede wifi //informações do broker MQTT - Verifique as informações geradas pelo CloudMQTT const char* mqttServer = "xxxxxxxxxxxxxxxxx"; //server const char* mqttUser = "xxxxxxxx"; //user const char* mqttPassword = "xxxxxxxxxxxx"; //password const int mqttPort = xxxxx; //port const char* mqttTopicSub ="casa/L1"; //tópico que sera assinado WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); pinMode(L1, OUTPUT); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); #ifdef DEBUG Serial.println("Conectando ao WiFi.."); #endif } #ifdef DEBUG Serial.println("Conectado na rede WiFi"); #endif client.setServer(mqttServer, mqttPort); client.setCallback(callback); while (!client.connected()) { #ifdef DEBUG Serial.println("Conectando ao Broker MQTT..."); #endif if (client.connect("ESP8266Client", mqttUser, mqttPassword )) { #ifdef DEBUG Serial.println("Conectado"); #endif } else { #ifdef DEBUG Serial.print("falha estado "); Serial.print(client.state()); #endif delay(2000); } } //subscreve no tópico client.subscribe(mqttTopicSub); } void callback(char* topic, byte* payload, unsigned int length) { //armazena msg recebida em uma sring payload[length] = '\0'; String strMSG = String((char*)payload); #ifdef DEBUG Serial.print("Mensagem chegou do tópico: "); Serial.println(topic); Serial.print("Mensagem:"); Serial.print(strMSG); Serial.println(); Serial.println("-----------------------"); #endif //aciona saída conforme msg recebida if (strMSG == "1"){ //se msg "1" digitalWrite(L1, LOW); //coloca saída em LOW para ligar a Lampada - > o módulo RELE usado tem acionamento invertido. Se necessário ajuste para o seu modulo }else if (strMSG == "0"){ //se msg "0" digitalWrite(L1, HIGH); //coloca saída em HIGH para desligar a Lampada - > o módulo RELE usado tem acionamento invertido. Se necessário ajuste para o seu modulo } } //função pra reconectar ao servido MQTT void reconect() { //Enquanto estiver desconectado while (!client.connected()) { #ifdef DEBUG Serial.print("Tentando conectar ao servidor MQTT"); #endif bool conectado = strlen(mqttUser) > 0 ? client.connect("ESP8266Client", mqttUser, mqttPassword) : client.connect("ESP8266Client"); if(conectado) { #ifdef DEBUG Serial.println("Conectado!"); #endif //subscreve no tópico client.subscribe(mqttTopicSub, 1); //nivel de qualidade: QoS 1 } else { #ifdef DEBUG Serial.println("Falha durante a conexão.Code: "); Serial.println( String(client.state()).c_str()); Serial.println("Tentando novamente em 10 s"); #endif //Aguarda 10 segundos delay(10000); } } } void loop() { if (!client.connected()) { reconect(); } client.loop(); } |
Configurando a aplicação no MQTT Dash
O MQTT Dash é um dos melhores aplicativos gratuitos para uso do MQTT no smartphone. Possui uma interface muito bacana, com diversos recursos gráficos e é bem simples de usar. Você pode baixá-lo na Google Play.
Após instalado, clique no sinal “+” na sua tela inicial:
Será aberta a configuração de uma nova conexão. Insira as seguinte informações:
- Name
- Adress
- Port
- User Name
- User Password
E, por fim, salve tocando no disquete na parte superior direita.
Abra a conexão criada. Caso as configurações estejam corretas não será exibida nenhuma mensagem. Caso contrário será exibida a mensagem de falha de conexão. Se isso acontecer, refaça as configurações.
Com a conexão configurada corretamente, clique no sinal de “+” dentro do dashboard criado:
Insira um Switch/button:
O botão será usado para acionamento da lâmpada. Você pode dar o nome L1 para ele, ou outro que achar melhor. Para o tópico, configure para “casa/L1”:
Para a parte visual desse botão, configure para exibir ícones de uma lâmpada acesa e outra apagada. Para On, enviaremos o valor “1” e para Off, o valor “0”:
Por fim, selecione o nível de qualidade para QoS(1).
Pronto, a aplicativo está conectado e configurado:
Teste do MQTT Dash em conjunto do CloudMQTT
Abra a guia Websocket UI no CloudMQTT:
Pressione o botão L1 no MQTT Dash e veja se a mensagem chegou no Websocket UI:
Você também pode enviar uma mensagem pelo Websocket UI:
Verifique se o estado do botão no aplicativo mudou.
Ligue a lâmpada com MQTT Dash
Agora faça a ligação da placa no ESP8266, verifique se a mesma conseguiu conectar à rede WIFI e ao Broker MQTT, através das mensagens no terminal serial:
Pressione o botão no aplicativo e veja se a placa recebeu a mensagem do tópico “casa/L1”:
Se recebeu, o estado do pino configurado irá inverter.
Conclusão
O MQTT Dash é um excelente app para aplicações MQTT no smartphone. Apresenta uma interface agradável, customizável e de fácil configuração. Junto com um broker MQTT e placas como nodeMCU, Wemos, etc, é possível fazer diversas aplicações para comando e monitoramento.
O que achou do aplicativo? Conhece outro aplicativo com essas características? Deixe seus comentários abaixo.
Parabéns pelo post de excelente qualidade!
Com esse MQTT só consigo acessar o dash por app mobile? Teria alguma opção web pra conseguir acessar via computador tbm?
Olá Fábio, sabe se posso utilizar o mqtt dash para criar uma aplicação comercial ? Preciso distribuir para clientes um app que rode em Android e iOs. Achei o mqtt dash muito legal. Parabéns pelo artigo.
Olá André, Não há restrição par uso comercial. Porém vale você avaliar se o APP vai dar suporte ao tempo de vida do seu produto. Como não tem custo ou qualquer contrato com o desenvolvedor, não há garantia que se der algum problema ele irá arrumar a tempo de não impactar no seu negócio. O MQTT Dash só tem suporte para Android atualmente. Para uma aplicação comercial eu iria com um app próprio ou alguma solução comercial com suporte. Sucesso!
Parabéns pelo tuturial, finalmente consegui compreender o interface com o broker!! Obrigado
Olá bom dia.
Então cara, eu sou estudante de sistemas de informação da UFRRJ e gostaria de saber se tem como a gente pegar esses dados e enviar para um servidor web para serem salvos.
Lucas, acho que é isso que precisa fazer: https://www.instructables.com/id/Store-Messages-From-Mosquitto-MQTT-Broker-Into-SQL/
Como faço para transformar esse sketch com um botão para portão de garagem. Apenas pulso de 1 segundo.
boa tarde, tentei usar o seu artigo nodemcu , mas nao conseguir que aluz ligasse , td a configuraçao de broker funcionou , mas acho q nodemcu nao esta recebmdo minha menssagem
Consigo fazer isso com uma placa de 16 Reles?
Consegue sim. Você pode criar outros tópicos.
Abraços
Parabéns! Muito bom, e o principal, não utiliza termos desconhecidos dos iniciantes como siglas e outros.
Obrigado Vinicius
Boa tarde,
Antes de mais quero agradecer seu tutorial. Experimentei e resultou como esperado.
Sou muito novo nesta área, quer em programação arduino ou rpi, quer em iot. Estou maravilhado com o seu potencial.
Agora, esticando a corda, supondo que eu queria controlar duas lâmpadas, como faço? Adiciono dois tópicos no mqtt broker?
Supondo ainda que em vez de switch (on / off) eu pretendo um push button, para abertura de uma porta?
Abraço
Olá Nuno, fico muito feliz com o seu comentário. Para acionar mais lâmpadas você pode incluir mais tópicos L2,L3, L4 ….
Você pode fazer um switch para acionamento de uma porta, basta incluir um publicador com essa função. Veja o segundo artigo que ensina como publicar no tópico a partir do ESP.
Depois me fala se conseguiu.
Abraços,
Não encontrei o poste nem entendi sua explicação. Por favor ensine a colocar o botão de portão
amigo não consegui por favor dar um exemplo. portão de garagem so precisa de um pulso dai volta para o estado off. como fazer isso ??? no sketch ou no mqtt dash ???????
Bom dia Fábio.
Ótimo artigo. Iniciei recentemente em IOT e ESP8266 e já fiz alguns testes de sketch de outros autores entretanto o seu é mais simples e intuitivo, inclusive já adicionei mais canais e configurei o Dash sem problemas.
Se me permite uma sugestão, seria util um tutorial sobre configurações dos parametros do ESP na IDE Arduino. Alguns parametros são básicos tais como Port, Upload Speed e Builtin Led mas os outros nem tanto.
Abraço!!
Olá José, obrigado pelo comentário. Quais parêmetros gostaria de saber sobre como configurar.
Há alguns artigos sobre esp8266 aqui no embarcados:
https://www.embarcados.com.br/configurando-gpio-do-esp8266-01/
https://www.embarcados.com.br/gravando-o-esp8266-01-na-ide-arduino/
https://www.embarcados.com.br/modulo-esp8266/
Caso, não encontre as informações, me fala que preparamos um conteúdo abordando.
Obrigado,