Estación Meteorológica WiFi

Esta es una estación Meteorológica Inalámbrica mediante WiFi, basada en el SoC ESP8266 para la comunicación y los sensores: BMP085/180, DHT11 y LDR. Para una mejor precisión de medición, la temperatura se extrae del sensor Bosch en lugar del sensor DHT11, quedando así el DHT11 solo para indicar la humedad relativa. El firmware cuenta con la biblioteca WiFiManager para aumentar la facilidad de autenticación para el usuario y los datos son enviados directamente a ThingSpeak. Estos datos son enviados cada 5 minutos para mantener las buenas costumbres de frecuencia de datos en el servidor ThingSpeak, en el caso de parámetros meteorológicos no es necesaria la actualización constante de los datos, estos cambian de forma lenta.

Controles - v1.0

  • Core - ESP8266 - WEMOS D1 Mini
  • Sensor de Presión y Temperatura - BMP085 - BMP180
  • Sensor de Humedad y Temperatura - DHT11
  • Sensor de Luminosidad - LDR
  • Botón de configuración para restablecer datos de fabrica
  • Servidor - ThingSpeak
  • Control WiFi - WiFiManager

Alimentación

Diseñado para ser alimentado con fuente de alimentación de 100 a 240Vac 3W

Diseño

Diseñado con EAGLE, en solo dos capas con componentes THT para facilitar la integración al alumno, el desarrollo del PCB en el hogar y mantener el menor costo posible.

Medición OnLine en Tiempo Real ThingSpeak Channel 128756

Firmware y Repositorio de Archivos


Firmware: 

  1. #include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino
  2. #include <DNSServer.h>
  3. #include <ESP8266WebServer.h>
  4. #include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager
  5. #include <SimpleDHT.h>
  6. #include <Wire.h>
  7. #include <Adafruit_BMP085.h>
  8. String apiKey = "APIKEY DE SU CUENTA THINGSPEAK";
  9. const char* server = "api.thingspeak.com";
  10. int pinDHT11 = D0;
  11. int pinFACTORY = D6;
  12. int timeOut = 0;
  13. SimpleDHT11 dht11;
  14. WiFiClient client;
  15. Adafruit_BMP085 bmp;
  16. void handleButton(){
  17.    int debounce = 1000;
  18.    if(digitalRead(pinFACTORY)==LOW){
  19.       delay(debounce);
  20.       if(digitalRead(pinFACTORY)==LOW){
  21.          WiFiManager wifiManager;      
  22.          wifiManager.resetSettings();
  23.          delay(1000);
  24.          ESP.reset();
  25.       }
  26.    }
  27. }
  28. void setup(){
  29.    WiFiManager wifiManager;
  30.    Serial.begin(115200);
  31.    pinMode(pinFACTORY, INPUT);
  32.    delay(10);
  33.    // wifiManager.resetSettings();
  34.    wifiManager.autoConnect("WS-Electgpl");
  35.    Serial.println("Estacion Conectada a Internet");
  36.    if(!bmp.begin()){
  37.       Serial.println("Error en BMP085");
  38.    }
  39. }
  40. void loop(){
  41.    byte temperatura = 0;
  42.    byte humedad = 0;
  43.    float luminosidad = analogRead(A0);
  44.    handleButton();
  45.    if(dht11.read(pinDHT11, &temperatura, &humedad, NULL)){
  46.       Serial.print("Error en DHT11");
  47.       return;
  48.    }
  49.    if(timeOut==300){
  50.       if(client.connect(server,80)){
  51.          String postStr = apiKey;
  52.          postStr +="&field1=";
  53.          postStr += String(luminosidad);
  54.          postStr +="&field2=";
  55.          postStr += String((float)bmp.readTemperature());
  56.          postStr +="&field3=";
  57.          postStr += String((int)humedad);
  58.          postStr +="&field4=";
  59.          postStr += String((float)bmp.readPressure()/100);
  60.          postStr += "\r\n\r\n";
  61.          client.print("POST /update HTTP/1.1\n");
  62.          client.print("Host: api.thingspeak.com\n");
  63.          client.print("Connection: close\n");
  64.          client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
  65.          client.print("Content-Type: application/x-www-form-urlencoded\n");
  66.          client.print("Content-Length: ");
  67.          client.print(postStr.length());
  68.          client.print("\n\n");
  69.          client.print(postStr);
  70.          Serial.println("% send to Thingspeak");
  71.       }
  72.       client.stop();
  73.       Serial.print("luminosidad: ");
  74.       Serial.print(luminosidad);
  75.       Serial.print(" | temperatura BMP: ");
  76.       Serial.print((float)bmp.readTemperature());
  77.       Serial.print(" | temperatura DHT: ");
  78.       Serial.print(temperatura);
  79.       Serial.print(" | humedad: ");
  80.       Serial.print(humedad);
  81.       Serial.print(" | presion: ");
  82.       Serial.println((float)bmp.readPressure()/100);
  83.       timeOut=0;
  84.    }
  85.    delay(1000);
  86.    timeOut++;
  87.    Serial.print("timeOut");
  88.    Serial.println(timeOut);
  89. }

Circuito: 




¿Dónde fabricamos nuestros PCBs?
Nuestros PCBs los fabricamos con la empresa PCBWay, esta empresa nos permite realizar pequeñas cantidades como prototipos rápidos para nuestros desarrollos a medida.
También nos permite realizar grandes producciones para realizar proyectos comerciales.
Servicio de prototipo de PCB por tan solo $5 las 10 unidades.
Cada nuevo miembro recibirá un bono de $5, más servicio express de 24Hs o 48Hs.
Servicio de ensamblado de PCB por $88 más envió gratis en todo el mundo, más esténcil, más componentes.
Un servicio de calidad!

1 comentario:

  1. hola. estoy compilando el programa y me sale este error: exit status 1
    'D0' was not declared in this scope.

    ResponderBorrar