Imagine controlar um LED remotamente e ainda ser notificado sobre seu estado em tempo real. Este artigo mostra como criar um sistema de Notificação de LED com MQTT, usando uma BananaPi, Python e o protocolo MQTT para enviar dados para a plataforma HiveMQ Cloud. Você vai aprender a configurar tudo, desde o hardware até o software, para monitorar o estado de um LED através da web.
O que você precisa para começar
Para seguir este tutorial, você vai precisar de alguns componentes e conhecimentos básicos. Primeiramente, é necessário ter uma BananaPi com Python 3.9 instalado, além das bibliotecas pyenv, paho-mqtt e python-dotenv. Também é importante ter um arquivo de credenciais .env para armazenar informações de segurança e uma conta no HiveMQ com as credenciais configuradas.
- BananaPi: Python 3.9
- BananaPi: Biblioteca Python — pyenv
- BananaPi: Biblioteca Python — paho-mqtt
- BananaPi: Biblioteca Python — python-dotenv
- BananaPi: Arquivo de credenciais .env
- HiveMQ: Credencial de Segurança
Entendendo o protocolo MQTT
O MQTT (Message Queuing Telemetry Transport) é um protocolo de mensagens amplamente utilizado na Internet das Coisas (IoT). Ele permite que dispositivos publiquem e assinem tópicos para trocar dados pela internet. É ideal para conectar microcontroladores, sensores e CLPs industriais de forma eficiente.
Como o MQTT funciona?
- Publicador (Publisher): Envia mensagens para um tópico específico.
- Mediador (Broker): Recebe as mensagens e as distribui para os inscritos no tópico.
- Assinante (Subscriber): Recebe as mensagens ao se inscrever em um ou mais tópicos.
O MQTT utiliza o padrão de comunicação publicar/assinar (Publish/Subscribe), onde o remetente e o assinante se comunicam através de tópicos, sem necessitar de uma conexão direta. O Broker MQTT é o responsável por filtrar e distribuir as mensagens corretamente.
Características importantes do MQTT
- Mensagens baseadas em Tópicos: A comunicação é organizada em tópicos, como “sensores/temperatura/sala”.
- Baixa latência: Ideal para redes com poucos recursos e aplicações IoT.
- QoS (Quality of Service): Garante a entrega das mensagens com diferentes níveis de garantia (0, 1 ou 2).
- Persistência: Permite armazenar mensagens para entregar a clientes que estão temporariamente desconectados.
Brokers MQTT populares
- Mosquitto (Open-source, ideal para IoT)
- EMQX (Escalável, adequado para grandes aplicações)
- HiveMQ (Focado em soluções empresariais)
HiveMQ: a plataforma de mensagens IoT na nuvem
O HiveMQ Cloud é uma plataforma de mensagens IoT totalmente gerenciada e nativa da nuvem. Ela facilita a conectividade confiável e escalável de dispositivos IoT. Com o HiveMQ, você pode simplificar a troca de dados entre seus dispositivos e aplicações na nuvem.
Conhecendo a BananaPi M2 Zero
A BananaPi M2 Zero é um computador de placa única ultracompacto, medindo apenas 60 mm x 30 mm. Equipada com um processador quad-core Cortex A7 Allwinner H2+ e 512 MB de RAM, é perfeita para sistemas leves e aplicações com espaço limitado. Além disso, suporta sistemas operacionais Linux e Android.
Especificações da BananaPi M2 Zero
- CPU Quad Core ARM Cortex A7 H2+
- 512 MB de SDRAM
- WiFi (AP6212) e Bluetooth integrados
- Mini-HDMI
Visão geral do projeto de Notificação de LED com MQTT
Neste projeto, vamos usar os seguintes componentes do protocolo MQTT:
- Publicador (Publisher): BananaPi M2 Zero
- Mediador (Broker): Amazon Web Services (AWS)
- Assinante (Subscriber): Hive Web Client
Como a BananaPi se encaixa no projeto?
Um LED será conectado a um pino GPIO da BananaPi e controlado via Shell Script em uma classe Python. A cada mudança no estado do LED, o estado lógico do pino será lido. A BananaPi fará login no Broker da HiveMQ Cloud, registrará no tópico “bananapi” e enviará a notificação do estado lógico do pino.
Utilizando o Hive Web Client
Após se cadastrar na plataforma HiveMQ, configure as credenciais que serão usadas pela BananaPi e pelo Web Client, incluindo usuário, senha e nível de acesso (publicação, assinatura ou ambos). Em seguida, faça login no Web Client com as credenciais e assine o tópico “bananapi”. Assim, todas as mensagens enviadas pela BananaPi serão exibidas no Web Client.
Montando o circuito eletrônico
Para este projeto, utilizaremos o pino GPIO7 (pino físico 29) e o GND3 (pino físico 6), conforme demonstrado em um artigo anterior sobre como piscar um LED utilizando BananaPi e Python via SSH.
Configurando o HiveMQ Cloud
Para usar o Web Client da HiveMQ, é necessário criar uma conta gratuita. Depois, cadastre uma nova credencial de segurança para autenticar a BananaPi no Broker MQTT. Essa credencial deve incluir:
- Username: Nome de usuário
- Password: Senha do usuário
- Permission: Tipo de permissão do protocolo MQTT (Publish only, Subscribe only ou Publish and Subscribe)
Conectando ao Web Client
Para se conectar ao Web Client, insira o nome de usuário e senha da credencial de segurança. Após a conexão, assine o tópico desejado para receber as mensagens. Ao configurar a assinatura, você precisará definir:
- Topic: Canal de comunicação, semelhante a um filtro de mensagens
- QoS: Qualidade de Serviço, que define a garantia de entrega das mensagens (QoS 0, QoS 1 ou QoS 2)
Passo a passo do algoritmo
Do ponto de vista da BananaPi, o algoritmo seguirá as seguintes etapas:
- Login: Estabelecer conexão remota via SSH entre o computador e a BananaPi.
- Comando Shell: Executar o arquivo BlinkPublishMQTT via terminal do Linux na BananaPi.
- BlinkPublishMQTT: Iniciar a conexão remota com o Broker.
- BlinkPublishMQTT: Enviar mensagem para o Broker sinalizando a realização do login.
- BlinkPublishMQTT: Configurar o pino GPIO7 da BananaPi para saída.
- BlinkPublishMQTT: Imprimir a pergunta no terminal do Linux para ligar ou desligar o LED.
- BlinkPublishMQTT: Escrever o estado lógico do pino GPIO7, escolhido pelo usuário.
- BlinkPublishMQTT: Ler o estado lógico do pino GPIO7.
- BlinkPublishMQTT: Enviar mensagem para o Broker notificando o estado lógico atual do pino GPIO7.
- BlinkPublishMQTT: Desativar o pino GPIO7 da BananaPi.
- BlinkPublishMQTT: Enviar mensagem para o Broker sinalizando a realização do logout.
Implementando o código em Python
Configurando as credenciais
Para executar o código, crie um arquivo .env para armazenar as credenciais de segurança:
- MQTT_CLIENT_USERNAME = nome de usuário cadastrado no HiveMQ
- MQTT_CLIENT_PASSWORD = senha cadastrada no HiveMQ
- MQTT_CLIENT_URL = endereço da URL do Cluster do HiveMQ
Essas credenciais são essenciais para a autenticação no Broker e o envio das mensagens.
Classe BlinkPublishMQTT.py
Atenção: Esta classe foi implementada para ser executada apenas em ambiente Linux, como a BananaPi. Se executada em outros sistemas (Windows ou macOS), não funcionará.
Enviando o arquivo via SSH
Envie os arquivos BlinkPublishMQTT.py e .env para a BananaPi usando os seguintes comandos Shell:
$ scp /Users/henriqueotogami/bananapi/python/.env pi@bananapi-zero.local:otogamidev/ $ scp /Users/henriqueotogami/bananapi/python/BlinkPublishMQTT.py pi@bananapi-zero.local:otogamidev/
Acessando a BananaPi via SSH
Para acessar a BananaPi, autentique-se via SSH com o seguinte comando:
$ ssh pi@bananapi-zero.local
Verificando a existência do arquivo
Certifique-se de que o arquivo BlinkPublishMQTT.py foi enviado corretamente, navegando até o diretório do projeto e listando os arquivos:
$ cd ~/otogamidev/ $ ls -la
Instalando as bibliotecas necessárias
Instale as bibliotecas python-dotenv, pyenv e paho-mqtt na BananaPi:
$ pip3 install python-dotenv $ curl -fsSL https://pyenv.run | bash
Para o pyenv, siga as instruções para configurar as variáveis de ambiente e baixar os pacotes de bibliotecas de desenvolvimento. Em seguida, instale a biblioteca paho-mqtt:
$ pip3 install paho-mqtt
Executando o código
Execute o arquivo BlinkPublishMQTT.py com o seguinte comando:
$ python3 BlinkPublishMQTT.py
Durante a execução, as notificações de mudança de estado lógico do LED serão enviadas ao Broker. Além disso, o código implementa a consulta do horário atual para ser anexada em cada mensagem.
Com o HiveMQ Cloud, você pode simplificar a troca de dados entre seus dispositivos e aplicações na nuvem, como também pode conferir mais informações sobre as últimas novidades da SamMobile.
Considerações finais
Este projeto demonstra como utilizar a BananaPi e o protocolo MQTT para monitorar o estado de um LED remotamente. A implementação envolve o gerenciamento de pinos GPIO, leitura e escrita de arquivos via Shell, acesso remoto via SSH, criação de um ambiente isolado com Python e a utilização do MQTT em Python. Além disso, a arquitetura do protocolo MQTT proporciona um desacoplamento eficiente entre os componentes.
Substituindo os.system() por subprocess.run()
Inicialmente, a função os.system() era utilizada para gerenciar os pinos GPIO, mas ela cria um subshell e não oferece controle sobre a saída e tratamento de erros. A função subprocess.run(), por outro lado, permite maior controle e impede a injeção de comandos, além de parecer mais estável.
Desacoplamento da arquitetura MQTT
Diferente de uma arquitetura cliente-servidor tradicional, o protocolo MQTT funciona de forma distribuída. As mensagens publicadas são recebidas pelo Broker e repassadas aos assinantes, sem tratamento de dados, apenas encaminhamento. Isso reduz a necessidade de dispositivos IoT implementarem protocolos complexos para comunicação segura.
Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.