
En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables. Si compras desde estos enlaces, el precio para ti es el mismo y Amazon me paga una pequeña comisión que ayuda a mantener Tecnoyfoto.
Actualizado el 2 de agosto de 2026.
El BMP280 con ESP32 y ESPHome es un proyecto sencillo para medir presión atmosférica y la temperatura interna del sensor desde Home Assistant. En esta guía conectaremos el módulo mediante I²C, utilizaremos la plataforma actual bmp280_i2c y veremos cómo diagnosticar las direcciones 0x76 y 0x77.
Importante: el BMP280 no mide humedad. Además, su temperatura depende del circuito, del autocalentamiento y del ambiente, por lo que normalmente queda por encima de la temperatura real del aire. Su medición principal es la presión.
Qué mide realmente el BMP280
El BMP280 de Bosch es un sensor barométrico digital que comunica sus datos mediante I²C o SPI. Su rango operativo de presión es de 300 a 1100 hPa y el chip puede funcionar entre −40 y 85 °C, aunque el intervalo de máxima precisión es más limitado. La alimentación del chip es de 1,71 a 3,6 V y su interfaz admite de 1,2 a 3,6 V.
Estas cifras corresponden al chip, no necesariamente al módulo azul que compramos. Algunos módulos incorporan regulador, pero no todos incluyen adaptación de nivel para SDA y SCL. Por seguridad, en este proyecto alimentaremos el módulo desde 3,3 V. Puedes consultar la ficha técnica oficial del BMP280.
BMP280, BME280 o BMP180
| Sensor | Mediciones | Interfaces | Uso recomendado |
|---|---|---|---|
| BMP180 | Presión y temperatura interna | I²C | Proyectos existentes; es una generación anterior |
| BMP280 | Presión y temperatura interna | I²C y SPI | Barómetro económico y compacto |
| BME280 | Presión, temperatura y humedad | I²C y SPI | Monitorización ambiental más completa |
Si necesitas humedad relativa, elige el BME280 y consulta la guía completa del BME280. Algunos vendedores confunden ambos modelos, así que verifica la referencia del componente y no deduzcas el modelo únicamente por el color del circuito impreso.
Material necesario
- Una placa ESP32 clásica, como un ESP32-WROOM-32 o ESP32 DevKit.
- Un módulo BMP280Enlace de afiliado.
- Cables DupontEnlace de afiliado. También puedes fabricar tus propios cables.
- Un cable USBEnlace de afiliado adecuado para tu placa ESP32.
Algunos enlaces de compra son de afiliado. El precio para ti no cambia y ayudan a mantener el contenido.
Cableado I²C del BMP280 con ESP32
Este cableado corresponde a un ESP32 clásico. En las familias ESP32-C3, C6, S2 o S3 debes consultar el pinout de tu placa y escoger pines I²C disponibles. ESPHome permite definir SDA y SCL explícitamente.
| BMP280 | ESP32 clásico | Función |
|---|---|---|
| VCC o VIN | 3V3 | Alimentación segura a 3,3 V |
| GND | GND | Masa común |
| SCL o SCK | GPIO22 | Reloj I²C |
| SDA o SDI | GPIO21 | Datos I²C |
En módulos de seis pines, CSB debe permanecer en nivel alto para usar I²C; normalmente el propio módulo incorpora la resistencia necesaria. El pin SDO selecciona la dirección: habitualmente GND produce 0x76 y 3,3 V produce 0x77. Revisa siempre el esquema del fabricante de tu placa.
Si utilizas una fuente externa de 3,3 V, conecta también su GND al GND del ESP32. Sin una masa común, la comunicación I²C no será fiable. Para conocer mejor este bus, consulta la introducción a I²C.
Código ESPHome completo y actualizado
Crea un dispositivo nuevo desde ESPHome y adapta el nombre de la placa si el asistente ha seleccionado otro modelo. Las credenciales y claves deben estar definidas en secrets.yaml; no las escribas directamente en un archivo que vayas a compartir.
substitutions:
device_name: bmp280-esp32
friendly_name: BMP280 ESP32
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "BMP280 - recuperación"
password: !secret fallback_password
captive_portal:
i2c:
id: bus_bmp280
sda: GPIO21
scl: GPIO22
scan: true
sensor:
- platform: bmp280_i2c
i2c_id: bus_bmp280
address: 0x76
temperature:
name: "Temperatura BMP280"
id: bmp280_temperature
oversampling: 2x
pressure:
name: "Presión BMP280"
id: bmp280_pressure
oversampling: 16x
iir_filter: 4x
update_interval: 60sLa plataforma correcta para este montaje es bmp280_i2c. Si conectas el sensor mediante SPI, ESPHome utiliza bmp280_spi y necesita que indiques cs_pin. La documentación actual del BMP280 en ESPHome contiene ambas variantes.
Error: no se encuentra un sensor BMP280 válido
- Lee el escáner I²C: con
scan: true, el registro de ESPHome mostrará las direcciones detectadas. - Prueba 0x76 y 0x77: cambia
addresspara que coincida con el resultado del escáner. - Revisa SDA y SCL: comprueba el nombre impreso en el módulo; algunos utilizan SCK y SDI.
- Comprueba 3,3 V y GND: mide la alimentación y verifica que todas las masas estén unidas.
- Confirma el modelo: un BME280 necesita
bme280_i2c; no funcionará como BMP280 solo por cambiar la dirección. - Inspecciona las soldaduras: muchos fallos de módulos económicos proceden de pines mal soldados o cables defectuosos.
Temperatura interna y calibración
Bosch especifica aproximadamente ±0,5 °C a 25 °C y ±1 °C entre 0 y 65 °C, pero también advierte que el resultado depende de la temperatura de la PCB y del autocalentamiento. Coloca el módulo separado del regulador del ESP32, evita cajas cerradas calientes y deja circular el aire.
Un filtro offset puede corregir una desviación estable después de comparar el sensor con un termómetro fiable colocado en el mismo punto. No copies un valor ajeno: el desplazamiento cambia según la placa, la caja, el consumo y la ventilación.
temperature:
name: "Temperatura BMP280"
id: bmp280_temperature
oversampling: 2x
filters:
- offset: -0.8 # Sustituye por tu calibración realPresión absoluta y presión a nivel del mar
El BMP280 publica la presión absoluta del lugar donde está instalado. Una aplicación meteorológica suele mostrar presión equivalente al nivel del mar, por lo que ambas cifras serán diferentes si vives a cierta altitud. No corrijas esa diferencia con un desplazamiento fijo.
Si conoces con precisión la altitud fija del sensor, puedes añadir este bloque bajo sensor:. Sustituye 120.0 por los metros reales sobre el nivel del mar:
- platform: template
name: "Presión equivalente al nivel del mar"
unit_of_measurement: "hPa"
device_class: atmospheric_pressure
state_class: measurement
accuracy_decimals: 1
update_interval: 60s
lambda: |-
const float altitude = 120.0; // Altitud fija en metros
if (isnan(id(bmp280_temperature).state) ||
isnan(id(bmp280_pressure).state)) {
return NAN;
}
return id(bmp280_pressure).state /
powf(1.0f - ((0.0065f * altitude) /
(id(bmp280_temperature).state +
(0.0065f * altitude) + 273.15f)), 5.257f);Calcular una altitud aproximada
También puedes estimar altitud si conoces la presión actual a nivel del mar. Ese valor cambia con el tiempo y debe actualizarse con una estación meteorológica cercana; utilizar siempre 1013,25 hPa puede producir errores considerables.
- platform: template
name: "Altitud estimada BMP280"
unit_of_measurement: "m"
device_class: distance
state_class: measurement
accuracy_decimals: 1
update_interval: 60s
lambda: |-
const float sea_level_pressure = 1013.25;
if (isnan(id(bmp280_temperature).state) ||
isnan(id(bmp280_pressure).state)) {
return NAN;
}
return ((id(bmp280_temperature).state + 273.15f) /
0.0065f) *
(powf(sea_level_pressure /
id(bmp280_pressure).state, 0.190234f) - 1.0f);Elige el cálculo adecuado: para obtener presión equivalente necesitas conocer la altitud; para estimar altitud necesitas una presión de referencia actual. No puedes obtener ambas referencias desconocidas únicamente con el BMP280.
Consumo y proyectos con batería
El BMP280 consume muy poco, pero un ESP32 conectado permanentemente a Wi-Fi consume mucho más que el sensor. Para un nodo alimentado por batería necesitarás diseñar intervalos de lectura más largos, utilizar deep_sleep y calcular la autonomía teniendo en cuenta el regulador, la batería y la calidad de la cobertura inalámbrica.
Conclusión
El BMP280 continúa siendo una buena opción para medir presión con un ESP32. La clave está en alimentarlo a un nivel seguro, confirmar la dirección I²C y utilizar bmp280_i2c. En Home Assistant tendrás una presión absoluta fiable y, si aportas una referencia externa correcta, también podrás calcular presión a nivel del mar o una altitud aproximada.
Para continuar con otros sensores, consulta el DS18B20 con ESPHome, el HC-SR04 con ESP8266 o el sensor de lluvia MH-RD.
Sígueme en YouTube

Continúa leyendo
Siguiente guía relacionada · 7 min de lectura
DS18B20 con ESP8266 y ESPHome: guía One-Wire actualizada
Actualizado el 2 de agosto de 2026. El DS18B20 con ESP8266 y ESPHome es una combinación sencilla y fiable para medir temperatura en Home…
Continuar con este artículo

