Blog
ESP32 MQTT Casa Inteligente: Dados na Nuvem em 30 Minutos
O Problema
Você montou uma estação meteorológica com ESP32. Temperatura e umidade aparecem perfeitamente no serial monitor. Mas aqui está o problema — esses dados estão presos no seu laptop. Você não consegue ver do celular. Não consegue registrar. Não consegue disparar automações.
O MQTT resolve isso. É o protocolo de comunicação que alimenta a maioria dos sistemas de IoT do mundo — de fábricas inteligentes a instalações de Home Assistant.
O Que Você Vai Construir
Um nó sensor ESP32 que:
- Lê temperatura e umidade a cada 30 segundos
- Publica os dados num broker MQTT gratuito na nuvem
- Deixa você monitorar tudo de qualquer navegador, em qualquer lugar
Dificuldade: Iniciante | Tempo: 30 minutos | Custo: ~US$ 23 em peças
Hardware Necessário (Lista de Materiais)
| Peça | Modelo | Qtd | Preço | Comprar |
|---|---|---|---|---|
| Microcontrolador | ESP32 DevKitC V4 | 1 | $13.49 | Ver Produto |
| Sensor de Temp./Umidade | DHT22 | 1 | $5.24 | Ver Produto |
| Display (opcional) | 0.96″ OLED SSD1306 | 1 | $5.99 | Ver Produto |
| Protoboard | 830 pontos | 1 | $4.49 | Ver Produto |
| Cabos Jumper | M-M 40pcs | 1 | $2.99 | Ver Produto |
Passo 1: Fiação
ESP32 ↔ DHT22
| Pino DHT22 | Pino ESP32 | Nota |
|---|---|---|
| VCC | 3V3 | Alimentação |
| GND | GND | Terra |
| DATA | GPIO 13 | Linha de dados |
ESP32 ↔ OLED (opcional)
| Pino OLED | Pino ESP32 | Nota |
|---|---|---|
| VCC | 3V3 | Alimentação |
| GND | GND | Terra |
| SDA | GPIO 21 | Dados I2C |
| SCL | GPIO 22 | Clock I2C |
Passo 2: Instalar as Bibliotecas
Abra a Arduino IDE → Sketch → Include Library → Manage Libraries e instale:
- PubSubClient de Nick O’Leary (comunicação MQTT)
- DHT sensor library da Adafruit (driver do DHT22)
- Adafruit SSD1306 (display OLED, se for usar)
Passo 3: Envie o Código
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
// --- WiFi Settings ---
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// --- MQTT Settings ---
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* temp_topic = "sensbench/home/temperature";
const char* hum_topic = "sensbench/home/humidity";
// --- Sensor Settings ---
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// --- Globals ---
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("nWiFi connected! IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
String clientId = "sensbench-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected!");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5s");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Sensor read failed!");
return;
}
char tempStr[8], humStr[8];
dtostrf(t, 4, 2, tempStr);
dtostrf(h, 4, 2, humStr);
client.publish(temp_topic, tempStr);
client.publish(hum_topic, humStr);
Serial.printf("Temp: %s°C Humidity: %s%%n", tempStr, humStr);
delay(30000);
}
Passo 4: Veja Seus Dados na Nuvem
- Abra https://www.hivemq.com/mqtt-web-client/ no seu navegador
- Clique em Connect
- Em Subscriptions, adicione o tópico:
sensbench/home/# - Assista seu ESP32 enviar dados em tempo real a cada 30 segundos
E Depois?
Agora que seus dados estão na nuvem, você pode:
- Montar um dashboard com Node-RED ou Home Assistant para visualizar os dados
- Adicionar mais sensores — BME280 para pressão do ar, umidade do solo para as plantas
- Disparar automações — “se temperatura > 30°C, ligue o ventilador”
- Ir para bateria — adicione o modo deep sleep para meses de operação