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

Este post faz parte da série MQTT utilizando .NET Core. Leia também os outros posts da série:

Já faz alguns anos que o MQTT caiu no mainstream e se tornou umas das principais tecnologias para comunicação de dispositivos IOT com a internet. Com o amadurecimento da tecnologia, diversas plataformas e soluções surgiram no mercado, desde soluções open-source como Eclipse Mosquitto até soluções SaaS como o AWS IOT Core.

Mesmo que atualmente a maior parte das linguagens de alto nível possuam bibliotecas ou frameworks para a implementação de comunicação MQTT, verifiquei por conta de uma necessidade de um projeto pessoal, que existe pouco conteúdo sobre o uso do .NET com o MQTT.

 Portanto, decidi escrever essa série de artigos sobre a implementação da comunicação MQTT com a plataforma .NET. Neste artigo vamos aprender como criar um servidor com broker utilizando o .NET Core.

MQTT

Existem excelentes artigos aqui no Embarcados que apresentam o MQTT de forma detalhada, abaixo listo alguns:

De qualquer maneira, vale a pena uma breve explicação sobre o assunto. Desenvolvido pela IBM na década de 1990, o MQTT é um protocolo de comunicação leve e flexível muito utilizado em aplicações de IOT. 

Um dos principais recursos responsáveis por propiciar flexibilidade e escalabilidade ao MQTT é a adoção do modelo Publisher/Subscriber, recomendo esse artigo caso o leitor deseje se aprofundar sobre o assunto.

 De forma geral, no modelo Publisher/Subscriber torna-se possível desacoplar os elementos publicadores dos assinantes, permitindo maior heterogeneidade de dispositivos presentes na rede, pois diferentes tipos de dispositivos podem trocar mensagens entre si, mesmo sem que ambos os dispositivos se conheçam. A figura abaixo exemplifica a representação do modelo.

Figura 1: Modelo Publisher Subscriber – Fonte: Autoria Própria 2021

Os elementos da rede MQTT podem ser classificados em dois tipos:

  • Broker;
  • Clientes.

Broker é basicamente o servidor responsável por escutar e atualizar todos os canais (denominados tópicos) dos quais os clientes estão conectados. Os clientes são as demais entidades presentes na rede, responsáveis por enviar as informações aos tópicos e receber as informações dos tópicos inscritos. A figura abaixo representa a arquitetura da rede.

Figura 2: Exemplificação MQTT – Fonte: MQTT Org

.NET Core

O .NET Core é o sucessor do .NET Framework, o qual é uma plataforma de desenvolvimento e execução de aplicações projetada pela Microsoft com o intuito de criar aplicações que possam ser executadas em qualquer dispositivo, desde que o dispositivo seja compatível com o framework.

Diferentemente do .NET framework, a nova versão do framework não é focada majoritariamente em criar aplicações no ambiente Windows, mas focada em criar aplicações multiplataformas. Neste novo framework a Microsoft removeu muitas bibliotecas do .NET Framework, sendo muitas dessas reescritas para garantir a compatibilidade entre as novas plataformas suportadas. Entretanto, a fundamentação do framework manteve-se em C#, mas direcionando o projeto para o mundo open-source, com disponibilização de códigos fontes no GitHub e oferecendo auxílios na comunidade para o desenvolvimento de bibliotecas e correções de bugs.

MQTTnet – Biblioteca MQTT no .NET

A implementação do broker MQTT partiu-se do uso da biblioteca MQTTnet . A biblioteca permite criar clientes e brokers MQTT para os frameworks .NET (.NET Core e .NET Framework) além de ser compatível com o Xamarin. 

Uma característica importante de mencionar é a capacidade de utilizar Web Sockets ou comunicação TCP pura, sendo compatível também com as conexões seguras para ambos os casos (TCP+TLS) e (WS + TLS).

Desenvolvimento

Bem, agora chegou o momento de “colocar a mão na massa”. Para o tutorial, optei por utilizar a ferramenta CLI (sigla em inglês para Comand Line Interface) para facilitar a replicação deste tutorial nas diversas plataformas suportadas pelo Framework, pois o processo será o mesmo independente do sistema operacional que você estiver utilizando, lembrando que o framework é compatível com Windows, Linux e macOS. A ferramenta CLI está presente na SDK do .NET Core, sendo possível baixá-lo aqui.

Começaremos criando um projeto, para isto digite:

    Após inserção do comando, o projeto deve ser criado. A figura abaixo apresenta o resultado esperado.

Figura 3: Modelo Publisher Subscriber – Fonte: Autoria Própria 2021

    Com o projeto criado, deve-se instalar a biblioteca MQTT. Digite no console o seguinte comando:

    Após a instalação da biblioteca, inicie seu editor de texto de preferência e abra o arquivo Startup.cs. Começaremos criando um objeto MqttServerOptionsBuilder o qual trata-se de um builder para criação do servidor MQTT, insira o seguinte comando dentro do método ConfigureServices:

O método deve ficar da seguinte forma:

    Ainda no mesmo arquivo, vamos inserir um callback para escutar e mostrar no console as mensagens recebidas no nosso tópico de testes. Na declaração do objeto optionsBuilder insira o trecho de código abaixo:

Ainda no método ConfigureServices, adicione o serviço MQTT na variável services conforme o trecho de código abaixo.

No método Configure, o qual foi gerado automaticamente pelo framework, remova o redirecionamento HTTPS, removendo a linha abaixo:

Continuando no método Configure, inicie o server MQTT adicionando a seguinte linha de código:

O método deve ficar da seguinte forma:

Com isso finalizamos as alterações no arquivo Startup.cs. Agora devemos editar o arquivo Program.cs. Começaremos a editar o servidor Kestrel para escutar a porta 1883 e utilizá-la para o MQTT, o trecho de código a seguir exibe como o método CreateHostBuilder deverá ser configurado:

Assim finalizamos a configuração do servidor. Podemos executar a aplicação e verificar o log de saída utilizando o seguinte comando.

    Após digitar o comando, você deve conseguir ver no console mensagens semelhantes à imagem abaixo:

   

Figura 4: Demonstração de execução – Fonte: Autoria Própria 2021

Todo o código descrito pode ser encontrado neste repositório. Com isso, temos o servidor Kestrel executando e escutando as portas 5000 e 1883. Assim finalizamos a primeira parte do artigo, na segunda parte mostrarei como testar o servidor e abordarei como será feita a integração com o ESP32.

Saiba Mais

Protocolo MQTT: a solução para comunicação M2M?

Programação de um cliente MQTT em C (Paho MQTT) no Linux Embarcado

Protocolo MQTT na Raspberry Pi com Node Red

Use o MQTT DASH para controlar uma lâmpada remotamente

Outros artigos da série

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Home » Internet Das Coisas » Implementação do MQTT utilizando .NET para comunicação com ESP32 – Parte 1
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:
Nenhum resultado encontrado.

Séries

[vc_widget_sidebar sidebar_id=”us_widget_area_series”]
Menu