ESP32 conectado a sensores BME280 e BMP280 em protoboard para estacao meteorologica

Sensor BME280 ou BMP280 com ESP32: qual escolher?

Escolha o BME280 se você precisa medir temperatura, pressão atmosférica e umidade do ar com o ESP32. Escolha o BMP280 quando temperatura e pressão são suficientes. Os dois sensores usam comunicação I2C ou SPI, são compactos e funcionam muito bem em estações meteorológicas, projetos IoT e monitoramento ambiental.

A diferença decisiva é simples: o BME280 possui sensor de umidade; o BMP280 não. Neste guia, você verá como identificar cada módulo, fazer a ligação I2C, testar o endereço e usar um código funcional no ESP32.

BME280 e BMP280: qual é a diferença?

Os dois componentes foram desenvolvidos para medir pressão atmosférica e temperatura. O BME280 acrescenta a medição de umidade relativa, por isso costuma ser a opção mais completa para uma estação meteorológica com ESP32.

Característica BME280 BMP280
Temperatura Sim Sim
Pressão atmosférica Sim Sim
Umidade do ar Sim Não
Altitude estimada Sim, calculada pela pressão Sim, calculada pela pressão
Comunicação I2C ou SPI I2C ou SPI
Melhor aplicação Estação meteorológica completa Barômetro e altímetro

Resposta rápida: para medir as três variáveis ambientais em um único módulo, use BME280. Para economizar em um projeto que já possui outro sensor de umidade, o BMP280 pode ser suficiente.

Como saber se o módulo é BME280 ou BMP280?

Não confie apenas na cor da placa ou no anúncio do módulo, pois diferentes fabricantes usam placas muito parecidas. Confira a identificação impressa no sensor, a descrição do fornecedor e, depois da montagem, teste a leitura de umidade pela biblioteca correta.

  • Se o código retorna temperatura, pressão e umidade, o módulo é compatível com BME280.
  • Se a inicialização da biblioteca BME280 falha, teste a biblioteca BMP280 e os endereços I2C.
  • O endereço mais comum é 0x76, mas alguns módulos usam 0x77.
  • A aparência externa não é uma prova confiável do modelo.

Ligação do BME280 ou BMP280 no ESP32 por I2C

A comunicação I2C utiliza apenas duas linhas de sinal. Na maioria das placas ESP32, os pinos padrão são GPIO 21 para SDA e GPIO 22 para SCL. Alguns módulos possuem regulador de tensão, mas o caminho mais seguro para o ESP32 é alimentar o sensor em 3,3 V.

BME280/BMP280 ESP32 Função
VCC ou VIN 3V3 Alimentação
GND GND Referência elétrica
SDA GPIO 21 Dados I2C
SCL GPIO 22 Clock I2C

Monte primeiro em uma protoboard e use jumpers curtos. Isso facilita encontrar mau contato antes de instalar o circuito em uma caixa.

Como descobrir o endereço I2C do sensor

Se o ESP32 não encontrar o BME280 ou BMP280, execute um scanner I2C. Ele verifica os endereços conectados e mostra o resultado no Monitor Serial.

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);

  for (byte endereco = 1; endereco < 127; endereco++) {
    Wire.beginTransmission(endereco);
    if (Wire.endTransmission() == 0) {
      Serial.print("Dispositivo I2C encontrado em 0x");
      if (endereco < 16) Serial.print("0");
      Serial.println(endereco, HEX);
    }
  }
}

void loop() {}

O resultado normalmente será 0x76 ou 0x77. Use esse valor na inicialização da biblioteca.

Biblioteca para usar BME280 com ESP32

Na Arduino IDE, abra o Gerenciador de Bibliotecas e instale Adafruit BME280 Library. A dependência Adafruit Unified Sensor também pode ser solicitada. Para o BMP280, instale Adafruit BMP280 Library.

O exemplo abaixo usa BME280 porque ele reúne temperatura, pressão e umidade, as três leituras mais procuradas para uma estação meteorológica.

Código do BME280 com ESP32

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);

  if (!bme.begin(0x76)) {
    Serial.println("BME280 nao encontrado. Teste 0x77.");
    while (true) delay(10);
  }
}

void loop() {
  float temperatura = bme.readTemperature();
  float umidade = bme.readHumidity();
  float pressao = bme.readPressure() / 100.0F;

  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");

  Serial.println();
  delay(2000);
}

Se o scanner encontrou 0x77, troque bme.begin(0x76) por bme.begin(0x77). Evite fazer leituras em intervalos muito curtos quando o objetivo for monitorar o ambiente; um intervalo de alguns segundos costuma ser suficiente.

Como usar BMP280 com ESP32

A ligação elétrica do BMP280 por I2C é a mesma. No código, substitua a biblioteca e o objeto BME280 pelas versões BMP280. Como esse sensor não mede umidade, remova a chamada readHumidity().

#include <Wire.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp;

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);

  if (!bmp.begin(0x76)) {
    Serial.println("BMP280 nao encontrado");
    while (true) delay(10);
  }
}

void loop() {
  Serial.print("Temperatura: " );
  Serial.print(bmp.readTemperature());
  Serial.println(" C");

  Serial.print("Pressao: " );
  Serial.print(bmp.readPressure() / 100.0F);
  Serial.println(" hPa");
  delay(2000);
}

Como calcular altitude com BME280 ou BMP280

A altitude não é medida diretamente. Ela é estimada pela diferença entre a pressão local e uma pressão de referência ao nível do mar. Por isso, o resultado muda com o clima e precisa ser calibrado para uso mais preciso.

float altitude = bme.readAltitude(1013.25);

O valor 1013.25 hPa é uma referência padrão, não necessariamente a pressão atual da sua região. Para melhorar a estimativa, use a pressão ao nível do mar informada por uma estação meteorológica próxima.

Qual sensor usar em uma estação meteorológica?

O BME280 é a escolha mais direta quando o projeto precisa de temperatura, pressão e umidade. Para acrescentar luminosidade, combine-o com um LDR ou sensor de luz. O ESP32 pode organizar as leituras e enviá-las por Wi-Fi para um painel IoT.

Veja o guia como montar uma estação meteorológica com ESP32 para entender a arquitetura completa. Para começar com os componentes reunidos, conheça o Kit Estação Meteorológica com ESP32 da Comecx Labs.

Erros comuns e como resolver

  • Sensor não encontrado: rode o scanner I2C e teste 0x76 e 0x77.
  • Leitura de umidade não aparece: confirme se o sensor é BME280; o BMP280 não mede umidade.
  • Valores instáveis: confira alimentação, GND comum, jumpers e mau contato.
  • Temperatura acima do ambiente: afaste o sensor do regulador da placa e de fontes de calor.
  • Pressão parece incorreta: confirme se o valor foi convertido de pascal para hectopascal dividindo por 100.
  • ESP32 reinicia: verifique cabo USB, fonte e curto-circuito na protoboard.

Boas práticas para leituras confiáveis

Instale o sensor em local ventilado e protegido do sol direto e da água. Não coloque o BME280 dentro de uma caixa totalmente fechada, pois isso atrasa a resposta de umidade e temperatura. Para acompanhar tendências, registre médias e histórico em vez de depender de uma única leitura.

Perguntas frequentes

Qual é melhor, BME280 ou BMP280?
O BME280 é mais completo porque mede temperatura, pressão e umidade. O BMP280 é indicado quando apenas temperatura e pressão são necessárias.
BME280 e BMP280 funcionam com ESP32?
Sim. Ambos podem se comunicar com o ESP32 por I2C ou SPI e são normalmente alimentados em 3,3 V.
Qual é o endereço I2C do BME280 e do BMP280?
O endereço costuma ser 0x76 ou 0x77, conforme o módulo. Um scanner I2C identifica o endereço usado na montagem.
O BMP280 mede umidade do ar?
Não. O BMP280 mede temperatura e pressão atmosférica. Para medir também a umidade, use o BME280 ou acrescente outro sensor.

Quer transformar essas leituras em uma estação meteorológica completa?

Ver Kit Estação Meteorológica com ESP32

Voltar para o blog