Select Page

Una estación meteorológica es una instalación destinada a medir y registrar regularmente diversas variables meteorológicas. Estos datos se utilizan tanto para la elaboración de predicciones meteorológicas a partir de modelos numéricos como para estudios climáticos o simplemente alardear de que hiciste una y está en el techo de tu casa.

No permitas que las aplicaciones meteorológicas para teléfonos inteligentes o una estación meteorológica comercial (que lo alimentan con datos de estaciones ubicadas a millas de distancia) arruinen tus planes al aire libre. ¡Con este proyecto IoT podes ser tu propio meteorólogo!

Este proyecto utiliza ESP8266 NodeMCU como dispositivo de control que se conecta fácilmente a la red WiFi existente y crea un servidor web. Cuando cualquier dispositivo conectado accede a este servidor web, ESP8266 lee la temperatura, la humedad, la presión barométrica y la altitud de un BME280 y lo envía al navegador web de ese dispositivo con una interfaz agradable. ¿Emocionado? ¡Empecemos!

BME280

Primero, echemos un vistazo rápido al módulo BME280.

BME280 es el sensor digital de temperatura, humedad y presión de próxima generación fabricado por Bosch. Es el sucesor de sensores como BMP180, BMP085 o BMP183.

Estación Meteorológica con ESP8266 NodeMCU 2
  • Temperatura: -40° @ 85° C (1° precisión)
  • Humedad: 0 @100% RH (3% error)
  • Presión: 300hPa @110hPa (1hPa precisión)
  • Altitud: 0 @30.000ft

El voltaje de funcionamiento del módulo BME280 es de 3.3V a 5V – Perfecto para interactuar con microcontroladores de 3.3V como ESP8266.

El módulo presenta una interfaz I2C simple de dos hilos para la comunicación. La dirección I2C predeterminada del módulo BME280 es 0x76 y se puede cambiar a 0x77 fácilmente con este procedimiento.

Conectando el BME280 al NodeMCU

Las conexiones son bastante simples. Comience conectando el pin VIN a la salida de 3.3V en el ESP8266 NodeMCU y conecte GND a tierra.

Luego, conecte el pin SCL al pin I2C clock D1 en su ESP8266 y conecte el pin SDA al pin I2C data D2 en su ESP8266.

El siguiente diagrama le muestra cómo conectar todo.

Estación Meteorológica con ESP8266 NodeMCU 3

Más sensores de una estación meteorológica

En este punto, es cuando te digo que puedes agregar varios sensores mas a tu estación meteorológica, por ejemplo un anemómetro para medir la velocidad del viento o un recipiente para medir la cantidad de mm de lluvia caída. Todo lo conectas al NodeMCU y mas abajo agregas el codigo necesario.

Arduino IDE

Existe un complemento para Arduino IDE que le permite programar el ESP8266 NodeMCU utilizando el Arduino IDE. Siga el tutorial para preparar su IDE Arduino para trabajar con el ESP8266, si aún no lo ha hecho.

BME280 Librería

La comunicación con un módulo BME280 es un montón de trabajo. Afortunadamente, la biblioteca Adafruit BME280 se escribió para ocultar todas las complejidades y poder emitir comandos simples para leer los datos de temperatura, humedad relativa y presión barométrica.

Para instalar la biblioteca, navegue hasta Arduino IDE> Sketch> Incluir biblioteca> Administrar bibliotecas … Espere a que Library Manager descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.

Filtre su búsqueda escribiendo «bme280». Debería haber un par de entradas. Busque Adafruit BME280 Library por Adafruit. Haga clic en esa entrada y luego seleccione Instalar.

Estación Meteorológica con ESP8266 NodeMCU 4

La biblioteca de sensores BME280 utiliza el backend de soporte del sensor Adafruit. Entonces, busque en el administrador de la biblioteca el sensor unificado Adafruit e instálelo también (puede que tenga que desplazarse un poco).

Estación Meteorológica con ESP8266 NodeMCU 5

Mostrando datos de la Estación Meteorológica

Ahora, vamos a configurar nuestro ESP8266 en modo Estación (STA), y crear un servidor web para servir páginas web de la estación meteorológica a cualquier cliente conectado en la red existente.

Si desea obtener información sobre cómo crear un servidor web con ESP8266 en modo AP / STA, consulte este tutorial.

Antes de comenzar a cargar el boceto, debe hacer un cambio para que funcione para usted. Debe modificar las siguientes dos variables con sus credenciales de red, para que ESP8266 pueda establecer una conexión con la red existente.

const char* ssid = "YourNetworkName";  // Enter SSID here
const char* password = "YourPassword";  //Enter Password here

Una vez que haya terminado, continúe y pruebe el boceto.

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

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme;

float temperature, humidity, pressure, altitude;

/*Put your SSID & Password*/
const char* ssid = "YourNetworkName";  // Enter SSID here
const char* password = "YourPassword";  //Enter Password here

ESP8266WebServer server(80);              
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  bme.begin(0x76);   

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

}
void loop() {
  server.handleClient();
}

void handle_OnConnect() {
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  server.send(200, "text/html", SendHTML(temperature,humidity,pressure,altitude)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float temperature,float humidity,float pressure,float altitude){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP8266 Weather Station</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 Weather Station</h1>\n";
  ptr +="<p>Temperature: ";
  ptr +=temperature;
  ptr +="°C</p>";
  ptr +="<p>Humidity: ";
  ptr +=humidity;
  ptr +="%</p>";
  ptr +="<p>Pressure: ";
  ptr +=pressure;
  ptr +="hPa</p>";
  ptr +="<p>Altitude: ";
  ptr +=altitude;
  ptr +="m</p>";
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Web Server

Una estación meteorológica, no es tal, si no podemos ver los datos en el celular!

Después de cargar el boceto, abra el Monitor de serie a una velocidad en baudios de 115200. Y presione el botón EN en NodeMCU. Si todo está bien, generará la dirección IP dinámica obtenida de su enrutador y mostrará el mensaje de inicio del servidor HTTP.

Estación Meteorológica con ESP8266 NodeMCU 6

Luego, cargue un navegador y apúntelo a la dirección IP que se muestra en el monitor en serie. El ESP8266 debe mostrar una página web que muestre la temperatura, la humedad, la presión y la altitud del BME280.

estación meteorológica web server
A %d blogueros les gusta esto: