Como Montar uma Estação Meteorológica Caseira com ESP32
Passo a passo prático com DHT22, BMP280, ligação por I2C e envio dos dados pro ThingSpeak ou Home Assistant — lista de materiais, código completo e preço estimado no Brasil.
Direto ao ponto — estação meteorológica com ESP32:
- Usa ESP32 (não Arduino Uno) pelo Wi-Fi embutido, essencial pra mandar dados à internet.
- Dois sensores: DHT22 (temperatura/umidade) e BMP280 (pressão barométrica, via I2C).
- Investimento total estimado: R$ 90 a R$ 175 com placas e sensores genéricos no Brasil.
- Dados podem ir pro ThingSpeak (gratuito, mais simples) ou pro Home Assistant via ESPHome (mais integrado).
- Pra instalação externa, cuidado com proteção contra chuva e considere deep sleep se for usar bateria.
- Introdução
- Por Que ESP32 e Não Arduino Uno
- Lista de Materiais e Preço Estimado
- O Sensor DHT22: Temperatura e Umidade
- O Sensor BMP280: Pressão Barométrica e Altitude
- Entendendo o Protocolo I2C
- Esquema de Ligação Completo
- Instalando as Bibliotecas na Arduino IDE
- Código Básico: Lendo os Dois Sensores
- Enviando os Dados pro ThingSpeak
- Alternativa: Integrando com Home Assistant (ESPHome)
- Rodando a Bateria: Deep Sleep
- Protegendo a Estação da Chuva e do Sol
- Calibrando as Leituras
- Como Expandir o Projeto Depois
- Erros Comuns de Quem Está Montando
- Glossário Rápido
- Perguntas Frequentes
🌦️ Como Montar uma Estação Meteorológica Caseira com ESP32
Olá, eu sou Ronaldo Cardoso! Se você comparou ESP32 com Arduino Uno recentemente e ficou curioso pra colocar a conectividade do ESP32 em prática, este é o projeto perfeito pra começar: uma estação meteorológica caseira, capaz de medir temperatura, umidade e pressão atmosférica do seu quintal ou varanda, e enviar tudo automaticamente pra um painel na internet que você acessa do celular, de qualquer lugar. Se você ainda está em dúvida entre as duas placas, vale a leitura do nosso comparativo ESP32 vs Arduino Uno em 2026: qual escolher pro primeiro projeto antes de seguir — mas o resumo é simples: este projeto usa o ESP32 especificamente porque precisamos de Wi-Fi embutido pra mandar os dados pra internet sem comprar nenhum módulo extra, algo que o Arduino Uno sozinho não oferece.
Neste guia eu mostro a lista de materiais com preço estimado no Brasil, explico os dois sensores usados (DHT22 e BMP280), como ligar tudo pelo protocolo I2C, um código básico funcional pra testar na bancada, e duas formas de mandar os dados pra um dashboard: ThingSpeak (mais simples, gratuito, pronto em minutos) ou Home Assistant via ESPHome (mais robusto, ideal se você já tem automação residencial em casa).
📡 Por Que ESP32 e Não Arduino Uno
Fora a conectividade, o ESP32 também tem RAM e processamento de sobra pra esse tipo de tarefa: ler dois sensores por I2C, formatar os dados e mandar uma requisição HTTP pela internet não chega nem perto do limite da placa, mesmo em modelos genéricos de R$ 35-60. Se quiser reforçar o porquê de cada detalhe técnico, o comparativo completo entre ESP32, Arduino e Raspberry Pi está em Raspberry Pi vs Arduino vs ESP32.
🧾 Lista de Materiais e Preço Estimado
A boa notícia é que esse projeto é barato — o investimento total, com placas genéricas nacionais, fica geralmente abaixo de R$ 100, incluindo os dois sensores.
| Item | Preço estimado no Brasil | Observação |
|---|---|---|
| Placa ESP32 DevKit (WROOM-32) | R$ 35 a R$ 60 | Já vem com regulador de tensão e conversor USB-serial |
| Sensor DHT22 / AM2302 (temperatura e umidade) | R$ 13 a R$ 20 | Módulo pronto, já com resistor de pull-up embutido na maioria das versões |
| Sensor BMP280 (pressão barométrica) | R$ 6 a R$ 15 | Módulo em barramento I2C, geralmente vendido em placa pequena de 4 pinos |
| Protoboard média (830 pontos) | R$ 15 a R$ 25 | Facilita montar e testar antes de soldar definitivo |
| Jumpers macho-macho e macho-fêmea (kit) | R$ 10 a R$ 15 | Um kit variado já cobre esse e outros projetos futuros |
| Cabo USB (dados, não só carga) | R$ 10 a R$ 20 | Precisa ser um cabo que transmita dados, não só energia |
| Caixa plástica com furos ou abrigo (opcional) | R$ 15 a R$ 40 | Necessário só se for instalar a estação do lado de fora |
Total estimado: entre R$ 90 e R$ 175, dependendo se você já tem protoboard e jumpers de projetos anteriores (o que é comum pra quem já mexeu com automação antes, como no nosso guia de automação residencial barata com sensores e relés) e se pretende deixar a estação exposta ao tempo ou só dentro de casa.

🌡️ O Sensor DHT22: Temperatura e Umidade
O DHT22 (também vendido com o nome do seu chip interno, AM2302) é um sensor digital combinado de temperatura e umidade relativa do ar, um dos mais usados em projetos hobby por ser barato, fácil de ligar e razoavelmente preciso. Ele mede temperatura na faixa de -40°C a 80°C (precisão de aproximadamente ±0,5°C) e umidade relativa de 0% a 100% (precisão de aproximadamente ±2%), entregando os dois valores por um único fio de dados digital — sem precisar de conversor analógico-digital externo.
Existe também o irmão mais simples, o DHT11, mais barato mas com precisão bem inferior (±2°C e ±5% de umidade, faixa de medição mais estreita). Pra uma estação meteorológica que você quer confiar de verdade, o DHT22 vale o investimento a mais — a diferença de preço costuma ser de poucos reais.
NaN) que confundem muito iniciante.📈 O Sensor BMP280: Pressão Barométrica e Altitude
O BMP280, da fabricante Bosch, é um sensor de pressão barométrica e temperatura que se comunica por I2C (ou opcionalmente SPI, dependendo do módulo). Ele mede pressão atmosférica na faixa de 300 a 1100 hPa (o que cobre de aproximadamente -500 a +9000 metros de altitude em relação ao nível do mar) com precisão de cerca de ±1 hPa, e também entrega uma segunda leitura de temperatura — só que menos precisa que a do DHT22, então na prática usamos a temperatura do DHT22 como referência principal e o BMP280 majoritariamente pela pressão.
Um detalhe interessante é que, sabendo a pressão ao nível do mar da sua região (informação disponível em serviços meteorológicos oficiais), o BMP280 permite calcular a altitude aproximada do local onde ele está instalado, através de uma fórmula barométrica padrão já implementada nas bibliotecas mais usadas — não é preciso nenhum sensor de GPS pra essa estimativa.
Existe também o BME280, praticamente idêntico ao BMP280 mas com um terceiro sensor de umidade embutido no mesmo chip — custa um pouco mais caro e é uma alternativa válida se você quiser reduzir a fiação (um sensor a menos pra ligar), abrindo mão do DHT22 completamente. Neste guia seguimos com DHT22 + BMP280 separados por ser a combinação mais comum e mais barata em kits nacionais, mas a lógica de código é praticamente a mesma pra quem optar pelo BME280.

🔗 Entendendo o Protocolo I2C
I2C (lê-se "I dois C", sigla de "Inter-Integrated Circuit") é um protocolo de comunicação que permite ligar vários sensores e módulos numa mesma placa usando só dois fios: um chamado SDA (linha de dados) e outro chamado SCL (linha de clock, que sincroniza a comunicação). A grande vantagem do I2C é justamente essa: como cada dispositivo tem um endereço próprio na linha, é possível ligar vários sensores diferentes nos mesmos dois pinos da placa, sem precisar de um par de fios exclusivo pra cada um.
No ESP32, os pinos padrão de I2C usados pela biblioteca Wire.h são o GPIO 21 (SDA) e o GPIO 22 (SCL) — embora, diferente do Arduino Uno, o ESP32 permita remapear esses pinos por software pra praticamente qualquer GPIO disponível, caso os padrão já estejam ocupados por outra coisa no seu projeto. O BMP280 se comunica via I2C nativamente; o DHT22, por outro lado, não usa I2C — ele tem um protocolo digital próprio, mais simples, de um fio só, então precisa de um pino digital separado (qualquer GPIO livre serve).
🔌 Esquema de Ligação Completo
| Componente | Pino do componente | Pino do ESP32 |
|---|---|---|
| BMP280 | VCC | 3.3V |
| GND | GND | |
| SDA | GPIO 21 | |
| SCL | GPIO 22 | |
| DHT22 | VCC | 3.3V (ou 5V, conforme o módulo) |
| DATA | GPIO 4 | |
| GND | GND |
Se o seu módulo DHT22 for o componente "pelado" (sem placa própria, só o sensor com 4 pinos), você vai precisar de um resistor de pull-up de 10kΩ entre o pino de dados e o VCC — a maioria dos módulos prontos vendidos hoje (com 3 pinos: VCC, DATA, GND) já vem com esse resistor embutido na placinha, então essa etapa só é necessária em componentes avulsos comprados sem módulo.
📚 Instalando as Bibliotecas na Arduino IDE
Com a Arduino IDE instalada e o pacote de placas do ESP32 já configurado (veja o passo a passo no nosso comparativo ESP32 vs Arduino Uno se ainda não fez isso), instale as seguintes bibliotecas pelo Gerenciador de Bibliotecas (Sketch → Incluir Biblioteca → Gerenciar Bibliotecas):
- DHT sensor library (da Adafruit) — leitura do DHT22/DHT11.
- Adafruit Unified Sensor — biblioteca base exigida pela anterior.
- Adafruit BMP280 Library — leitura do sensor de pressão via I2C.
- Wire — já vem embutida na Arduino IDE, cuida da comunicação I2C nos bastidores.
Se você optar por enviar os dados pro ThingSpeak (próxima seção), instale também a biblioteca ThingSpeak (da MathWorks), disponível no mesmo Gerenciador de Bibliotecas.
💻 Código Básico: Lendo os Dois Sensores
Este exemplo lê os dois sensores e imprime os valores no Monitor Serial — o primeiro passo antes de conectar qualquer coisa à internet, pra confirmar que a fiação e os sensores estão funcionando:
#include <Wire.h>
#include <DHT.h>
#include <Adafruit_BMP280.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP280 bmp;
void setup() {
Serial.begin(115200);
dht.begin();
if (!bmp.begin(0x76)) {
Serial.println("Nao foi possivel encontrar o BMP280. Verifique a fiacao!");
while (1) delay(10);
}
}
void loop() {
float temperatura = dht.readTemperature();
float umidade = dht.readHumidity();
float pressao = bmp.readPressure() / 100.0F; // Pa para hPa
if (isnan(temperatura) || isnan(umidade)) {
Serial.println("Falha ao ler o DHT22!");
} else {
Serial.print("Temperatura: "); Serial.print(temperatura); Serial.println(" C");
Serial.print("Umidade: "); Serial.print(umidade); Serial.println(" %");
Serial.print("Pressao: "); Serial.print(pressao); Serial.println(" hPa");
}
delay(5000); // respeita o tempo de resposta do DHT22 com folga
}
Repare no endereço 0x76 passado pro bmp.begin() — esse é o endereço I2C mais comum do BMP280, mas alguns módulos vêm configurados de fábrica no endereço 0x77. Se o código travar na mensagem de erro do BMP280, o primeiro passo é tentar trocar para 0x77 antes de suspeitar de fiação.
☁️ Enviando os Dados pro ThingSpeak
O ThingSpeak é uma plataforma gratuita (da MathWorks, mesma empresa do MATLAB) feita justamente pra esse tipo de projeto: você cria uma conta gratuita, cria um "canal" com até 8 campos numéricos, e cada campo vira automaticamente um gráfico ao longo do tempo — sem precisar montar nada visual do zero. É a forma mais rápida de ver os dados da sua estação meteorológica funcionando de verdade.
- Crie uma conta gratuita em thingspeak.com e crie um novo canal.
- Nomeie os campos: Field 1 = Temperatura, Field 2 = Umidade, Field 3 = Pressão.
- Copie a Write API Key do canal, na aba "API Keys" — ela autentica cada envio de dado.
- No código, conecte o ESP32 na sua rede Wi-Fi com
WiFi.begin(ssid, senha)e use a biblioteca ThingSpeak para enviar os valores.
#include <WiFi.h>
#include <ThingSpeak.h>
const char* ssid = "NOME_DA_SUA_REDE";
const char* senha = "SENHA_DA_SUA_REDE";
unsigned long meuCanal = 0; // numero do seu canal
const char* minhaChaveEscrita = "SUA_WRITE_API_KEY";
WiFiClient client;
void setup() {
// ... codigo de leitura dos sensores da secao anterior ...
WiFi.begin(ssid, senha);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
ThingSpeak.begin(client);
}
void loop() {
// ... leitura de temperatura, umidade e pressao ...
ThingSpeak.setField(1, temperatura);
ThingSpeak.setField(2, umidade);
ThingSpeak.setField(3, pressao);
int status = ThingSpeak.writeFields(meuCanal, minhaChaveEscrita);
if (status == 200) {
Serial.println("Dados enviados com sucesso!");
} else {
Serial.println("Erro ao enviar. Codigo: " + String(status));
}
delay(60000); // ThingSpeak gratuito limita a 1 envio a cada 15s no minimo; 1 minuto e um intervalo seguro e razoavel pra clima
}
Com isso rodando, o gráfico do seu canal ThingSpeak começa a se preencher automaticamente, e você pode acompanhar pelo navegador do celular ou computador, de qualquer lugar com internet — inclusive compartilhar o link público do canal com outras pessoas, se quiser.
🏠 Alternativa: Integrando com Home Assistant (ESPHome)
Se você já usa Home Assistant pra automatizar sua casa, existe um caminho mais integrado do que o ThingSpeak: o ESPHome, um firmware alternativo que substitui a programação manual em C++ por um arquivo de configuração no formato YAML, e conecta o ESP32 direto no seu Home Assistant local, sem depender de nenhum serviço externo na internet. Um exemplo simplificado de configuração pros nossos dois sensores:
esphome:
name: estacao-meteorologica
esp32:
board: esp32dev
wifi:
ssid: "NOME_DA_SUA_REDE"
password: "SENHA_DA_SUA_REDE"
i2c:
sda: 21
scl: 22
sensor:
- platform: dht
pin: GPIO4
model: DHT22
temperature:
name: "Temperatura Externa"
humidity:
name: "Umidade Externa"
update_interval: 60s
- platform: bmp280
temperature:
name: "Temperatura BMP280"
pressure:
name: "Pressao Atmosferica"
address: 0x76
update_interval: 60s
Depois de gravado, o Home Assistant descobre a estação automaticamente na rede e os três valores (temperatura, umidade, pressão) aparecem como entidades prontas pra usar em automações, gráficos e no seu painel — por exemplo, disparar um alerta se a umidade cair abaixo de um valor, ou acender uma luz de aviso se a pressão despencar (sinal comum de chuva se aproximando). Se você já tem sensores de presença ou outros dispositivos conectados em casa, vale revisar também nosso guia sobre Matter e Zigbee em casa inteligente pra entender como esse tipo de dispositivo conversa com os demais.
🔋 Rodando a Bateria: Deep Sleep
Se a sua estação vai ficar ligada direto na tomada (num carregador USB comum, por exemplo), não existe nenhuma preocupação extra de energia. Mas se você quer instalar a estação num lugar sem tomada por perto, alimentada por uma bateria ou por um pequeno painel solar, o consumo do Wi-Fi entra na conta — mantendo o rádio ligado o tempo todo, uma bateria comum de PowerBank pode não durar nem um dia inteiro.
A solução mais usada nesse cenário é o deep sleep do ESP32: a placa liga, conecta na rede, faz a leitura dos sensores, envia o dado, e entra num modo de sono profundo por um período configurado (por exemplo, a cada 10 ou 15 minutos), consumindo uma fração mínima de energia enquanto "dorme". Isso pode esticar a duração de uma bateria pequena de dias pra semanas, dependendo do tamanho da bateria e da frequência escolhida entre uma leitura e outra — pra uma estação meteorológica, ler a cada 10-15 minutos já é mais que suficiente, já que o clima não muda de segundo a segundo.
🏠 Protegendo a Estação da Chuva e do Sol
Uma solução caseira comum e barata é usar uma pequena caixa plástica branca com furos ou aberturas laterais (nunca fechada por completo, senão o ar quente parado dentro da caixa distorce a leitura), posicionada num local sombreado, longe de fontes de calor artificial (como perto de uma parede que pega sol direto o dia todo) — o próprio abrigo meteorológico oficial usado por estações profissionais segue essa mesma lógica de ventilação protegida, só que numa escala maior e mais sofisticada.
🎯 Calibrando as Leituras
Depois de montado, vale comparar as primeiras leituras da sua estação com uma fonte confiável — o aplicativo de previsão do tempo do seu celular, ou uma estação meteorológica oficial da sua cidade. É normal haver uma pequena diferença de temperatura (1-2°C) se o seu sensor estiver perto de uma parede ou de um aparelho que gera calor, e pequenas diferenças de pressão são esperadas dependendo da altitude exata de instalação. Se a diferença for grande e consistente, a maioria das bibliotecas (incluindo a Adafruit BMP280) permite aplicar um offset de calibração simples somando ou subtraindo um valor fixo do resultado bruto lido pelo sensor, até a leitura bater com a referência confiável.
🚀 Como Expandir o Projeto Depois
- Sensor de chuva (pluviômetro) ou de luminosidade (LDR/BH1750): soma facilmente pela mesma linha I2C ou por um pino digital extra livre.
- Anemômetro caseiro (velocidade do vento): projeto mais avançado, geralmente feito com um sensor de efeito Hall e um pequeno cata-vento impresso em 3D.
- Tela OLED local: mostra os valores direto no local da estação, sem precisar abrir o celular — útil se a estação ficar em algum ponto de fácil acesso visual, como uma varanda.
- Alerta automático: configurar um aviso (push, e-mail, ou automação no Home Assistant) quando algum valor sair de uma faixa esperada, como pressão caindo rápido (sinal de tempestade se aproximando) ou umidade extremamente baixa.
Se você curtiu a lógica de sensores e automação deste projeto, vale conferir também o guia de irrigação automática caseira com Arduino, que usa um raciocínio parecido de leitura de sensor e ação automática, só que aplicado a um sistema de rega.

⚠️ Erros Comuns de Quem Está Montando
2. Endereço I2C errado no código (0x76 vs 0x77) — se o BMP280 não for encontrado, essa é a primeira coisa a checar antes de suspeitar de fiação com defeito.
3. Ler o DHT22 com muita frequência (menos de 2 segundos entre leituras) — causa leituras zeradas ou travadas (
NaN) no código.4. Deixar a estação em local sem ventilação (caixa totalmente fechada, colada numa parede que esquenta ao sol) — distorce a leitura de temperatura pra valores mais altos que o real.
5. Esquecer de trocar SSID e senha de exemplo no código antes de gravar — o ESP32 fica preso tentando conectar numa rede que não existe, sem nenhum erro claro no Monitor Serial além de "conectando" infinito.
6. Usar fio jumper solto demais numa instalação externa — vibração de vento e chuva ao longo de semanas pode soltar conexões que pareciam firmes na bancada; solda ou conector travado é mais confiável pra instalação permanente do lado de fora.
📖 Glossário Rápido
- I2C: protocolo de comunicação que usa dois fios (SDA e SCL) para conectar vários sensores e módulos a uma mesma placa, cada um identificado por um endereço próprio.
- hPa (hectopascal): unidade de medida de pressão atmosférica; a pressão média ao nível do mar gira em torno de 1013 hPa.
- Deep sleep: modo de economia de energia do ESP32 que desliga a maior parte dos componentes internos entre leituras, essencial em projetos alimentados por bateria.
- ESPHome: firmware alternativo que permite configurar um ESP32 por arquivo YAML, integrando automaticamente com o Home Assistant sem escrever código C++.
- Endpoint / API Key: respectivamente, o "endereço" de um serviço na internet que recebe dados, e a chave que autentica quem está enviando (no caso do ThingSpeak, a Write API Key).
- Offset de calibração: valor fixo somado ou subtraído da leitura bruta de um sensor para corrigir um pequeno desvio conhecido em relação a uma referência confiável.
- Pull-up (resistor): resistor que mantém uma linha de sinal em nível alto por padrão, usado em componentes digitais simples como o DHT22.
FAQ
Preciso saber programar para montar essa estação?
Um conhecimento básico de C/C++ ajuda bastante, mas o código deste guia é bem direto e comentado. Se você nunca programou nada, vale começar por exemplos ainda mais simples do ESP32 antes de partir direto pra esse projeto com dois sensores e envio de dados.
Dá pra usar o BME280 em vez do DHT22 + BMP280?
Sim, o BME280 já combina temperatura, umidade e pressão num único chip, reduzindo a fiação. A lógica de código é parecida, só muda a biblioteca usada e o sensor de umidade deixa de ser separado.
O ThingSpeak é realmente gratuito?
Sim, a conta gratuita permite canais com até 8 campos e um volume de requisições mais que suficiente para uma estação doméstica enviando dados a cada 1-15 minutos.
Posso usar Arduino Uno nesse projeto em vez do ESP32?
Tecnicamente sim, mas você precisaria adicionar um módulo Wi-Fi separado (como um ESP8266) para conseguir mandar os dados pra internet, já que o Uno não tem conectividade sem fio nativa — é um passo extra de custo e complexidade que o ESP32 evita.
Qual a diferença entre DHT22 e DHT11?
O DHT22 tem faixa de medição maior e precisão bem melhor (±0,5°C contra ±2°C de temperatura) que o DHT11, por um custo só um pouco mais alto — geralmente vale a pena optar pelo DHT22.
A estação funciona sem Wi-Fi em casa?
A leitura dos sensores funciona normalmente sem rede, mas o envio automático pra ThingSpeak ou Home Assistant depende de uma conexão Wi-Fi disponível no local da instalação.
Quanto tempo uma bateria dura alimentando a estação?
Sem otimização, com Wi-Fi sempre ativo, pode durar menos de um dia. Usando deep sleep entre leituras (por exemplo, a cada 10-15 minutos), uma bateria pequena pode durar dias ou até semanas, dependendo da capacidade.
Preciso calibrar os sensores antes de confiar nos dados?
Recomendado, sim. Compare as primeiras leituras com uma fonte confiável (app de previsão do tempo, estação oficial da região) e ajuste um pequeno offset no código se notar uma diferença consistente.
🎮 Que tal testar o que você aprendeu?
Assim que você escolher uma resposta, ela trava — só reabrindo a página pra tentar de novo.
1. Por que este projeto usa ESP32 em vez de Arduino Uno?
2. Qual protocolo o BMP280 usa para se comunicar com o ESP32?
3. Qual tensão é segura para ligar o BMP280 no ESP32?
4. O que o DHT22 mede?
5. Para que serve o "deep sleep" no ESP32?
Esse conteúdo ajudou você?
Compartilha com alguém que também vai curtir — é rapidinho e ajuda muito o nosso trabalho a chegar em mais gente.
Conhecimento só tem valor quando compartilhado.
Manter essa estrutura de laboratórios funcionando e produzir conteúdos de engenharia de forma totalmente gratuita e acessível exige tempo e dedicação diária à bancada. Esse guia salvou os seus arquivos? Você pode contribuir diretamente para manter o nosso trabalho independente forte. Apoie doando qualquer valor!
Quer apoiar a nossa bancada independente?
[email protected]