Exemplos de código

Exemplo MQTT em ESP32

Conecte um ESP32 a um broker MQTT via Wi-Fi com a biblioteca PubSubClient para Arduino. Comece no broker público gratuito e depois aponte o mesmo código para um broker privado e seguro no ConnectMQ.

Instalação
arduino-cli lib install PubSubClient
Código-fonte no GitHubmqtt-code-samples/esp32Clone os exemplos completos e prontos para rodar. Estrelas e pull requests são bem-vindos. Ver no GitHub

1. Teste no broker público gratuito

Sem precisar de conta: conecte-se a broker.connectmq.com na porta 1883 e comece a publicar em segundos.

esp32_mqtt.ino
#include <WiFi.h>
#include <PubSubClient.h>

const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";
const char* TOPIC = "your-project/sensors/temperature"; // Use um prefixo de tópico exclusivo: qualquer pessoa pode ler o broker público

WiFiClient net;
PubSubClient mqtt(net);

// Executado para cada mensagem de um tópico assinado
void onMessage(char* topic, byte* payload, unsigned int length) {
  Serial.printf("%s: %.*s\n", topic, length, (char*)payload);
}

void connectMqtt() {
  while (!mqtt.connected()) {
    // Cada cliente precisa de um client ID único
    String id = "esp32-" + String((uint32_t)ESP.getEfuseMac(), HEX);
    if (mqtt.connect(id.c_str())) {
      // Assina o tópico de temperatura
      mqtt.subscribe(TOPIC);
    } else {
      delay(2000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  // Conecta ao Wi-Fi primeiro
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  // Conecta ao broker público gratuito (sem conta)
  mqtt.setServer("broker.connectmq.com", 1883);
  mqtt.setCallback(onMessage);
}

void loop() {
  // Reconecta automaticamente se a conexão cair
  if (!mqtt.connected()) connectMqtt();
  mqtt.loop();
  static unsigned long last = 0;
  if (millis() - last > 10000) {
    last = millis();
    // Publica uma leitura em JSON
    mqtt.publish(TOPIC, "{\"temperature\":21.5}");
  }
}

Broker MQTT público gratuito

O broker público é compartilhado: qualquer pessoa pode assinar seus tópicos. Nunca envie senhas, dados pessoais ou qualquer informação confidencial por ele.

Sobre o broker MQTT público gratuito

2. Vá para produção com o ConnectMQ

Para dispositivos reais, use um broker MQTT serverless privado no ConnectMQ em vez do público: criptografia TLS, usuário e senha para cada dispositivo e controle de acesso por tópico, totalmente gerenciado. Comece no plano Free — sem cartão de crédito.

Substitua YOUR_BROKER_HOST, YOUR_USERNAME e YOUR_PASSWORD pelos valores do seu painel do ConnectMQ.

esp32_mqtt.ino
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>

const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";
const char* TOPIC = "your-project/sensors/temperature";

// Certificado CA raiz (PEM) do certificado TLS do broker
const char* ROOT_CA = R"PEM(
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
)PEM";

WiFiClientSecure net;
PubSubClient mqtt(net);

// Executado para cada mensagem de um tópico assinado
void onMessage(char* topic, byte* payload, unsigned int length) {
  Serial.printf("%s: %.*s\n", topic, length, (char*)payload);
}

void connectMqtt() {
  while (!mqtt.connected()) {
    // Cada cliente precisa de um client ID único
    String id = "esp32-" + String((uint32_t)ESP.getEfuseMac(), HEX);
    // Usuário e senha do seu painel do ConnectMQ
    if (mqtt.connect(id.c_str(), "YOUR_USERNAME", "YOUR_PASSWORD")) {
      // Assina o tópico de temperatura
      mqtt.subscribe(TOPIC);
    } else {
      delay(2000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  // Conecta ao Wi-Fi primeiro
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  net.setCACert(ROOT_CA);
  // Conecta ao seu broker privado do ConnectMQ na porta 8883
  mqtt.setServer("YOUR_BROKER_HOST", 8883);
  mqtt.setCallback(onMessage);
}

void loop() {
  // Reconecta automaticamente se a conexão cair
  if (!mqtt.connected()) connectMqtt();
  mqtt.loop();
  static unsigned long last = 0;
  if (millis() - last > 10000) {
    last = millis();
    // Publica uma leitura em JSON
    mqtt.publish(TOPIC, "{\"temperature\":21.5}");
  }
}

Perguntas frequentes sobre MQTT com ESP32

Como conectar ESP32 a um broker MQTT?

Instale PubSubClient (Arduino), conecte-se ao host do broker na porta 1883 (ou 8883 com TLS) e depois assine um tópico e publique mensagens nele. Os exemplos desta página se conectam ao broker público gratuito broker.connectmq.com e a um broker privado do ConnectMQ.

Existe um broker MQTT gratuito para testar ESP32?

Sim. broker.connectmq.com é um broker MQTT público e gratuito que não exige conta. Qualquer pessoa pode ler seus tópicos, então use-o apenas para testes e com um prefixo de tópico exclusivo.

Como proteger uma conexão MQTT com ESP32?

Conecte-se via TLS na porta 8883 com um usuário e senha do seu painel do ConnectMQ e, em vez de usar o broker público, dê a cada dispositivo suas próprias credenciais e permissões de tópico.

Broker MQTT público gratuito

Teste qualquer exemplo em broker.connectmq.com — sem cadastro, com MQTT 3.1.1 e 5, TCP, TLS e WebSocket.

Sobre o broker MQTT público gratuito

MQTT serverless seguro para produção

Quando chegar a hora dos dispositivos reais, rode o mesmo código em um broker ConnectMQ privado e totalmente gerenciado, com TLS e credenciais por dispositivo.

Comece grátis

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.

MQTT sobre WebSocket: Conecte um Navegador a um Broker MQTT com MQTT.js

Navegadores não conseguem abrir sockets TCP puros, então aplicações web falam MQTT sobre WebSocket. Construa um cliente funcional no navegador e outro em Node.js usando o servidor MQTT público broker.connectmq.com e aprenda a resolver os erros de conexão mais comuns.

9 min de leitura