ÍNDICE DE CONTEÚDO
- Implementação do MQTT utilizando .NET para comunicação com ESP32 – Parte 1
- Implementação do MQTT utilizando .NET para comunicação com ESP32 – Parte 2
Este artigo é a continuação do artigo Implementação do MQTT utilizando .NET para comunicação com ESP32 , onde descrevo como criar um servidor com broker MQTT utilizando .NET Core. Neste artigo apresentarei como é possível testar o broker e por fim, a integração com o ESP32.
Teste do Broker
Para testar a conexão com nosso broker, utilizarei o aplicativo para Android “IoTMQTTPanel”, você pode encontrá-lo aqui.
Com o aplicativo devidamente instalado, crie uma conexão clicando no ícone “+” como mostrado na figura abaixo.
Após pressionar o botão de criação, uma tela de configuração semelhante à figura abaixo aparecerá.
Agora é o momento de configurar a conexão. No campo Connection Name insira o nome que desejar para a conexão, no campo Broker Web/IP Address insira o endereço IP da máquina onde o servidor está sendo executado. Em Port Number digite o valor 1883. No campo Network Protocol Selecione TCP. A figura abaixo exemplifica a configuração.
Para finalizar a configuração, crie uma dashboard clicando no botão “Create”. Com a dashboard criada, você deve conseguir ver a tela de conexões semelhante à figura abaixo.
Selecione a conexão criada, adicione um painel “Text Input” na dashboard. O painel deve ser configurado como mostrado na figura abaixo.
Na figura acima, configuramos o Panel para enviar as mensagens ao tópico “teste/topic1”. Neste momento, vamos enviar uma mensagem de teste para verificarmos o funcionamento do broker.
Verificando na saída do servidor MQTT temos.
Com isso podemos verificar que o servidor .NET está funcionando, pois, havíamos inserido o comando para exibir os dados recebidos no teste/topic1. Para facilitar a observação das mensagens enviadas ao tópico, adicionaremos o Panel Text Log na dashboard. Clique no ícone “+” e adicione o Panel e o configure da seguinte forma.
Integração do ESP32
Para validar a conexão com o ESP32, desenvolveu-se um código simples o qual pode ser encontrado aqui, sendo também exposto abaixo.
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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
#include <Arduino.h> /* * Projeto: Conexão MQTT com broker feito em .NET Core * Autor: Yago Caetano * */ #include <WiFi.h> #include <PubSubClient.h> /* Defines do MQTT */ #define TOPICO_SUBSCRIBE "teste/topic2" #define TOPICO_PUBLISH "teste/topic1" #define ID_MQTT "M-ESP32" //deve ser unico no broker /* Variaveis, constantes globais */ const char* SSID = "jkk"; // SSID Wi-Fi a se conectar const char* PASSWORD = "akivcnentra"; // Senha Wi-Fi a se conectar const char* BROKER_MQTT = "192.168.15.103"; //URL do broker MQTT int BROKER_PORT = 1883; // Porta do Broker MQTT //Variáveis e objetos globais WiFiClient espClient; // Cria o objeto espClient PubSubClient MQTT(espClient); // Instancia o Cliente MQTT passando o objeto espClient /* Prototypes */ void initializeWiFi(void); void initializeMQTT(void); void mqtt_callback(char* topic, byte* payload, unsigned int length); void reconnectMQTT(void); void reconnectWiFi(void); void checkWiFIEMQTT(void); /* Função: inicializa e conecta-se na rede WI-FI desejada * Parâmetros: nenhum * Retorno: nenhum */ void initializeWiFi(void) { delay(10); Serial.println("------Conexao WI-FI------"); Serial.print("Conectando-se á: "); Serial.println(SSID); Serial.println("Aguarde"); reconnectWiFi(); } /* Função: Inicia a conexão MQTT * Parâmetros: nenhum * Retorno: nenhum */ void initializeMQTT(void) { MQTT.setServer(BROKER_MQTT, BROKER_PORT); //define os parametros de conexão MQTT.setCallback(mqtt_callback); //define o callback } /* Função: Callback de conexão MQTT * Parâmetros: nenhum * Retorno: nenhum */ void mqtt_callback(char* topic, byte* payload, unsigned int length) { String msg; /* obtem a string do payload recebido */ for(int i = 0; i < length; i++) { char c = (char)payload[i]; msg += c; } Serial.print("Mensagem receibda: "); Serial.println(msg); } /* Função: reconecta-se ao broker MQTT. * Parâmetros: nenhum * Retorno: nenhum */ void reconnectMQTT(void) { while (!MQTT.connected()) { Serial.print("* Tentando se conectar ao Broker: "); Serial.println(BROKER_MQTT); if (MQTT.connect(ID_MQTT)) { Serial.println("Conectado com sucesso!"); MQTT.subscribe(TOPICO_SUBSCRIBE); } else { Serial.println("Falha ao reconectar"); Serial.println("Tentando novamente em 2s"); delay(2000); } } } /* Função: verifica as conexões Wi-Fi e MQTT * Parâmetros: nenhum * Retorno: nenhum */ void VerificaConexoesWiFIEMQTT(void) { if (!MQTT.connected()) reconnectMQTT(); //se broker não está conectado, tenta conectar reconnectWiFi(); //reconecta a rede Wi-Fi } /* Função: reconecta-se ao WiFi * Parâmetros: nenhum * Retorno: nenhum */ void reconnectWiFi(void) { //se já está conectado a rede WI-FI, nada é feito. //Caso contrário, são efetuadas tentativas de conexão if (WiFi.status() == WL_CONNECTED) return; WiFi.begin(SSID, PASSWORD); // Conecta na rede WI-FI while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } Serial.println(); Serial.print("Conectado com sucesso na rede "); Serial.print(SSID); Serial.println("IP obtido: "); Serial.println(WiFi.localIP()); } /* Função de setup */ void setup() { Serial.begin(115200); /* Inicializa a conexao wi-fi */ initializeWiFi(); /* Inicializa a conexao ao broker MQTT */ initializeMQTT(); } /* Loop principal */ void loop() { /* garante funcionamento das conexões WiFi e ao broker MQTT */ VerificaConexoesWiFIEMQTT(); MQTT.loop(); if(MQTT.connected()) { MQTT.publish(TOPICO_PUBLISH,"Aqui eh o ESP32"); } /* Refaz o ciclo após 2 segundos */ delay(2000); } |
Para a correta execução do programa, defina as constantes SSID e PASSWORD com as informações da rede Wi-Fi a qual o ESP32 deverá conectar. Defina também a constante BROKER_MQTT com o endereço IP do broker MQTT.
O funcionamento do firmware de teste é bem simples, basicamente configuramos a conexão Wi-Fi do módulo e em seguida, estabelecemos a conexão com nosso broker MQTT. Na função de loop, verificamos a cada 2 segundos o status das conexões e publicamos a mensagem “Aqui eh o ESP32” no tópico teste/topic1.
A figura abaixo exibe as mensagens recebidas no broker.
A próxima imagem exibe as mensagens recebidas no aplicativo de testes.
Conclusão
O MQTT tornou-se uma tecnologia popular no mercado IOT, possuindo suporte para diversas linguagens de programação. Este artigo apresentou como implementar a comunicação MQTT no .NET Core utilizando a biblioteca MQTTnet, mostrando o quão simples é criar um broker e estabelecer conexão com este.
Com os resultados obtidos, tornou-se evidente que o uso da biblioteca MQTTnet é uma solução interessante aos desenvolvedores .NET que desejam implementar o MQTT em suas aplicações.