MCU.TEC MQTT MQTT na Prática: Comunicação Eficiente para IoT e Sistemas Embarcados com Raspberry Pi

MQTT na Prática: Comunicação Eficiente para IoT e Sistemas Embarcados com Raspberry Pi


O MQTT (Message Queuing Telemetry Transport) é um protocolo de comunicação leve, assíncrono e baseado em mensagens, ideal para aplicações de Internet das Coisas (IoT) e sistemas embarcados com recursos limitados. Desenvolvido inicialmente pela IBM na década de 1990, o MQTT ganhou popularidade por sua eficiência em cenários com largura de banda restrita, alta latência ou conectividade intermitente — como redes móveis, dispositivos remotos e sistemas embarcados distribuídos.

Ao contrário de protocolos baseados em requisições diretas (request/response), o MQTT opera em um modelo de publicação e assinatura (publish/subscribe). Nesse modelo, dispositivos chamados publishers enviam mensagens a um servidor central denominado broker, que se encarrega de entregá-las aos dispositivos subscribers interessados em determinados tópicos. Esse desacoplamento entre quem envia e quem recebe a informação garante escalabilidade e flexibilidade para sistemas com milhares de nós.

No MQTT, cada mensagem trafega em um tópico, que funciona como uma rota hierárquica, por exemplo: sala/temperatura ou sensor/rack001/porta. Os tópicos permitem organizar logicamente os dados, facilitando o roteamento e o filtro de informações por parte dos assinantes. As mensagens são tipicamente pequenas e podem conter formatos de dados simples como texto, JSON, binário ou protocolos como CBOR e Protobuf.

Entre suas vantagens, o MQTT se destaca pela simplicidade de implementação, baixo overhead de rede, suporte a diferentes níveis de garantia de entrega (QoS), e a presença de mecanismos de retenção de mensagens e de “última vontade” (last will), fundamentais para aplicações confiáveis. Por isso, é uma escolha sólida para aplicações embarcadas com microcontroladores como o STM32, RP2040 ou SBCs como o Raspberry Pi em sistemas de borda (edge computing).

Brokers MQTT: Conceitos e Arquitetura

O coração da arquitetura MQTT é o broker, responsável por receber, gerenciar e encaminhar as mensagens entre os dispositivos publicadores (publishers) e os assinantes (subscribers). Diferente de protocolos ponto-a-ponto como o TCP/IP tradicional, onde o remetente precisa conhecer o endereço do destinatário, no MQTT essa complexidade é abstraída: os dispositivos apenas interagem com o broker, que atua como intermediador inteligente e centralizado.

A comunicação MQTT é assíncrona e orientada a eventos. O publisher envia mensagens associadas a tópicos específicos ao broker, que então repassa as mensagens apenas aos subscribers que manifestaram interesse nesses tópicos. Isso promove um forte desacoplamento entre emissores e receptores: eles não precisam conhecer a existência um do outro nem manter conexões diretas. Isso é especialmente vantajoso em redes de IoT com topologias dinâmicas e dispositivos intermitentes.

Os brokers modernos são projetados para suportar milhares ou até milhões de conexões simultâneas. Eles gerenciam o estado das conexões, autenticação, autorização, aplicação de regras de filtragem, retenção de mensagens, registros de logs, e controle de qualidade de serviço (QoS). A maioria deles também oferece suporte a TLS/SSL para criptografia de dados, além de interfaces web para monitoramento e gerenciamento remoto.

Do ponto de vista do desenvolvedor de sistemas embarcados, compreender a função do broker é essencial para projetar aplicações confiáveis e escaláveis. A escolha do broker, seus recursos e limitações influenciam diretamente no desempenho e segurança da solução. Em SBCs como o Raspberry Pi, é possível executar brokers locais, criando soluções de borda (edge) com baixa latência e independência da nuvem. Nos próximos tópicos, veremos essas alternativas em detalhe.

Opções de Brokers Locais para Edge Computing em SBCs (como Raspberry Pi)

A adoção de brokers MQTT locais em dispositivos como o Raspberry Pi é uma estratégia fundamental para arquiteturas de borda (edge computing). Essa abordagem reduz a latência, elimina a dependência da internet e melhora a confiabilidade em ambientes industriais, agrícolas ou domésticos onde a conectividade pode ser instável. Para isso, é essencial escolher um broker leve, eficiente e de fácil manutenção.

Mosquitto

O Eclipse Mosquitto é o broker MQTT mais popular em aplicações embarcadas. De código aberto e com footprint reduzido, pode ser facilmente instalado via apt em sistemas baseados em Debian como o Raspberry Pi OS. Suporta autenticação via usuário e senha, TLS/SSL, mensagens persistentes e integração com ACLs (Access Control Lists). Também possui ferramentas de linha de comando (mosquitto_pub, mosquitto_sub) que auxiliam nos testes e diagnósticos. É ideal para projetos pequenos e médios.

EMQX Edge

O EMQX Edge é uma versão leve do EMQX, voltada para borda. É mais robusto que o Mosquitto, oferecendo suporte nativo a múltiplos protocolos além do MQTT, como CoAP, LwM2M, e HTTP. Traz recursos avançados como autenticação baseada em JWT, suporte a bases de dados SQL e NoSQL, replicação de mensagens com EMQX Core (na nuvem) e painéis de monitoramento embutidos. Em compensação, exige mais recursos computacionais e consome mais memória — o que deve ser considerado em SBCs com menos de 1 GB de RAM.

VerneMQ

O VerneMQ é um broker MQTT escalável, baseado em Erlang/OTP, com forte ênfase em resiliência e tolerância a falhas. Embora sua instalação em Raspberry Pi exija mais configurações (e geralmente seja feita via Docker), ele oferece clustering nativo, distribuição de carga, e controle fino de sessões. É ideal para aplicações mais críticas e distribuídas, como gateways industriais com múltiplos nós de sensores e atuadores.

Critérios de Escolha

Ao selecionar um broker local para SBCs, é importante considerar os seguintes critérios:

  • Consumo de recursos: CPU, RAM e uso de disco.
  • Facilidade de instalação e suporte: presença em repositórios, documentação, comunidade ativa.
  • Suporte a segurança: TLS, autenticação, controle de acesso.
  • Persistência de mensagens: em caso de falhas ou reinicializações.
  • Suporte a QoS e mensagens retidas: especialmente útil para sensores que enviam o último valor.

Em resumo, para projetos didáticos ou protótipos simples, o Mosquitto costuma ser suficiente. Para aplicações mais robustas ou industriais, o EMQX Edge oferece maior controle e visibilidade. Já o VerneMQ deve ser considerado em sistemas com alta disponibilidade ou escalabilidade horizontal.

Brokers MQTT na Nuvem: Soluções Gratuitas e Comerciais

Embora brokers locais em SBCs sejam ideais para sistemas de borda, muitos projetos exigem integração com a nuvem para funcionalidades como dashboards, armazenamento em bancos de dados remotos, controle remoto via internet ou machine learning em servidores de alto desempenho. Para esses casos, utilizar um broker MQTT na nuvem é uma estratégia consolidada.

HiveMQ Cloud

O HiveMQ é um dos brokers comerciais mais robustos do mercado. Sua versão gratuita (HiveMQ Cloud Free) permite até 100 conexões simultâneas, 10 GB de tráfego por mês e suporte a TLS. Seu painel web é intuitivo e ideal para testes, demonstrações e projetos acadêmicos. A versão paga (Professional ou Enterprise) oferece escalabilidade automática, clusterização, integração com Kafka, REST APIs e suporte técnico.

Adafruit IO

Voltado para prototipagem rápida e makers, o Adafruit IO fornece uma solução MQTT baseada em nuvem com interface gráfica para visualização de dados (feeds, gráficos, dashboards). É excelente para projetos educacionais, possui integração direta com bibliotecas Arduino e Python, e suporte MQTT sobre TLS. Sua principal limitação está na taxa de mensagens (limite de 60 requisições por minuto no plano gratuito).

AWS IoT Core

A solução da Amazon Web Services (AWS) para dispositivos conectados é altamente escalável e integra-se nativamente com outros serviços da nuvem AWS (como Lambda, S3, DynamoDB). O AWS IoT Core permite autenticação via certificados X.509, gestão de políticas de segurança, e rastreamento em tempo real dos dispositivos. Embora poderosa, sua configuração é mais complexa, e pode não ser a melhor escolha para iniciantes. Oferece camada gratuita por 12 meses, com limite de mensagens.

Azure IoT Hub

O Azure IoT Hub da Microsoft também oferece suporte ao protocolo MQTT com integração total à plataforma Azure. Permite telemetria bidirecional, provisionamento automático de dispositivos, e suporte a Digital Twins. Seu uso exige configuração mais avançada, incluindo o uso do SDK da Azure, e oferece um plano gratuito limitado a 8.000 mensagens por dia.

Mosquitto Public Broker

O broker público do Mosquitto, hospedado pela Eclipse Foundation, pode ser usado gratuitamente em test.mosquitto.org. Embora útil para testes rápidos e demonstrações, não é recomendado para produção: não há garantia de entrega, nem autenticação, nem criptografia por padrão. É ideal apenas como ambiente de experimentação.

Comparativo Geral

BrokerGratuitoTLSLimite de conexõesIdeal para
HiveMQ CloudSimSim100Projetos reais e escaláveis
Adafruit IOSimSim10Prototipagem e ensino
AWS IoT CoreParcialSimEscalávelProdução com nuvem AWS
Azure IoT HubParcialSimEscalávelIntegração com Azure
Mosquitto PublicSimNãoIndefinidoTestes rápidos

A escolha da solução em nuvem deve considerar a facilidade de integração com o sistema embarcado, as restrições de segurança, a frequência das publicações e a disponibilidade de recursos na borda. O uso híbrido — broker local + sincronização com broker em nuvem — também é uma abordagem cada vez mais comum em arquiteturas de IoT modernas.

Boas Práticas para Estruturas de Dados Complexas em MQTT

Embora o MQTT seja projetado para transmitir mensagens simples e leves, aplicações reais frequentemente precisam lidar com estruturas de dados mais complexas, como pacotes compostos por múltiplos sensores, estados de sistemas ou comandos hierárquicos. Para garantir eficiência e escalabilidade, é fundamental adotar boas práticas na serialização dos dados e na organização dos tópicos.

Serialização de Dados

A serialização define como os dados estruturados serão compactados em um formato que possa ser transmitido via MQTT. Os três formatos mais utilizados em sistemas embarcados são:

  • JSON (JavaScript Object Notation): Fácil de ler e escrever, ideal para prototipagem e debugging. Contudo, consome mais bytes por caractere e pode ser lento em microcontroladores com pouca RAM ou processamento.
  • CBOR (Concise Binary Object Representation): Variante binária do JSON, mais compacta e eficiente. Recomendado para sistemas com restrição de banda e que exigem interoperabilidade.
  • Protobuf (Protocol Buffers): Desenvolvido pelo Google, é o mais eficiente em termos de tamanho e velocidade. Requer geração de código a partir de arquivos .proto, o que pode ser um overhead em sistemas muito restritos.

Para microcontroladores como STM32 e RP2040, usar CBOR ou JSON simplificado é geralmente o equilíbrio ideal entre desempenho e facilidade de implementação. Já para SBCs como o Raspberry Pi, onde há mais recursos, o uso de Protobuf se torna viável.

Organização Semântica dos Tópicos

Os tópicos MQTT devem ser organizados de forma hierárquica e semântica. Um bom design facilita o roteamento, filtragem e escalabilidade da solução. Use separadores de barra (/) para definir camadas lógicas, como por exemplo:

/sensor/rack001/temperature
/sensor/rack001/door
/sensor/rack002/temperature

Evite tópicos genéricos como /dados ou /info, que dificultam a assinatura seletiva. Use sempre nomes descritivos, com granularidade suficiente para permitir escalabilidade. A inclusão de identificadores únicos por dispositivo (como /rack001/ ou /device/ABC123) garante que múltiplos nós possam coexistir em um mesmo broker sem colisão.

Estrutura recomendada para pacotes compostos

Ao trabalhar com múltiplos dados em uma única publicação (por exemplo, temperatura, umidade e pressão), serialize as informações em um objeto JSON ou CBOR. Exemplo em JSON:

{
  "temperature": 23.4,
  "humidity": 51.2,
  "pressure": 1002.7
}

Nesse caso, publique em um tópico genérico, como /sensor/rack001/data, e evite publicar cada métrica individual em tópicos separados se forem sempre medidas em conjunto. Isso reduz o tráfego MQTT e simplifica o processamento do lado do assinante.

Níveis de Qualidade de Serviço (QoS) no MQTT

O MQTT define três níveis de Qualidade de Serviço (QoS) que regulam como as mensagens são entregues entre o publicador e o assinante. Cada nível oferece um compromisso entre confiabilidade e consumo de recursos — como largura de banda, armazenamento e ciclos de CPU. Entender e aplicar corretamente os níveis de QoS é fundamental em sistemas embarcados e IoT, onde recursos são frequentemente limitados e a confiabilidade é crítica.

QoS 0 – “At most once” (no máximo uma vez)

Nesse nível, a mensagem é enviada apenas uma vez e não há garantias de entrega. Não há confirmação por parte do broker nem retransmissão. É o modo mais leve e rápido, ideal para dados que são transmitidos com frequência e que não precisam ser garantidos — como leitura de sensores em tempo real, onde a última medição é mais relevante que todas as anteriores.

Exemplo típico:
Transmissão contínua de temperatura ambiente em um sistema de ventilação.

QoS 1 – “At least once” (pelo menos uma vez)

Aqui, o publicador envia a mensagem e espera um ACK (confirmação) do broker. Se o ACK não for recebido, ele retransmite a mensagem. Isso garante que o assinante receberá a mensagem ao menos uma vez, mas há a possibilidade de mensagens duplicadas, o que deve ser tratado na aplicação.

Exemplo típico:
Publicação de alarmes de intrusão, onde é melhor receber duas vezes do que não receber.

QoS 2 – “Exactly once” (exatamente uma vez)

Esse é o nível mais seguro e complexo, com handshake de quatro fases entre publicador e assinante. Garante que a mensagem será entregue uma única vez, sem duplicações, mesmo em caso de falhas na rede. Em contrapartida, impõe maior latência e overhead.

Exemplo típico:
Transações críticas, como controle de acesso ou comandos que não podem ser repetidos (ex: destravar porta de cofre).

Implicações em Sistemas Embarcados

Em sistemas embarcados com restrições de processamento e memória (como microcontroladores sem sistema operacional), o QoS 0 é o mais utilizado por sua leveza. Já em SBCs como o Raspberry Pi, com capacidade para tratar retransmissões e deduplicações, é possível empregar QoS 1 ou 2 em canais críticos.

Além disso, é fundamental que publicadores e assinantes usem o mesmo nível de QoS esperado, e que o broker suporte os três níveis — algo comum em brokers como Mosquitto, EMQX e HiveMQ.

Segurança e Manutenção de Sistemas MQTT

A segurança é um aspecto essencial em qualquer arquitetura de Internet das Coisas (IoT), especialmente quando se utiliza o protocolo MQTT para transmissão de dados sensíveis ou comandos de controle. Embora o protocolo MQTT por si só não imponha medidas de segurança, a maioria dos brokers e bibliotecas cliente oferecem suporte a mecanismos robustos de autenticação, criptografia e controle de acesso.

Autenticação e Controle de Acesso

O método mais básico de autenticação em MQTT é via usuário e senha. Essa credencial é enviada durante o processo de conexão com o broker e pode ser validada localmente (por arquivos de configuração) ou em bases de dados externas. Para sistemas mais sofisticados, recomenda-se a integração com OAuth2, LDAP ou autenticação baseada em tokens JWT.

Além disso, é essencial definir regras de acesso (ACLs) que limitem quais tópicos um determinado cliente pode publicar ou assinar. Por exemplo, um sensor não deve ser capaz de publicar em tópicos de controle de portas. Isso evita ações indevidas em caso de comprometimento de um nó.

Criptografia e Certificados

Para proteger os dados contra espionagem e adulteração, deve-se utilizar TLS/SSL em todas as conexões MQTT. A configuração de TLS inclui:

  • Criptografia do canal (proteção de dados em trânsito)
  • Autenticação do broker (via certificado digital)
  • Autenticação mútua (2-way TLS), onde o dispositivo cliente também possui certificado, garantindo sua identidade.

Muitos brokers MQTT suportam essa configuração com certificados autofirmados ou validados por uma autoridade certificadora (CA). Em sistemas embarcados, pode-se armazenar os certificados em memória flash ou em chips de segurança (ex: ATECC608A).

Proteções contra Ataques e Abusos

Sistemas MQTT também podem ser alvo de ataques como:

  • Flooding de mensagens: envio excessivo para saturar o broker.
  • Publish em massa ou em tópicos não autorizados.
  • Exploração de mensagens retidas com dados falsos.

Para mitigar esses riscos, recomenda-se:

  • Limitar o número de conexões simultâneas e a taxa de mensagens por cliente.
  • Ativar logging e auditoria das conexões e tópicos utilizados.
  • Utilizar firewalls e listas de IPs autorizados nos brokers locais.
  • Definir timeouts de inatividade e verificar a presença dos dispositivos com Last Will and Testament (LWT).

Monitoramento e Manutenção

O bom funcionamento de uma rede MQTT requer monitoramento contínuo. Ferramentas como Grafana, Telegraf, Prometheus e Node-RED podem ser integradas para visualizar métricas do broker, uso de tópicos e status de dispositivos. Em sistemas embarcados, é recomendável que o firmware envie periodicamente mensagens de keep-alive, temperatura interna e tempo de atividade (uptime).

Manter o broker e bibliotecas clientes atualizados, aplicar patches de segurança e revisar periodicamente as regras de ACL são práticas essenciais para garantir a resiliência do sistema.

Exemplos de Código em C (Publisher e Subscriber)

Nesta seção, destacamos os trechos relevantes de código em C que demonstram o uso prático do protocolo MQTT em dispositivos embarcados e SBCs como o Raspberry Pi Pico W com o chip CYW43 e a pilha lwIP. Os exemplos utilizam bibliotecas consagradas como lwip/apps/mqtt.h e abordam tanto o Subscriber quanto o Publisher.


Exemplo 1 – Subscriber MQTT (Controle de LED remoto)

O código abaixo mostra como um microcontrolador assina tópicos MQTT e responde a comandos para ligar ou desligar LEDs.

static void mqtt_incoming_data_cb(void *arg, const u8_t *data, u16_t len, u8_t flags) {
    MQTT_CLIENT_DATA_T* state = (MQTT_CLIENT_DATA_T*)arg;
    strncpy(state->data, (const char *)data, len);
    state->data[len] = '
static void mqtt_incoming_data_cb(void *arg, const u8_t *data, u16_t len, u8_t flags) {
    MQTT_CLIENT_DATA_T* state = (MQTT_CLIENT_DATA_T*)arg;
    strncpy(state->data, (const char *)data, len);
    state->data[len] = '\0';

    if (strcmp(state->topic, "rack_inteligente/00001/door") == 0) {
        // Se o valor for "ON", aciona o LED vermelho
        if (strcmp(state->data, "ON") == 0) {
            gpio_put(LED_RED_PIN, 1);
        } else {
            gpio_put(LED_RED_PIN, 0);
        }
    }
}
';
if (strcmp(state->topic, "rack_inteligente/00001/door") == 0) { // Se o valor for "ON", aciona o LED vermelho if (strcmp(state->data, "ON") == 0) { gpio_put(LED_RED_PIN, 1); } else { gpio_put(LED_RED_PIN, 0); } } }

Explicação:

  • A função é registrada como callback para mensagens recebidas.
  • O conteúdo do tópico e a mensagem são comparados.
  • Um LED é ligado ou desligado de acordo com o comando MQTT recebido.

Exemplo 2 – Publisher MQTT (Publicação do estado de um botão)

Neste trecho, um botão conectado ao pino GPIO 5 é monitorado, e seu estado é publicado periodicamente.

void publish_door_state(bool pressed) {
    if (!mqtt_connected) return;

    const char *message = pressed ? "ON" : "OFF";
    mqtt_publish(mqtt_client, "rack_inteligente/00001/door", message, strlen(message), 0, 0, NULL, NULL);
}

Explicação:

  • A função publica uma mensagem ON ou OFF em um tópico fixo.
  • Usa QoS 0 e retain desativado, pois trata-se de uma atualização em tempo real.
  • Pode ser chamada a cada mudança de estado ou em intervalos fixos.

Conectando ao Broker MQTT (com DNS e TLS)

// Inicializa cliente MQTT e resolve o DNS do broker
mqtt_client = mqtt_client_new();
dns_gethostbyname(MQTT_BROKER, &broker_ip, dns_check_callback, NULL);

// Callback executado após resolução DNS
void dns_check_callback(const char *name, const ip_addr_t *ipaddr, void *arg) {
    struct mqtt_connect_client_info_t ci = {
        .client_id = "pico-client",
        .keep_alive = 60,
    };
    mqtt_client_connect(mqtt_client, ipaddr, MQTT_BROKER_PORT, mqtt_connection_callback, NULL, &ci);
}

Explicação:

  • O DNS resolve o nome do broker em IP.
  • Após isso, mqtt_client_connect estabelece a conexão com os parâmetros definidos.
  • TLS pode ser habilitado com altcp_tls_create_config_client() e certificados, se desejado.

Esses exemplos mostram como interligar sensores, atuadores e lógica de controle via MQTT em projetos embarcados. Mesmo com recursos limitados, é possível montar arquiteturas robustas com comunicação assíncrona, eficiente e segura.

Exemplo de Publisher/Subscriber em Python

Python é uma linguagem amplamente utilizada em sistemas embarcados com SBCs como o Raspberry Pi, especialmente devido à sua simplicidade e vasta coleção de bibliotecas. Para comunicação MQTT, a biblioteca mais popular é a paho-mqtt, mantida pela Eclipse Foundation. Nesta seção, apresentamos dois exemplos funcionais e simplificados: um Publisher e um Subscriber, ambos utilizando funções mock para simular atualizações de frontend ou sensores.


Publisher – Enviando dados simulados de um sensor

import paho.mqtt.client as mqtt
import time
import random

BROKER = "mqtt.example.com"
TOPIC = "rack/sala1/temperatura"

def read_temperature():
    """Função mock: simula a leitura de um sensor de temperatura."""
    return round(20 + random.random() * 10, 2)

client = mqtt.Client("publisher-python")
client.connect(BROKER)

while True:
    temperatura = read_temperature()
    payload = f"{temperatura}"
    client.publish(TOPIC, payload)
    print(f"[MQTT] Temperatura publicada: {payload} °C")
    time.sleep(5)

Explicação:

  • O read_temperature() simula a leitura de um sensor físico.
  • A cada 5 segundos, um novo valor é publicado em rack/sala1/temperatura.
  • Pode ser facilmente adaptado para enviar JSON, CBOR ou dados mais complexos.

Subscriber – Monitorando comandos para atualização de interface

import paho.mqtt.client as mqtt

BROKER = "mqtt.example.com"
TOPIC = "rack/sala1/comando"

def update_dashboard(mensagem):
    """Função mock: simula a atualização de uma interface gráfica."""
    print(f"[DASHBOARD] Novo comando recebido: {mensagem}")

def on_message(client, userdata, message):
    payload = message.payload.decode()
    print(f"[MQTT] Mensagem recebida em {message.topic}: {payload}")
    update_dashboard(payload)

client = mqtt.Client("subscriber-python")
client.on_message = on_message
client.connect(BROKER)
client.subscribe(TOPIC)

print("[MQTT] Aguardando mensagens... Ctrl+C para sair")
client.loop_forever()

Explicação:

  • O cliente se conecta ao broker e assina o tópico de comando.
  • Ao receber uma mensagem, o conteúdo é impresso e enviado para a função update_dashboard().
  • Isso pode ser integrado facilmente com GUIs em Tkinter, Dash ou web frontends.

Esses exemplos demonstram como Python pode complementar sistemas embarcados baseados em C. SBCs como o Raspberry Pi podem atuar como gateways, interfaces ou nós de controle que interagem via MQTT com microcontroladores periféricos, criando arquiteturas híbridas, eficientes e escaláveis.

Clientes MQTT: Ferramentas para Testes, Monitoramento e Integração

Durante o desenvolvimento e manutenção de sistemas IoT baseados em MQTT, é fundamental utilizar ferramentas que permitam testar conexões, publicar mensagens, monitorar tópicos e visualizar o tráfego em tempo real. Esses clientes MQTT facilitam a depuração, simulação e integração com dispositivos embarcados, além de contribuírem para a segurança e rastreabilidade das mensagens.

A seguir, apresentamos os principais clientes MQTT, com suas características, vantagens e desvantagens.


🔹 MQTT.fx

Descrição: Cliente MQTT gráfico desenvolvido em Java, bastante utilizado por desenvolvedores e integradores.

Vantagens:

  • Interface gráfica amigável.
  • Permite múltiplas conexões simultâneas.
  • Suporte a TLS, autenticação e mensagens retidas.
  • Histórico de mensagens enviadas/recebidas.

Desvantagens:

  • Requer Java instalado.
  • Projeto original foi descontinuado (mas forks existem).
  • Interface pode travar com grande volume de dados.

🔹 MQTTLens (extensão do Chrome)

Descrição: Cliente MQTT como extensão do navegador Google Chrome, ideal para testes rápidos.

Vantagens:

  • Leve e fácil de instalar.
  • Sem dependências externas.
  • Interface intuitiva e em tempo real.

Desvantagens:

  • Limitado a navegadores baseados em Chromium.
  • Não suporta mensagens binárias (CBOR, Protobuf).
  • Menor controle sobre parâmetros avançados.

🔹 Node-RED com Node MQTT

Descrição: Plataforma de programação visual baseada em fluxo, com suporte a MQTT nativo via nodes específicos.

Vantagens:

  • Integração com fluxos lógicos e dashboards.
  • Ideal para automações locais em Raspberry Pi.
  • Suporta tópicos dinâmicos, filtros e transformações.
  • Extensível com lógica em JavaScript.

Desvantagens:

  • Requer instalação e configuração inicial.
  • Consome mais recursos que um cliente leve.
  • Curva de aprendizado para iniciantes em Node.js.

🔹 MQTT Dash (Android)

Descrição: Aplicativo móvel para Android que funciona como painel MQTT personalizável, ideal para testes e demonstrações.

Vantagens:

  • Interface gráfica customizável (botões, sliders, gráficos).
  • Permite criar dashboards para controle remoto.
  • Boa integração com brokers locais.

Desvantagens:

  • Apenas para Android.
  • Limitado para análise de pacotes complexos.
  • Não substitui clientes mais técnicos para debug.

🔹 mosquitto_sub / mosquitto_pub (CLI)

Descrição: Ferramentas de linha de comando que acompanham o broker Mosquitto, amplamente utilizadas por desenvolvedores.

Vantagens:

  • Extremamente leves e rápidas.
  • Ótimas para scripts e automações.
  • Permitem testes precisos e controle total.

Desvantagens:

  • Sem interface gráfica.
  • Exigem conhecimento de terminal e sintaxe correta.
  • Difícil depuração de mensagens binárias sem decodificação manual.

🔹 HiveMQ Web Client

Descrição: Cliente MQTT online baseado em navegador, hospedado pela própria HiveMQ.

Vantagens:

  • Não requer instalação.
  • Acesso via HTTPS seguro.
  • Ótimo para testes rápidos com o broker HiveMQ Cloud.

Desvantagens:

  • Limitado a funcionalidades básicas.
  • Dependente de internet.
  • Não exibe métricas de conexão nem histórico detalhado.

🔹 Flespi MQTT Board

Descrição: Cliente avançado com interface gráfica hospedado em nuvem, desenvolvido pela Flespi.

Vantagens:

  • Suporte a múltiplas conexões e tópicos simultâneos.
  • Suporte a payloads JSON e binários.
  • Interface moderna e altamente interativa.
  • Permite salvar sessões e visualizar logs detalhados.

Desvantagens:

  • Necessário criar conta gratuita.
  • Interface pode parecer complexa para iniciantes.
  • Em inglês apenas (até o momento).

Essas ferramentas são valiosas em diferentes fases do projeto: desde a prototipagem inicial, passando por testes de integração, até monitoramento e manutenção em campo. A escolha ideal dependerá do objetivo (debug, automação, visualização, controle remoto), dos recursos disponíveis e do nível de experiência do desenvolvedor.

Considerações Finais

O protocolo MQTT se consolidou como uma das principais soluções para comunicação em sistemas de Internet das Coisas (IoT) e embarcados, oferecendo um modelo leve, assíncrono e altamente escalável para dispositivos distribuídos. Sua arquitetura baseada em publish/subscribe permite que sensores, atuadores, gateways e sistemas de monitoramento troquem dados de forma eficiente e desacoplada, mesmo em redes com largura de banda limitada ou conectividade intermitente.

Neste artigo, abordamos os principais fundamentos do MQTT, destacando a importância dos brokers na arquitetura do sistema, tanto em implementações locais com SBCs como o Raspberry Pi, quanto em soluções comerciais em nuvem como HiveMQ, AWS IoT Core e Azure IoT Hub. Discutimos ainda boas práticas para serialização de dados (JSON, CBOR, Protobuf), organização semântica dos tópicos e escolha adequada dos níveis de QoS para equilibrar confiabilidade e desempenho.

Também exploramos as questões de segurança, como autenticação, uso de TLS e proteção contra abusos, fundamentais para garantir a integridade e a privacidade dos dados trocados. Os exemplos práticos em C e Python mostram como implementar publishers e subscribers de forma clara e eficiente, aproximando a teoria da prática embarcada.

Para engenheiros e estudantes avançados, o domínio do MQTT representa uma competência essencial na construção de soluções modernas de automação, monitoramento remoto e edge computing. Sua integração com bibliotecas robustas e plataformas de nuvem facilita o desenvolvimento de sistemas inteligentes, resilientes e preparados para a escala.

0 0 votos
Classificação do artigo
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários
0
Adoraria saber sua opinião, comente.x