Conectar un sensor BME280 a ESPEasy

En este tutorial vamos a ver, paso a paso, como podemos añadir un sensor de temperatura, humedad y presión atmosférica, BME280, a nuestro proyecto ESP8266 con NodeMCU o Wemos D1 Mini y ESPEasy.

Se trata de un proyecto muy sencillo, ideal para iniciarse, pero que ha sido muy solicitado por los lectores habituales del blog, por lo que aquí te lo dejo, esperando que sea útil también para ti.

Hay muchos sensores de temperatura, bastantes de humedad, algunos de presión atmosférica y menos que combinen los tres y que además lo hagan con cierta calidad en sus medidas. El BME280 es un ejemplo de este último tipo.

Teniendo en cuenta lo que ofrece, y lo bien que lo hace, el BME280 es un sensor muy económico y altamente recomendable cuando queremos obtener estas tres medidas ambientales.

En qué consiste el proyecto

Se trata de un proyecto que nos permite obtener medidas, con una precisión bastante elevada, de temperatura ambiental, humedad relativa, y presión atmosférica y visualizarlas en una página web, hacer gráficos, enviarlas a cualquier sistema mediante MQTT, HTTP y otros.

El proyecto está compuesto de solo dos componentes:

  • Un sensor BME280, fabricado por Bosch.
  • Una placa ESP8266 como puede ser NodeMCU, Wemos D1 Mini o cualquier otra

En el lado del firmware, utilizaremos ESP Easy, que nos permitirá hacer un sinfín de cosas sin necesidad de programar.

Una de las ventajas de ESP Easy (y mi favorita, sin duda), es que nos permite conectar a nuestro proyecto muchos accesorios diferentes sin tener que programar ni complicarnos la vida con modificaciones o adaptaciones de firmware.

El sensor BME280

El sensor BME280, tal y como lo vamos a utilizar nosotros, se presenta en una minúscula plaquita de circuito impreso de menos de un centímetro cuadrado.

Este sensor nos permite la medida de temperatura, en un rango de -40 a + 85 °C con una precisión de ±1 °C y resolución 0,01 °C

Su rango como barómetro es de 300hPa a 1110 hPa, equivalente a una altitud de -500m a 9000m sobre el nivel del mar (también lo puedes utilizar como altímetro). Con una precisión absoluta de ±1.0C y de 1.0 hPa, y la presión relativa de 0.12 hPa, equivalente a una precisión de aproximadamente ±1m.

Como higrómetro, el BME280 tiene un rango de medición de humedad relativa de 0 a 100%, con una precisión de ±3% Pa y una resolución de 0.008%.

El bajísimo consumo del sensor, de solo 3.6 µA para mediciones a 1Hz (una vez por segundo) hace que el sensor pueda funcionar durante años y años con una pila o batería por pequeña que sea. En el modo deep sleep solamente consume 0.1 µA, por lo que podría estar alimentado decenas de años de una sola pila de botón.

El módulo puede comunicarse a través de I2C (hasta 3,4 MHz) o SPI (hasta 10 MHz), por lo que es muy sencillo conectarlo a un microprocesador como el ESP8266, ESP32, Arduino y otros.

En nuestro caso vamos a comunicarnos con él mediante I2C, que tiene como ventaja adicional el utilizar solamente dos pines del ESP8266 (que además podemos utilizar a la vez para comunicarnos con otros dispositivos I2C, todos conectados en paralelo), dejando libre muchos pines del ESP8266 para otros usos.

El voltaje de alimentación del sensor es de 1.8 a 3.6V, pero está disponible tanto en módulos de 3.3V como en módulos de 5V, como el que vamos a utilizar en este tutorial, que ya incorporan la adaptación de nivel necesaria. Podrías utilizar uno de 3.3V simplemente conectando la alimentación al pin 3V3 del NodeMCU o Wemos D1 Mini.

Existe un sensor idéntico físicamente, llamado BMP280, que no incluye medida de presión atmosférica a cambio de ser más barato.

Estas son las características principales del sensor BME280:

ParámetroDatos técnicos
Rango de operaciónPresión: 300…1100 hPa
Temperatura: -40…85°C
Voltaje de alimentación VDDIO
Voltaje de alimentación VDD
1.2 … 3.6 V
1.71 … 3.6 V
InterfaceI²C and SPI
Consumo medio de corriente (typ.) (refresco de datos de 1Hz)1.8 μA @ 1 Hz (H, T)
2.8 μA @ 1 Hz (P, T)
3.6 μA @ 1 Hz (H, P, T)
T = temperatura
Consumo medio de corriente en sleep mode0.1 μA
Sensor de Humedad
Tiempo de respuesta (τ63%)
Precisión
Hysteresis

1 s
±3% humedad relativa
≤2% humedad relativa
Sensor de Presión
Ruido RMS
Error de sensibilidad

Offset de coeficiente de temperatura

0.2Pa (equiv. to 1.7cm)
±0.25% (equiv. to 1m at 400m cambio altitud)

±1.5Pa/K (equiv. a ±12.6cm a 1 °C cambio de temperatura)
RoHS compliant, halogen-free, MSL1
Dimensiones del sensor8-Pin LGA con metal
2.5 x 2.5 x 0.93 mm³
Datos técnicos del BME280

Conexión del BME280 al NodeMCU

La conexión no puede ser más fácil. Tenemos que hacer cuatro conexiones. Dos para la alimentación y dos para los datos.

Solamente tenemos que conectar:

  • VDD de BME280 a Vin de NodeMCU
  • GND de BME280 a GND de NodeMCU
  • SCL de BME280 a D2 de NodeMCU
  • SDA de BME280 a D1 de NodeMCU

Pincha en la imagen para verla más grande.

Ten cuidado porque la serigrafía de muchas placas NodeMCU están mal y pone D2 en vez de D1 (hay dos D1).

Obviamente D1 es la que aparece marcada erróneamente como D2 entre D0 y «la otra» D2.

IMPORTANTE: No te fíes del orden de las conexiones y compruébalas dos veces en tu placa. Algunas veces diferentes fabricantes hacen cambios de ese tipo que nos pueden amargar el día, si no tenemos cuidado.

Conexión del BME280 a Wemos D1 Mini

Te dejo también el diagrama con una placa Wemos D1 Mini, por si prefieres hacerlo con ella.

Otras placas serán muy similares y probablemente no tengas problema para adaptarlo tú mismo.

Si tienes dudas, puedes preguntar abajo, en los comentarios.

Pincha en la imagen para verla más grande.

Conexión junto a pantalla OLED SSD1306

Una de las ventajas de los dispositivos con comunicación mediante BUS I2C (y tanto el BME280 como el display OLED SSD1306 son dispositivos I2C) es que su conexión no puede ser más sencilla. Solo tienes que conectar los dispositivos en paralelo para que funcionen.

La gran ventaja es que puedes tener un montón de dispositivos con solo dos cables y utilizando solo dos pines del microcontrolador (dejando pines libres para otras cosas).

En la siguiente imagen puedes ver un ejemplo con un BME280 y un display OLED SSD1306 conectados juntos:

Ten en cuenta que en este ejemplo ambos dispositivos están alimentados a 5V, si tu caso fuera otro (por ejemplo, SSD1306 de 3.3V) tendrás que adaptarlo y conectar su alimentación al pin correcto.

Conexión del BME280 a otros microcontroladores

La conexión a otra placa, diferente al NodeMCU o al Wemos D1 Mini, basada en ESP8266, u otra basada en ESP32, será muy parecida. Solamente tendremos que estar atentos al cambio en las conexiones.

Precio del BME280 y dónde comprarlo

El sensor BME280 es bastante económico (sobre todo para lo que ofrece).

Hay varias versiones del sensor, muy parecidas físicamente, pero con algunas diferencias: diferente forma de comunicación, voltaje, etc. de manera que asegurarte de comprar el mismo sensor, o tendrás que adaptar el tutorial al sensor que hayas recibido.

Puedes comprar el BME280 en AliExpress aquí:

Si prefieres comprarlo en Amazon y tenerlo en casa rápidamente, aunque cueste algo más, puedes hacerlo aquí:

No se han encontrado productos.

Una variación, el sensor BMP280

El sensor BMP280 es una versión reducida, más barata, del BME280. La diferencia principal es que no tiene sensor de humedad relativa, a cambio es más barato.

SI no necesitas datos de humedad relativa te podrás ahorrar algún dinerillo.

La conexión y configuración son exactamente iguales que para el BME280, por lo que puedes utilizar este mismo tutorial.

AZDelivery GY-BMP280 Sensor barométrico para la medición de la presión atmosférica Compatible con Arduino con eBook Incluido
  • ✔️ El sensor de presion atmosférica / barometro BMP280 es un modulo muy preciso para medir la presión atmosférica y es ideal para determinar la temperatura, el clima, la altura de vuelo y mucho más.
  • ✔️ ¡Este sensor de presión de aire es la mejor solución low-cost para proyectos de bricolaje! Se basa en el sensor BMP280 de Bosch y es mucho más preciso y eficiente que su predecesor, el BMP180, lo que lo hace adecuado como una actualización en lugar de los sensores BMP085 y BMP183.
  • ✔️ Gracias a sus dimensiones pequeñas de 3,6 x 3,8 x 0,93 mm y a su consumo de energía bajo, este módulo es ideal para dispositivos móviles. La medición de la presión atmosférica permite, por ejemplo, determinar la altitud en tierra o la altura de vuelo de un multicoptero RC.
  • ✔️ El modulo puede ser controlado con I2C o SPI, es perfectamente adecuado para proyectos Raspberry Pi y tiene una tensión de funcionamiento de 1,8V a 3,6V. Con el eBook 📖 gratuito de AZDelivery, usted puede comenzar su proyecto directamente sin tener que dedicar mucho tiempo a configurar el producto.
  • ✔️ Este producto incluye un E-Book que proporciona información útil sobre cómo comenzar su proyecto, ayuda con una configuración rápida y ahorra tiempo en el proceso de configuración. Proporcionamos una serie de ejemplos de aplicación, guías de instalación completas y bibliotecas.

Configuración

Aquí te enseñaré a configurar ESP Easy para utilizar el sensor (utiliza de momento el video, está bien explicado).

Instrucciones paso a paso en video

Aunque el proceso es sencillo, y no debería dar demasiados quebraderos de cabeza a nadie, he grabado un video con las instrucciones paso a paso para conectar el BME280 al NodeMCU y configurar ESP Easy.

Consejos prácticos

A continuación, te voy a dar algunos consejos prácticos, básicos, basados en mi experiencia con diferentes sensores que deberías cumplir, si o si, para obtener las mejores medidas del sensor.

No importa el sensor que estés utilizando, tienes que tener en cuenta que hay algunos puntos referentes al montaje del sensor que va a provocar que ese sensor mida mejor o peor. Vamos a ver algunas de ellas:

  1. Asegúrate de que tu sensor esté suficientemente aireado para que entre en contacto con el aire que rodea a tu montaje, pero evita corrientes de aire o grandes movimientos de masas de aire que impacten en él directamente.
  2. Aléjalo de fuentes de calor. No lo coloques cerca del microcontrolador que estás utilizando, sus componentes de la etapa de alimentación u otros sensores que puedan emitir calor.
  3. Intenta aislarlo. En mis montajes con sensores de temperatura suelo crear dos zonas bien diferenciadas. Una para el sensor de temperatura y otra, aparte, para todo el resto de electrónica.

Yo lo que suelo hacer, por ejemplo, cuando diseño las cajas, es crear una zona independiente donde colocar el sensor de temperatura, que no tiene comunicación de aire con el resto de la caja donde están los demás componentes.

Aprovecho para diseñarlo de forma que las corrientes de aire no puedan alcanzar fácilmente el sensor y dejo la salida justa para pasar los cables del sensor hacia el microcontrolador sellando después esta salida con un trozo de espuma, cola caliente o similar.

Integración con el Medidor de CO2 casero

Aquí te enseñaré como integrarlo con el Medidor de CO2 casero que publiqué previamente.

9 comentarios en «Conectar un sensor BME280 a ESPEasy»

  1. Hola, me parece muy interesante la idea de añadir el sensor. Me gustaría saber si hay algún problema en que la alimentación del sensor BME280 en la placa NodeMCU sea la misma que la del sensor de medición de CO2 (los pines VIN y GND). Por lo que cuentas en el artículo sobre alimentación desde esta placa, solo dependería de que la alimentación por USB tenga amperaje suficiente para alimentarlo todo, ¿no?

    Responder
  2. Hola:

    Antes de nada, muchas gracias: te escribo desde un centro educativo en el hemos podido tener todos los detectores de CO2 que necesitábamos gracias a tu estupendo tutorial.

    Ahora estamos usando lo que hemos aprendido para hacer otros detectores medioambientales usando la misma plataforma (NodeMCU + ESPEasy + ThingsSpeak) y ya hemos hecho uno con un sensor de polvo y otras partículas (PMS5003) y otro de presión, temperatura y humedad (BME280).

    Aunque obtendremos los datos a través de ThingSpeak, querríamos poner una pantalla para que los alumnos puedan ver resultados de manera inmediata: nuestro problema es que tanto para el BME280 como para las pantallas que tenemos, ESPEasy sólo permite usar I2C, de modo que no sabemos cómo conectar ambos: ¿nos podrías dar alguna orientación? Muchas gracias.

    Responder
    • Hola Francisco.

      Me alegro muchísimo de que el tutorial os haya resultado útil para hacer los medidores para vuestro centro educativo y felicitaciones por tan buena iniciativa.

      Conectar el BME280 y la pantalla OLED a la vez es muy sencillo, solamente tienes que conectar los dos cosas en paralelo:

      VDD de BME280 a Vin de la pantalla OLED SSD1306
      GND de BME280 a GND de la pantalla OLED SSD1306
      SCL de BME280 a SCL de la pantalla OLED SSD1306
      SDA de BME280 a SDA de la pantalla OLED SSD1306

      En el tutorial que se llama «Conectar una pantalla OLED SSD1306 a ESPEasy» (en https://emariete.com/conectar-una-pantalla-oled-ssd1306-a-espeasy/) tienes todos los detalles para conectar y configurar la pantalla en ESPEasy, incluyendo un videotutorial muy detallado.

      Dime si os surge cualquier duda adicional y estaré encantado de resolvérosla.

      Un saludo!

      Responder
      • Francisco, he ampliado el artículo con instrucciones y un diagrama con la conexión del BME280 y la pantalla OLED SSD1306 juntos para que te resulte más fácil.

        Un saludo.

        Responder
      • Gracias a tus instrucciones, es verdaderamente fácil (de hecho, ya habías indicado antes -y debimos habernos fijado más- que I2C permitía conectar en paralelo varios dispositivos que usen ese protocolo) y hemos conseguido que funcione bien, pero tenemos un problema a la hora de registrar los datos con ThingSpeak:

        Tenemos dos sensores instalados, un PMS5003 de polvo y un BME280. Pensamos que sería fácil sin más que tener dos controladores (uno para cada sensor) y dos canales independientes de ThingSpeak, uno para cada sensor, pero no: somos capaces de ninguna manera. Con el primer dispositivo instalado parece no haber problema, pero después de muchos intentos, con el segundo (BME280) no nos salen los valores en ThingSpeak, cambiemos lo que cambiemos. Hemos hecho muchos intentos y ya no lo recordamos todo, pero en algún momento usando un sólo controlador y un sólo canal conseguimos visualizar esos valores, pero se mezclaban…

        Te dejamos un enlace con algunos pantallazos que explican cómo lo tenemos configurado ahora. Finalmente, también hay un extracto del log porque no entendemos por que salen dos veces (de modo diferente) los valores del BME280 y tampoco esos mensajes de error:

        http://cloud.educa.madrid.org/index.php/s/WszatjkGgqOhDsc

        Disculpa las molestias y gracias por tu gran y generoso trabajo.

        Responder
        • Hola, Francisco.

          Lo mejor es que te pases por el Grupo de Telegram de eMariete (https://t.me/emariete_chat) y lo vemos con detalle porque allí hay varios usuarios que están haciendo prácticamente lo mismo que tú y les está funcionando.

          Si te adelanto que, si te fijas en todos mis mensajes al respecto, yo no utilizo el controlador de ThingSpeak porque en el pasado me ha dado bastantes problemas. Lo hago mediante reglas.

          Un saludo.

          Responder

Deja un comentario