Introducción
En este tutorial, te enseñaremos cómo conectar un sensor BME280 a un ESP32 para leer datos de temperatura, humedad y presión atmosférica, y subir estos datos a ThingSpeak en tiempo real. Este tipo de proyectos es ideal para aplicaciones IoT como estaciones meteorológicas caseras o sistemas de monitoreo ambiental.
¿Qué es el BME280?
El BME280 es un sensor avanzado de Bosch que permite medir tres variables ambientales: temperatura, humedad relativa y presión atmosférica. Gracias a su bajo consumo y tamaño compacto, es ampliamente utilizado en proyectos IoT.
Características principales:
- Rango de temperatura: -40 a 85 °C
- Rango de humedad: 0% a 100%
- Rango de presión: 300 a 1100 hPa
- Comunicación: I2C (utilizado en este tutorial) y SPI
Componentes necesarios
Antes de comenzar, asegúrate de tener los siguientes componentes:
- ESP32
- Sensor BME280 (versión I2C)
- Cables de conexión
- Cuenta en ThingSpeak
Un Esp32
Características del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Pines hembra
Cables dupont hembra macho
PCB
Descargar archivo gerber –> Gerber_esp32
Circuito
Conexión del Sensor BME280 al ESP32
Utilizaremos la interfaz I2C para conectar el BME280 al ESP32. A continuación, te mostramos las conexiones necesarias:
Conexiones I2C:
- VCC (BME280) → 3.3V (ESP32)
- GND (BME280) → GND (ESP32)
- SDA (BME280) → GPIO 21 (ESP32)
- SCL (BME280) → GPIO 22 (ESP32)
Tip: Si tu sensor BME280 no tiene resistencias pull-up integradas en las líneas SDA y SCL, añade resistencias externas de 4.7kΩ entre cada línea y el voltaje de 3.3V.
Configuración de ThingSpeak
Antes de subir los datos, necesitamos configurar ThingSpeak:
- Crear una cuenta en ThingSpeak si no tienes una.
- Crear un nuevo canal con los campos necesarios (por ejemplo, “Temperatura”, “Humedad” y “Presión”).
- Una vez creado, copiar la clave de API de escritura del canal, que utilizaremos en el código para enviar los datos.
Código para Subir Datos a ThingSpeak
Aquí tienes el código necesario para leer los datos del sensor BME280 y subirlos a ThingSpeak utilizando un ESP32:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#include <WiFi.h> #include <HTTPClient.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> // Definiciones para el sensor BME280 #define PRESION_NIVEL_MAR_HPA (1013.25) // Reemplaza con tus credenciales Wi-Fi const char* red_wifi = "Tu_Red_Wifi"; const char* contrasena_wifi = "Tu_Contraseña"; // API Key de ThingSpeak const char* clave_api = "Tu_Clave_Api"; // Dirección URL de ThingSpeak const char* servidor_thingspeak = "http://api.thingspeak.com/update"; // Objeto del sensor BME280 Adafruit_BME280 sensor_bme; void setup() { Serial.begin(115200); // Inicializar WiFi WiFi.begin(red_wifi, contrasena_wifi); Serial.print("Conectando a WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConectado a WiFi"); // Inicializar el sensor BME280 if (!sensor_bme.begin(0x76)) { Serial.println("No se encuentra el sensor BME280. Revisa la conexión."); while (1); } } void loop() { // Leer datos del sensor BME280 float temperatura = sensor_bme.readTemperature(); float humedad = sensor_bme.readHumidity(); float presion = sensor_bme.readPressure() / 100.0F; // Conversión a hPa // Mostrar datos en el monitor serial Serial.print("Temperatura = "); Serial.print(temperatura); Serial.println(" *C"); Serial.print("Humedad = "); Serial.print(humedad); Serial.println(" %"); Serial.print("Presión = "); Serial.print(presion); Serial.println(" hPa"); // Enviar datos a ThingSpeak if(WiFi.status() == WL_CONNECTED) { HTTPClient http; String url = String(servidor_thingspeak) + "?api_key=" + clave_api + "&field1=" + String(temperatura) + "&field2=" + String(humedad) + "&field3=" + String(presion); http.begin(url); int codigo_http = http.GET(); if(codigo_http > 0) { Serial.printf("Código de respuesta: %d\n", codigo_http); if(codigo_http == HTTP_CODE_OK) { String respuesta = http.getString(); Serial.println("Datos enviados a ThingSpeak"); } } else { Serial.printf("Error en la conexión: %s\n", http.errorToString(codigo_http).c_str()); } http.end(); } else { Serial.println("Error de conexión WiFi"); } // Intervalo de actualización (15 segundos) delay(15000); } |
Explicación del Código
- Conexión a Wi-Fi: Utilizamos las credenciales Wi-Fi para conectar el ESP32 a Internet.
- Lectura de datos: El ESP32 obtiene los valores de temperatura, humedad y presión del sensor BME280.
- Envío de datos a ThingSpeak: Los datos se envían utilizando una solicitud HTTP GET. Asegúrate de haber copiado correctamente tu API Key y de actualizar el código con tus credenciales de red Wi-Fi.
Verificando los Datos en ThingSpeak
Una vez que el código esté cargado y funcionando en el ESP32, podrás ver los datos en tiempo real en el dashboard de ThingSpeak. Simplemente ingresa a tu canal y observa cómo se actualizan los gráficos con cada medición.
Ahora sabes cómo configurar un ESP32 para leer datos de un sensor BME280 y subirlos a ThingSpeak. Esta configuración es excelente para proyectos de IoT, como estaciones meteorológicas y sistemas de monitoreo ambiental. A partir de aquí, puedes expandir tu proyecto añadiendo más sensores o conectándolo a otras plataformas IoT.
No te pierdas ningún video más suscríbete a nuestro canal de telegram https://t.me/carlosvolt_electronica_robotica
PROYECTO RECOMENDADO