Sensor BME280 ou BMP280 com ESP32: qual escolher?
Share
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 usam0x77. - 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?