Implementação do MQTT utilizando .NET para comunicação com ESP32 – Parte 2

Este post faz parte da série MQTT utilizando .NET Core

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.

Implementação do MQTT utilizando .NET
Figura 1: Tela de Conexões – Fonte: Autoria própria

    Após pressionar o botão de criação, uma tela de configuração semelhante à figura abaixo aparecerá.

Implementação do MQTT utilizando .NET
Figura 2: Tela de cadastro de conexão – Fonte: Autoria própria

    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.

Implementação do MQTT utilizando .NET
Figura 3: Tela de conexão preenchida – Fonte: Autoria própria

    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.

Implementação do MQTT utilizando .NET
Figura 4: Tela gestão de conexões – Fonte: Autoria própria

    Selecione a conexão criada, adicione um painel “Text Input” na dashboard. O painel deve ser configurado como mostrado na figura abaixo.

Implementação do MQTT utilizando .NET
Figura 5: Cadastro de panel – Fonte: Autoria própria

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.

Figura 6: Envio de mensagem – Fonte: Autoria própria

Verificando na saída do servidor MQTT temos.

Figura 7 Recebimento de mensagens – Fonte: Autoria própria

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.

Figura 8: Cadastro de panel – Fonte: Autoria própria

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.

#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.

Figura 9: Recebimento de mensagens – Fonte: Autoria própria

    A próxima imagem exibe as mensagens recebidas no aplicativo de testes.

Figura 10 Recebimento de mensagens no aplicativo – Fonte: Autoria própria

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.

MQTT utilizando .NET Core

Implementação do MQTT utilizando .NET para comunicação com ESP32 – Parte 1
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Gentini
Gentini
21/10/2022 13:22

Fiz os testes com o broker do MQTTnet e funciona muito bem na maquina local, com localhost o rede wifi, mas quando eu publiquei em um provedor de web o resultado não foi o mesmo, simplesmente não conecta. Você já teve algum problema deste?

Home » Comunicação » Implementação do MQTT utilizando .NET para comunicação com ESP32 – Parte 2

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: