ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

El ESP8266 es un microcontrolador versátil y potente que se ha convertido en un favorito entre los entusiastas de la electrónica y la programación. En este artículo, te enseñaremos cómo utilizar el sensor BME280 junto con el ESP8266 utilizando el entorno de desarrollo Arduino IDE. Con esta combinación, podrás medir la presión, temperatura y humedad de tu entorno de manera sencilla y eficaz. ¡Sigue leyendo para descubrir cómo poner en marcha este emocionante proyecto!

Esta guía muestra cómo usar el módulo sensor BME280 con el ESP8266 para leer la presión, temperatura, humedad y estimar la altitud usando el IDE de Arduino. El sensor BME280 utiliza el protocolo de comunicación I2C o SPI para intercambiar datos con un microcontrolador.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Le mostraremos cómo conectar el sensor al ESP8266, instalar las bibliotecas necesarias y escribir un boceto simple que muestre los valores del sensor. También creamos un ejemplo de servidor web para mostrar los últimos valores de presión, temperatura y humedad.

Antes de continuar con este tutorial, debes tener instalado el complemento ESP8266 en tu IDE de Arduino.

  • Instale la placa ESP8266 en el IDE de Arduino

Quizás también quieras leer otras guías de BME280:

  • ESP32 con sensor BME280 usando Arduino IDE
  • Servidor web ESP32 con BME280 – estación meteorológica
  • ESP32/ESP8266 con BME280 usando MicroPython
  • Placa Arduino con BME280

Introducción del módulo de sensor BME280

El Sensor BME280 El módulo mide la presión del aire, la temperatura y la humedad. Dado que la presión cambia con la altitud, también se puede estimar la altitud. Hay varias versiones de este módulo de sensor. Usamos el módulo que se muestra en la imagen a continuación.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Este sensor se comunica mediante el protocolo de comunicación I2C, por lo que el cableado es muy sencillo. Puede utilizar los pines estándar ESP8266 I2C como se muestra en la siguiente tabla:

BME280 ESP8266
vino 3,3 V
Dimensiones Dimensiones
SCL GPIO5
ASD GPIO4

Existen otras versiones de este sensor que pueden usar protocolos de comunicación SPI o I2C, como el módulo que se muestra en la siguiente figura:

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Si usa uno de estos sensores, use los siguientes pines para usar el protocolo de comunicación I2C:

BME280 ESP8266
SCK (pasador SCL) GPIO5
SDI (pin SDA) GPIO4

Si utiliza el protocolo de comunicación SPI, deberá utilizar los siguientes pines:

BME280 ESP8266
SCK (reloj SPI) GPIO 14
SDO (MISO) GPIO 12
IDE (MOSI) GPIO 13
CS (selección de chips) GPIO 15

Piezas requeridas

Para completar este tutorial necesitarás las siguientes partes:

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Esquema: ESP8266 con BME280 usando I2C

Usaremos comunicación I2C con el módulo de sensor BME280. Para hacer esto, conectamos el sensor al ESP8266. ASD Y SCL Pines como se muestra en el siguiente esquema.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Recomendaciones de literatura: Guía de referencia de distribución de pines ESP8266

Instalación de la biblioteca BME280

Para obtener lecturas del módulo sensor BME280, utilice el Biblioteca Adafruit_BME280Siga los siguientes pasos para instalar la biblioteca en su IDE de Arduino:

Abra su IDE de Arduino y vaya a Bosquejo > incluir biblioteca > Administrar bibliotecas. El administrador de la biblioteca debería abrirse.

Buscar «Adafruit BME280 ”en el campo de búsqueda e instale la biblioteca.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Instalación de la biblioteca Adafruit_Sensor

Para utilizar la biblioteca BME280, también debe tener la Biblioteca Adafruit_SensorSiga los siguientes pasos para instalar la biblioteca en su IDE de Arduino:

Ir a Bosquejo > incluir biblioteca > Administrar bibliotecas y escribe “Sensor unificado de Adafruit”en el campo de búsqueda. Desplácese hacia abajo para buscar e instalar la biblioteca.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Después de instalar las bibliotecas, reinicie su IDE de Arduino.


Lectura de presión, temperatura y humedad.

Para leer la presión, la temperatura y la humedad, utilizamos un ejemplo de boceto de la biblioteca.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Después de instalar la biblioteca BME280 y la biblioteca Adafruit_Sensor, abra el IDE de Arduino y vaya a archivo > Ejemplos > Biblioteca Adafruit BME280 > revisión bme280.

/*********
  Complete project details at https://randomnerdtutorials.com  
*********/

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

/*#include <SPI.h>
#define BME_SCK 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {
  Serial.begin(9600);
  Serial.println(F("BME280 test"));

  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin(0x76);  
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  Serial.println("-- Default Test --");
  delayTime = 1000;

  Serial.println();
}

void loop() { 
  printValues();
  delay(delayTime);
}

void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");
  
  // Convert temperature to Fahrenheit
  /*Serial.print("Temperature = ");
  Serial.print(1.8 * bme.readTemperature() + 32);
  Serial.println(" *F");*/
  
  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}

Ver código sin formato

Hicimos algunos cambios en el boceto para que sea totalmente compatible con el ESP8266.

Cómo funciona el código

Continúe leyendo esta sección para aprender cómo funciona el código o pase a la sección de demostración.

Bibliotecas

El código comienza con la integración de las bibliotecas requeridas: cable Biblioteca para usar I2C y el Adafruit_Sensor Y Adafruit_BME280 Bibliotecas para interactuar con el sensor BME280.

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

comunicación SPI

Dado que estamos utilizando comunicación I2C, se comentan las siguientes líneas que definen los pines SPI:

/*#include <SPI.h>
#define BME_SCK 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/

Nota: Si usa comunicación SPI, use los pines SPI estándar del ESP8266:

MOSI MISO CLK ÉL
GPIO 13 GPIO 12 GPIO 14 GPIO 15

presión al nivel del mar

una variable llamada SEALEVELPRESSURE_HPA creado.

#define SEALEVELPRESSURE_HPA (1013.25)

Esta variable almacena la presión al nivel del mar en hectopascales (equivalente a milibares). Esta variable se utiliza para estimar la altitud para una presión determinada comparándola con la presión al nivel del mar. Este ejemplo utiliza el valor predeterminado. Sin embargo, para obtener resultados más precisos, reemplace el valor con la presión actual al nivel del mar en su ubicación.

I2C

Este ejemplo utiliza el protocolo de comunicación I2C de forma predeterminada. Como puedes ver, sólo necesitas uno. Adafruit_BME280 Objeto nombrado bme.

Adafruit_BME280 bme; // I2C

Para utilizar SPI, debe descomentar esta línea anterior y descomentar una de las siguientes líneas.

//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

configuración()

En el configuración()iniciar la comunicación en serie:

Serial.begin(9600);

E inicializa el sensor:

status = bme.begin(0x76); 
if (!status) {
  Serial.println("Could not find a valid BME280 sensor, check wiring!");
  while (1);
}

Inicializamos el sensor con el Versión: 0x76 DIRECCIÓN. Si no obtiene lecturas del sensor, verifique la dirección I2C de su sensor. Con el sensor BME280 conectado a su ESP8266, realice este boceto del escáner I2C para verificar la dirección de su sensor. Luego cambie la dirección si es necesario.

Imprimir valores

En el Cinta()El imprimirValores() La función lee los valores del BME280 e imprime los resultados en el monitor serie.

void loop() { 
  printValues();
  delay(delayTime);
}

Leer la temperatura, la humedad, la presión y la altitud es fácil utilizando los siguientes métodos en el bme Objeto:

  • bme.readTemperatura() – lee la temperatura en grados Celsius;
  • bme.readHumedad() – lee la humedad absoluta;
  • bme.readPresión() – muestra la presión en hPa (HectoPascal = milibares);
  • bme.readAltitude(SEALEVELPRESSURE_HPA) – estima la altitud en metros basándose en la presión al nivel del mar.

demostración

Cargue el código en su ESP8266 y abra el monitor serie con una velocidad de baudios de 9600. Presione el botón RST integrado para ejecutar el código. Debería ver las lecturas en el monitor serie.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Servidor web ESP8266 con sensor BME280

El sensor BME280 mide temperatura, humedad y presión. De modo que puede construir fácilmente una estación meteorológica compacta y monitorear las mediciones utilizando un servidor web creado con el ESP8266; eso es exactamente lo que haremos en esta sección.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Copie el siguiente código en su IDE de Arduino. No lo subas todavía. Primero debe proporcionar su SSID y contraseña.

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

// Load Wi-Fi library
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

//uncomment the following lines if you're using SPI
/*#include <SPI.h>
#define BME_SCK 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

// Replace with your network credentials
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

void setup() {
  Serial.begin(115200);
  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  //status = bme.begin();  
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == 'n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name="viewport" content="width=device-width, initial-scale=1">");
            client.println("<link rel="icon" href="data:,">");
            // CSS to style the table 
            client.println("<style>body { text-align: center; font-family: "Trebuchet MS", Arial;}");
            client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }");
            client.println("th { padding: 12px; background-color: #0043af; color: white; }");
            client.println("tr { border: 1px solid #ddd; padding: 12px; }");
            client.println("tr:hover { background-color: #bcbcbc; }");
            client.println("td { border: none; padding: 12px; }");
            client.println(".sensor { color:white; font-weight: bold; background-color: #bcbcbc; padding: 1px; }");
            
            // Web Page Heading
            client.println("</style></head><body><h1>ESP8266 with BME280</h1>");
            client.println("<table><tr><th>MEASUREMENT</th><th>VALUE</th></tr>");
            client.println("<tr><td>Temp. Celsius</td><td><span class="sensor">");
            client.println(bme.readTemperature());
            client.println(" *C</span></td></tr>");  
            client.println("<tr><td>Temp. Fahrenheit</td><td><span class="sensor">");
            client.println(1.8 * bme.readTemperature() + 32);
            client.println(" *F</span></td></tr>");       
            client.println("<tr><td>Pressure</td><td><span class="sensor">");
            client.println(bme.readPressure() / 100.0F);
            client.println(" hPa</span></td></tr>");
            client.println("<tr><td>Approx. Altitude</td><td><span class="sensor">");
            client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
            client.println(" m</span></td></tr>"); 
            client.println("<tr><td>Humidity</td><td><span class="sensor">");
            client.println(bme.readHumidity());
            client.println(" %</span></td></tr>"); 
            client.println("</body></html>");
            
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != 'r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

Ver código sin formato

Cómo funciona el código

Continúe leyendo esta sección para aprender cómo funciona el código o pase a la sección de demostración.

Este boceto es muy similar al boceto del Tutorial del servidor web ESP8266. Primero, átalo ESP8266WiFi Biblioteca y las bibliotecas necesarias para la lectura del sensor BME280.

// Load Wi-Fi library
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

La siguiente línea define una variable para almacenar la presión al nivel del mar. Para obtener una estimación de elevación más precisa, reemplace el valor con la presión actual al nivel del mar en su ubicación.

#define SEALEVELPRESSURE_HPA (1013.25)

En la siguiente línea, cree uno. Adafruit_BME280 Objeto nombrado bme que por defecto establece comunicación con el sensor vía I2C.

Adafruit_BME280 bme; // I2C

Como se mencionó anteriormente, deberá incluir su SSID y contraseña entre comillas en las siguientes líneas.

const char* ssid     = "";
const char* password = "";

Luego configure su servidor web en el puerto 80.

// Set web server port number to 80
WiFiServer server(80);

La siguiente línea crea una variable para almacenar el encabezado de la solicitud HTTP:

String header;

configuración()

En el configuración()Para fines de depuración, iniciamos la comunicación en serie con una velocidad de baudios de 115200.

Serial.begin(115200);

Verifica si el sensor BME280 se inicializó correctamente.

if (!bme.begin(0x76)) {
  Serial.println("Could not find a valid BME280 sensor, check wiring!");
  while (1);

Las siguientes líneas inician la conexión Wi-Fi con WiFi.begin(ssid, contraseña)espere una conexión exitosa e imprima la dirección IP del ESP en el monitor serie.

// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();

Cinta()

En el Cinta()Programemos qué sucede cuando un nuevo cliente establece una conexión con el servidor web. El ESP siempre escucha a los clientes entrantes con esta línea:

WiFiClient client = server.available(); // Listen for incoming clients

Cuando una solicitud proviene de un cliente, almacenamos los datos entrantes. El siguiente bucle while se ejecuta mientras el cliente permanezca conectado.

if (client) { // If a new client connects,
  Serial.println("New Client."); // print a message out in the serial port
  String currentLine = ""; // make a String to hold incoming data from the client
  while (client.connected()) { // loop while the client's connected
    if (client.available()) { // if there's bytes to read from the client,
      char c = client.read(); // read a byte, then
      Serial.write(c); // print it out the serial monitor
      header += c;
      if (c == 'n') { // if the byte is a newline character
        // if the current line is blank, you got two newline characters in a row.
        // that's the end of the client HTTP request, so send a response:
        if (currentLine.length() == 0) {
          // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
          // and a content-type so the client knows what's coming, then a blank line:
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println("Connection: close");
          client.println();

Ver la página web HTML

A continuación, debe enviar al cliente una respuesta con el cuerpo HTML para crear la página web.

La página web se envía al cliente con esta expresión. cliente.println(). Como argumento debes ingresar lo que deseas enviar al cliente.

El siguiente fragmento de código envía la página web para mostrar los valores del sensor en una tabla.

client.println("<!DOCTYPE html><html>");
client.println("<head><meta name="viewport" content="width=device-width, initial-scale=1">");
client.println("<link rel="icon" href="data:,">");
// CSS to style the on/off buttons 
// Feel free to change the background-color and font-size attributes to fit your preferences
client.println("<style>body { text-align: center; font-family: "Trebuchet MS", Arial;}");
client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }");
client.println("th { padding: 12px; background-color: #0043af; color: white; }");
client.println("tr { border: 1px solid #ddd; padding: 12px; }");
client.println("tr:hover { background-color: #bcbcbc; }");
client.println("td { border: none; padding: 12px; }");
client.println(".sensor { color:white; font-weight: bold; background-color: #bcbcbc; padding: 1px; }");
 
// Web Page Heading
client.println("</style></head><body><h1>ESP32 with BME280</h1>");
client.println("<table><tr><th>MEASUREMENT</th><th>VALUE</th></tr>");
client.println("<tr><td>Temp. Celsius</td><td><span class="sensor">");
client.println(bme.readTemperature());
client.println(" *C</span></td></tr>"); 
client.println("<tr><td>Temp. Fahrenheit</td><td><span class="sensor">");
client.println(1.8 * bme.readTemperature() + 32);
client.println(" *F</span></td></tr>"); 
client.println("<tr><td>Pressure</td><td><span class="sensor">");
client.println(bme.readPressure() / 100.0F);
client.println(" hPa</span></td></tr>");
client.println("<tr><td>Approx. Altitude</td><td><span class="sensor">");
client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
client.println(" m</span></td></tr>"); 
client.println("<tr><td>Humidity</td><td><span class="sensor">");
client.println(bme.readHumidity());
client.println(" %</span></td></tr>"); 
client.println("</body></html>");

Nota: puede Haga clic aquí para ver la página web HTML completa.

Visualización de valores de sensores

Para mostrar los valores del sensor en la tabla, solo necesitamos cambiarlos entre los correspondientes

Y

etiquetas. Por ejemplo, para mostrar la temperatura:

client.println("<tr><td>Temp. Celsius</td><td><span class="sensor">");
client.println(bme.readTemperature());
client.println(" *C</span></td></tr>");

nota: El La etiqueta es útil para dar formato a una parte específica de un texto. En este caso utilizamos el Etiqueta para envolver el valor del sensor en una clase llamada Sensor. Esto es útil para formatear ese fragmento de texto específico usando CSS.

De forma predeterminada, la tabla muestra los valores de temperatura tanto en grados Celsius como en Fahrenheit. Puede comentar las siguientes tres líneas si desea mostrar la temperatura solo en grados Fahrenheit.

/*client.println("<tr><td>Temp. Celsius</td><td><span class="sensor">");
client.println(bme.readTemperature());
client.println(" *C</span></td></tr>");*/

Cerrando la conexión

Finalmente, cuando finaliza la respuesta, eliminamos el Encabezados variable y finalizar la conexión con el cliente con cliente.parada().

// Clear the header variable
header = "";
// Close the connection
client.stop();

Demostración del servidor web

Después de ingresar sus credenciales de red, puede cargar el código en su tablero.

Verifique que haya seleccionado la placa y el puerto COM correctos y cargue el código en su ESP8266. Después de la carga, abra el monitor en serie con una velocidad de baudios de 115200 y copie la dirección IP del ESP8266.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Abra su navegador, pegue la dirección IP y debería ver las últimas lecturas del sensor.

ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Para actualizar las métricas, todo lo que necesita hacer es actualizar la página web.

También te puede interesar… ESP8266 con sensor DHT11 – Servidor web asíncrono con actualizaciones automáticas

Envolver

Este artículo fue una guía detallada sobre cómo obtener valores de presión, temperatura y humedad de un sensor BME280 con el ESP8266 usando el IDE de Arduino y mostrar los valores en un servidor web.

Ahora puede llevar este proyecto más allá y mostrar los valores de sus sensores en una pantalla OLED, crear un registrador de datos, almacenar los valores en su propia base de datos o enviar los valores a su plataforma de automatización del hogar usando MQTT. Aquí hay algunos proyectos y tutoriales que pueden ayudarlo a implementar estas ideas:

  • ESP32 publica valores de sensores en Google Sheets
  • Registrador de datos de estación meteorológica de bajo consumo (MicroPython)
  • Inserte datos ESP32/ESP8266 en la base de datos MySQL usando PHP y Arduino IDE
  • ESP8266 y Node-RED con MQTT (Publicar y Suscribirse)
  • ¿Qué es MQTT y cómo funciona?

Obtenga más información sobre el ESP8266 en nuestro curso: Domótica con ESP8266

Gracias por leer.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Guía de uso del sensor BME280 con el ESP8266 usando Arduino IDE (Presión, Temperatura, Humedad)

En esta guía, aprenderás cómo usar el módulo del sensor BME280 con el ESP8266 para leer presión, temperatura, humedad y estimar altitud utilizando Arduino IDE. El sensor BME280 utiliza el protocolo de comunicación I2C o SPI para intercambiar datos con un microcontrolador.

Introducción al módulo del sensor BME280

El módulo del sensor BME280 lee la presión barométrica, temperatura y humedad. Debido a que la presión cambia con la altitud, también se puede estimar la altitud. Hay varias versiones de este módulo de sensor y se utiliza el protocolo de comunicación I2C. El módulo se comunica con el ESP8266 a través de los pines de I2C mostrados en la tabla.

Parts requeridos

  • Módulo del sensor BME280
  • ESP8266
  • Breadboard
  • Cables jumper

Esquemático – ESP8266 con BME280 usando I2C

Para utilizar la comunicación I2C con el sensor BME280, debes cablear el sensor a los pines SDA y SCL del ESP8266, como se muestra en el diagrama esquemático.

Instalación de la biblioteca BME280

Para obtener las lecturas del sensor BME280, debes usar la biblioteca Adafruit_BME280. Sigue los siguientes pasos para instalar la biblioteca en tu Arduino IDE

  1. Abre tu Arduino IDE y ve a Sketch > Include Library > Manage Libraries. El Administrador de Bibliotecas debería abrirse.
  2. Busca «adafruit bme280» en la casilla de búsqueda e instala la biblioteca.

Además de la biblioteca BME280, también necesitas instalar la biblioteca Adafruit_Sensor para utilizar la biblioteca BME280. Sigue los mismos pasos que usaste para instalar la biblioteca BME280.

Leyendo Presión, Temperatura y Humedad

Para leer la presión, temperatura, y humedad, utilizaremos un ejemplo de sketch de la biblioteca. Después de instalar las bibliotecas, podrás utilizar el sketch de ejemplo bme280 test.

Código para el servidor web ESP8266 con BME280

Construir un servidor web con el ESP8266 y el sensor BME280 te permitirá monitorear fácilmente las mediciones de temperatura, humedad y presión. El siguiente código te ayudará a crear un servidor web y visualizar las lecturas del sensor en una página web.

Estos son solo algunos ejemplos de cómo puedes utilizar el sensor BME280 con el ESP8266. Puedes ir más allá y explorar otras posibilidades como mostrar las lecturas en un display OLED, crear un datalogger, o enviar las lecturas a tu plataforma de automatización del hogar utilizando MQTT.

Aprende más sobre el ESP8266 con nuestro curso: Automatización del Hogar usando ESP8266

¡Gracias por leer!

3 comentarios en «ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)»

  1. Wow, esto me parece súper interesante. Me encanta la idea de poder utilizar el ESP8266 y el BME280 para obtener datos de presión, temperatura y humedad. Definitivamente voy a probarlo en mi próximo proyecto. ¡Gracias por compartir la información!

Deja un comentario