MQTT com Raspberry Pi, Python e Android

Houssan Ali Hijazi
Ignus Insights
Published in
4 min readJan 8, 2019

Sou um desenvolvedor, e há 3 meses adquiri um Raspberry Pi para tentar entrar no mundo de IoT. Na primeira semana fiquei um pouco perdido nesse novo mundo, mas depois de um tempo as coisas começaram a clarear.

Para o primeiro desafio, comprei um sensor de umidade e temperatura para o Raspberry. O objetivo era mostrar essas informações em um aplicativo Android.

Um amigo, André Queiroz, indicou o MQTT, para cuidar do envio de informações entre dispositivos de forma assíncrona. O que mais me chamou atenção foi a simplicidade de uso.

Características do MQTT:

  • O MQTT (Message Queue Telemetry Transport), desenvolvido pela IBM para monitoramento via sensores de pipelines de petróleo a satélites.
  • É um protocolo leve para redes com largura de banda limitada e alta latência.
  • O transporte de mensagens via MQTT suporta comunicação assíncrona, perfeito para redes que não são confiáveis.
  • Uso de Publish/Subscribe.
  • Broker.

Broker

O broker recebe mensagens dos publishers num tópico específico, e envia para os subscribers que assinaram aquele tópico. Vamos usar um broker free da Eclipse Foundation: iot.eclipse.org, mas nada impede de usar outros ou até mesmo instalar um broker em servidor próprio.

Publisher

O publisher publica uma mensagem em um tópico específico.

Subscriber

O subscriber assina um tópico específico e quando um publisher publica alguma mensagem naquele tópico, o subscriber a recebe.

Desenvolvimento

Conforme falamos antes, para testar o funcionamento do MQTT, iremos usar o Raspberry com um sensor de temperatura e umidade. Usaremos Python para ler os dados desse sensor e enviaremos para um tópico: t0th/temperature e t0th/humidity. Num aplicativo Android assinar esses tópicos e mostrar esses dados numa tela simples.

Python

O nosso código Python rodará no Raspberry, para pegar a temperatura e umidade e enviar esses dados para os tópicos.

Instalando a biblioteca Paho MQTT

Paho MQTT é um um cliente MQTT feito em Python

# pip install paho-mqtt

Instalação das bibliotecas

Adafruit-DHT é um biblioteca usada para leitura do sensor de temperatura e umidade.

# pip install -r requirements.txt

Script que captura os dados dos sensores ligados ao Raspberry e publica nos tópicos.

Rodando o script.

# python start_mqtt.py

Pronto, estamos publicando a temperatura e a umidade nos tópico t0th/temperature e t0th/humidity respectivamente usando o broker iot.eclipse.org

Android

O nosso aplicativo Android terá uma tela simples escutando os tópicos de temperatura e umidade e mostrando na tela.

Vamos usar a biblioteca Paho da própria Eclipse: https://github.com/eclipse/paho.mqtt.android

Adicionando a biblioteca Paho MQTT

Cliente Android MQTT

Criamos uma classe cliente e adicionando alguns métodos que vamos usar.

Conectando e subscrevendo aos tópicos de temperatura e umidade

  • Em nossa activity temos uma instância do cliente MQTT(MqttClient.kt) criado anteriormente.
  • Usamos o método connect() dessa classe, passando um array dos 2 tópicos: t0th/temperature e t0th/humidity. Como segundo parâmetro, passamos uma função de callback chamada setData.
  • No método connect() fazemos a assinatura(subscribe) dos tópicos passados e chamamos a callback passada quando uma mensagem chega no método messageArrived().

Resultado final

Referências:

--

--