Configurando um Broker MQTT para Comunicação com o ESP32

A comunicação eficiente entre dispositivos é fundamental no mundo da Internet das Coisas (IoT). O protocolo MQTT (Message Queuing Telemetry Transport) é uma escolha popular por sua leveza e eficiência. Neste artigo, vamos explorar em profundidade como configurar um broker MQTT para estabelecer comunicação com o ESP32, permitindo que você crie aplicações IoT robustas e escaláveis.

O que é um Broker MQTT?🔗

Antes de mergulharmos na configuração, é importante entender o papel do broker MQTT. O broker é o intermediário central em uma rede MQTT. Ele recebe mensagens de dispositivos publicadores e as encaminha para dispositivos assinantes interessados naquele tópico específico. Isso permite uma comunicação desacoplada e eficiente entre diversos dispositivos.

Por que Usar um Broker MQTT com o ESP32?🔗

O ESP32 é um microcontrolador potente e versátil, capaz de conectar-se a redes Wi-Fi e Bluetooth. Ao combinar o ESP32 com o protocolo MQTT, você habilita a comunicação em tempo real entre dispositivos, sensores e aplicativos. Usar um broker MQTT facilita a escalabilidade do seu sistema, permitindo que novos dispositivos sejam adicionados sem alterações significativas na infraestrutura.

Escolhendo um Broker MQTT🔗

Existem várias opções de brokers MQTT disponíveis, tanto para uso local quanto em nuvem. Alguns dos brokers mais populares incluem:

  • Mosquitto: Um broker MQTT de código aberto, leve e adequado para dispositivos embarcados.
  • EMQX: Oferece alta performance e suporte a clusterização.
  • HiveMQ: Focado em soluções empresariais com alta disponibilidade.
  • CloudMQTT: Uma opção baseada em nuvem, ideal para quem não deseja hospedar o broker localmente.

Para fins deste guia, utilizaremos o Mosquitto devido à sua simplicidade e facilidade de configuração.

Pré-requisitos🔗

Antes de iniciar, certifique-se de ter:

  • Um computador com acesso à internet.
  • Conhecimento básico de linha de comando.
  • O ESP32 devidamente configurado com o ambiente de desenvolvimento Arduino IDE.

Instalando o Mosquitto Broker MQTT🔗

No Windows

1. Baixando o Instalador

Acesse o site oficial do Mosquitto em mosquitto.org/download e baixe o instalador adequado para sua versão do Windows.

2. Executando o Instalador

Execute o arquivo .exe baixado e siga as instruções do assistente de instalação. Certifique-se de marcar a opção para instalar o Service se desejar que o Mosquitto inicie automaticamente com o Windows.

3. Configurando o Path (Opcional)

Para facilitar o uso dos comandos do Mosquitto via linha de comando, adicione o diretório de instalação ao Path do sistema:
  • Clique com o botão direito em "Este Computador" e selecione "Propriedades".
  • Vá em "Configurações Avançadas do Sistema" e clique em "Variáveis de Ambiente".
  • Em "Variáveis do Sistema", localize a variável Path e edite-a.
  • Adicione o caminho para a pasta onde o Mosquitto foi instalado (geralmente C:\Program Files\mosquitto).

No Linux (Ubuntu/Debian)

1. Atualizando os Repositórios

sudo apt update

2. Instalando o Mosquitto e o Cliente Mosquitto

sudo apt install mosquitto mosquitto-clients

3. Habilitando e Iniciando o Serviço

sudo systemctl enable mosquitto
sudo systemctl start mosquitto

No macOS

1. Usando o Homebrew

Se você não tiver o Homebrew instalado, instale-o com o seguinte comando:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. Instalando o Mosquitto

brew install mosquitto

3. Iniciando o Servidor Mosquitto

brew services start mosquitto

Testando o Broker MQTT🔗

Para garantir que o broker esteja funcionando corretamente, faremos um teste simples utilizando o cliente Mosquitto.

Passo 1: Abrir Dois Terminais

Abra dois terminais ou linhas de comando em seu computador.

Passo 2: Inscrever-se em um Tópico

No primeiro terminal, inscreva-se em um tópico chamado teste/mqtt:

mosquitto_sub -h localhost -t teste/mqtt

Este comando está dizendo ao cliente para se conectar ao host localhost e se inscrever no tópico teste/mqtt.

Passo 3: Publicar uma Mensagem

No segundo terminal, publique uma mensagem para o tópico teste/mqtt:

mosquitto_pub -h localhost -t teste/mqtt -m "Olá, MQTT!"

Assim que você executar este comando, a mensagem "Olá, MQTT!" deverá aparecer no primeiro terminal, confirmando que o broker está funcionando corretamente.

Configurando o Broker para Acesso Externo🔗

Por padrão, o Mosquitto está configurado para aceitar conexões locais. Se você deseja que dispositivos externos, como seu ESP32, se conectem ao broker, será necessário ajustar a configuração.

Passo 1: Editar o Arquivo de Configuração

Localize o arquivo de configuração do Mosquitto. Em sistemas Linux, geralmente está em /etc/mosquitto/mosquitto.conf. No Windows, pode estar na pasta de instalação.

Abra o arquivo em um editor de texto:

sudo nano /etc/mosquitto/mosquitto.conf

Passo 2: Habilitar a Escuta em Todas as Interfaces

Adicione ou descomente a seguinte linha:

listener 1883

Isso fará com que o Mosquitto escute na porta padrão MQTT (1883) em todas as interfaces de rede.

Passo 3: Desabilitar o 'allow_anonymous' (Opcional, mas Recomendado)

Para evitar acessos não autorizados, é recomendável configurar autenticação. No entanto, para simplificar, inicialmente vamos permitir conexões anônimas. Certifique-se de que a seguinte linha está configurada:

allow_anonymous true
Nota: Em um ambiente de produção, nunca permita conexões anônimas sem considerar os riscos de segurança. Implementar autenticação e criptografia é essencial.

Passo 4: Reiniciar o Serviço Mosquitto

Após as alterações, reinicie o serviço:

sudo systemctl restart mosquitto

Obtendo o Endereço IP do Broker🔗

Para que o ESP32 se comunique com o broker, você precisa conhecer o endereço IP do computador onde o Mosquitto está rodando.

No Windows

Abra o Prompt de Comando e digite:

ipconfig

Procure o "Endereço IPv4" da interface de rede que está em uso.

No Linux/macOS

Digite no terminal:

ifconfig

Ou

ip addr show

Anote o endereço IP da interface de rede.

Configurando o ESP32 para se Conectar ao Broker MQTT🔗

Agora que o broker está configurado e conhecemos o endereço IP, vamos preparar o ESP32 para se conectar ao broker.

Passo 1: Instalar a Biblioteca PubSubClient

Abra a Arduino IDE e vá em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas. Procure por "PubSubClient" e instale a biblioteca de Nick O'Leary.

Passo 2: Código do ESP32

Utilize o código abaixo como base. Lembre-se de substituir SSID e PASSWORD pelos dados da sua rede Wi-Fi, e BROKER_IP pelo endereço IP do broker.

#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";
const char* mqttServer = "BROKER_IP";
const int mqttPort = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup()
{
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.println("Conectando ao WiFi...");
  }
  Serial.println("Conectado ao WiFi");
  client.setServer(mqttServer, mqttPort);
  while (!client.connected())
  {
    Serial.println("Conectando ao broker MQTT...");
    if (client.connect("ESP32Client"))
    {
      Serial.println("Conectado ao broker MQTT");
    }
    else
    {
      Serial.print("Falha na conexão. Estado: ");
      Serial.print(client.state());
      delay(2000);
    }
  }
  client.publish("teste/mqtt", "Olá do ESP32!");
  client.subscribe("teste/mqtt");
}
void loop()
{
  client.loop();
}

Passo 3: Carregar o Código no ESP32

Conecte o ESP32 ao computador e carregue o código utilizando a Arduino IDE. Abra o monitor serial para observar as mensagens de debug.

Testando a Comunicação entre o ESP32 e o Broker🔗

Com o ESP32 conectado, vamos verificar se ele está enviando e recebendo mensagens pelo broker MQTT.

Recebendo Mensagens Publicadas pelo ESP32

No computador, abra um terminal e inscreva-se no tópico teste/mqtt:

mosquitto_sub -h localhost -t teste/mqtt

Você deverá ver a mensagem "Olá do ESP32!" enviada pelo microcontrolador.

Enviando Mensagens para o ESP32

Em outro terminal, publique uma mensagem para o ESP32:

mosquitto_pub -h localhost -t teste/mqtt -m "Mensagem para o ESP32"

No monitor serial da Arduino IDE, a mensagem recebida deverá ser exibida.

Troubleshooting: Resolvendo Problemas Comuns🔗

ESP32 Não Conecta ao Wi-Fi

  • Verifique se o SSID e a senha estão corretos.
  • Certifique-se de que o ESP32 está próximo ao roteador.
  • Confira se outros dispositivos conseguem se conectar à rede.

ESP32 Não Conecta ao Broker MQTT

  • Verifique se o endereço IP do broker está correto.
  • Certifique-se de que o broker MQTT está ativo e escutando na porta 1883.
  • Verifique se há firewalls ou antivírus bloqueando a conexão.

Mensagens Não São Recebidas

  • Confirme se o ESP32 está inscrito no tópico correto.
  • Verifique se está publicando e se inscrevendo no mesmo tópico.
  • Certifique-se de que não há erros no código do ESP32 ou nos comandos do Mosquitto.

Melhorando a Segurança do Broker MQTT🔗

Embora tenhamos permitido conexões anônimas para simplificar, é importante pensar na segurança do seu sistema. Aqui estão algumas medidas recomendadas:

Habilitar Autenticação

No arquivo de configuração do Mosquitto, configure usuários e senhas:

1. Criar um Arquivo de Senhas

mosquitto_passwd -c /etc/mosquitto/passwd meu_usuario
Você será solicitado a definir uma senha.

2. Atualizar o Arquivo de Configuração

Adicione as seguintes linhas:
allow_anonymous false
password_file /etc/mosquitto/passwd

3. Reiniciar o Mosquitto

sudo systemctl restart mosquitto

Configurar SSL/TLS

Para criptografar as comunicações, configure certificados SSL/TLS no broker e ajuste o ESP32 para utilizá-los. Este é um tópico avançado que requer conhecimento em certificação digital.

Conclusão🔗

Configurar um broker MQTT é um passo crucial para desenvolver aplicações IoT com o ESP32. Com o Mosquitto instalado e o ESP32 devidamente configurado, você tem uma base sólida para construir projetos que exigem comunicação eficiente e em tempo real entre dispositivos.

A partir daqui, você pode explorar diversas possibilidades, como:

  • Integrar sensores e atuar nos dados coletados.
  • Criar painéis de monitoramento em tempo real.
  • Implementar controles remotos para dispositivos.

Lembre-se sempre de considerar aspectos de segurança ao desenvolver suas aplicações, protegendo os dados e dispositivos conectados.

Boa sorte em seus projetos com o ESP32 e MQTT!
Este artigo faz parte do grupo Monitoramento Remoto com ESP32 e MQTT
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Artigos Relacionados