Xamarin.Forms e MQTT

Comunicação em tempo real com Xamarin.Forms e MQTT

Todos bem?

A alguns meses atrás publicamos sobre o uso do SignalR para comunicação em tempo real com o Xamarin.Forms mantendo toda a codificação da nossa solução com C#, onde desenvolvemos um chat simples.

Hoje vamos mostrar uma outra tecnologia, muito mais usada que o SignalR, mas em um foco diferente. Não vamos fazer um Chat, ao menos não entre pessoas. Vamos aprender a controlar a IoT Surfboard, o dispositivo completo para você Aprender, Ensinar, Prototipar e Produzir sua solução utilizando Internet das Coisas.

Vamos começar!

O MQTT

Antes de falar de implementação precisamos entender o que é o MQTT:

O MQTT é um protocolo de comunicação, sua sigla significa Message Queue Telemetry Transport e está completamente presente no dia a dia da IoT tendo como objetivo principal a comunicação Machine 2 Machine (M2M), permitindo que as máquinas conversem.

O protocolo MQTT tem como objetivo reduzir o consumo de banda de rede e necessitar de um hardware muito simples. O protocolo foi desenvolvimento pela IBM e a Eurotech com objetivo de entregar o maior número de mensagens em uma rede de banda muito baixa ou intermitente.

A comunicação é feita pela rede utilizando TCP/IP e o protocolo está na mesma camada OSI do HTTP mas com um tamanho de payload muito menor.

Para que as máquinas se comuniquem é necessário possuir um Broker e um ou maior Clientes. Os clientes se conectam ao Broker e este é responsável por receber, enfileirar e enviar as mensagens recebidas dos clientes.

A tecnologia tem seu código aberto e você pode descobrir tudo sobre ela no site oficial Mqtt.org

O IBM Bluemix possui um serviço pronto para utilizar o MQTT, além dele o Eclipse IoT também tem seu serviço disponível.

MQTT e C#

Por ser uma tecnologia de código aberto, temos uma biblioteca para utilizar o MQTT com C# e está evoluindo constantemente tendo suporte atualmente para todas as plataformas .NET e WinRT.

Infelizmente isso não significa que ela funciona 100% com o Xamarin.Forms.

Quando utilizamos as Portable Class Library’s em nosso projeto Xamarin.Forms perdemos o suporte de inúmeras bibliotecas do .NET e uma delas é a IPAdress, uma das principais lib’s utilizadas na lib de MQTT pro .NET.

A solução: Dependency Services e Messaging Center

Após estudar o funcionamento do MQTT solucionamos o problema utilizando Dependency Services e MessagingCenter.

Vamos entender a solução que criamos e disponibilizamos no nosso GitHub, mas aqui vamos focar no projeto iOS.

Xamarin.Forms e MQTT

Em primeiro lugar precisamos instalar a biblioteca M2Mqtt.NET nos projetos nativos, encontrada no site do eclipse  ou no nosso Git.

Feito isso vamos criar a interface IFMqttClient no nosso projeto PCL onde está localizado o código compartilhado do Xamarin.Forms

Tendo essa interface criada precisamos implementa-la no projeto iOS. Para isso crie a classe FMqttClient no projeto iOS (ou Android) e implemente a interface da seguinte forma

Vamos entender um pouco do código criado:

O método Connect é o responsável por criar a conexão entre o Client e o Broker (server) do MQTT.

O método Publish é o responsável por enviar uma mensagem para o Broker poder disparar para os outros Clients.

O método Subscribe deve receber a lista de tópicos que o Client deseja assinar para receber mensagens.

Ex:

O Facebook utiliza o MQTT em seu app de CHAT e no transporte de suas notificações, para isso o app se conecta aos tópicos responsáveis pelas notificações, troca de mensagens e troca de dados.

A IoT Surfboard possui tópicos para receber os dados de cada sensor conectado na placa, notificar quando uma placa nova é conectada e quando é desconectada.

O evento  client_MqttMsgPublishReceived é acionado sempre que uma mensagens nova é recebida através dos tópicos assinados pelo Client. E aqui vamos utilizar o MessagingCenter para enviar o dado recebido para a camada do Xamarin.Forms.

Agora vamos fazer a comunicação funcionar no Xamarin.Forms?

Conseguimos fazer tudo com poucas linhas de código

Para ver o aplicativo funcionado veja a entrevista com o Vinicius Senger, criador da IoT Surfboard e um dos responsável pela The Developer Conference. O serviço utilizado no vídeo é o da GlobalCode para controlar a IoT Surfboard que nos permite enviar mensagens para TODA e QUALQUER IoT Surfboard que esteja conectada neste Broker.

E você ai leitor, se interessou pelo conteúdo? Gostaria de ver mais sobre IoT e Xamarin? Conhece outros protocolos de comunicação em tempo real?

Deixe um comentário no post e visite nossa página no Facebook.

A Studyxnet agora é o braço mineiro da .NET CODERS, se inscreva no meetup
A Studyxnet agora é o braço mineiro da .NET CODERS, se inscreva no meetup clicando no banner
Avalie nosso post

Rafael Moura

Desenvolvedor .NET, mais de 5 anos de experiência, apaixonado por tecnologia, Xamarin Student Partner Regional Lead Central/South America, Xamarin Comunity Speaker, Xamarin Certified Mobile Developer e Windows Phone Developer.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

%d blogueiros gostam disto: