Wetterstation Teil 3

Reading Time: 2 minutes(Last Updated On: 18. August 2020)

Gut Ding will eben Weile haben. - Der Corona-Krise und dem darauf folgenden Lockdown kann man durch aus auch positives abgewinnen. So bin ich dann doch mal dazu gekommen ein paar Projekte abzuschließen, jedoch aber auch jede Menge neue zu finden. Dazu aber in einem anderen Beitrag später mehr...

Ja, es ist nun so das die Wetterstation ihren Dienst verrichtet und das auch zuverlässig. Aktuell ist das Aufbau zwar noch so, das ich jeden Sensor der Wetterstation einzeln als Messpunkt einbinden muss, dies ist aber aktuell nicht so schlimm da eh nur die eine Wetterstation aktiv ist.

Der finale Quellcode

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 pressure;

#define ALTITUDE 1655.0 // Altitude in meters

#define LED 2        //On board LED
#define DHTpin 14    //D5 of NodeMCU is GPIO14

#include "DHTesp.h"  //DHT11 Library for ESP

const char* ssid     = "WLAN-SSID";
const char* password = "WLAN_PASSWORT";

DHTesp dht;

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

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

  delay(1000);
  Serial.print("Connecting..");

  }

  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (pressure.begin())
    Serial.println("BMP180 init success");
  else
  {
    Serial.println("BMP180 init fail\n\n");
    while(1); // Pause forever.
  }

  dht.setup(DHTpin, DHTesp::DHT22); 
}

void loop()
{
  char status;
  double T,P,p0,a;

  Serial.println();
  Serial.print("provided altitude: ");
  Serial.print(ALTITUDE,0);
  Serial.print(" meters, ");
  Serial.print(ALTITUDE*3.28084,0);
  Serial.println(" feet");

  float humidity, temperature;

  humidity = dht.getHumidity();
  temperature = dht.getTemperature();

  //Luftfeuchtigkeit speichern
  SendData(String(9), String(humidity));

  //Temperatur speichern
  SendData(String(5), String(temperature));

  status = pressure.startTemperature();
  if (status != 0)
  {
    // Wait for the measurement to complete:
    delay(status);

    status = pressure.getTemperature(T);
    if (status != 0)
    {

      int rain = analogRead(A0);

      //Regen speichern
      SendData(String(6), String(rain));

      status = pressure.startPressure(3);
      if (status != 0)
      {
        // Wait for the measurement to complete:
        delay(status);

        status = pressure.getPressure(P,T);
        if (status != 0)
        {

          //Luftdruck (absolut) speichern
          SendData(String(8), String(P));

          //Luftdruck (relativ) speichern
          p0 = pressure.sealevel(P,ALTITUDE); 
          SendData(String(7), String(p0));
        }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(300000);  // Pause for 5 min.
}

void SendData(String id, String value){

    HTTPClient http;  //Declare an object of class HTTPClient

    String adresse = "http://192.168.1.63/temp.php?temp=" + String(value) + "&id=" + id;

    Serial.println(adresse);

    http.begin(adresse);  //Specify request destination
    int httpCode = http.GET();                                                                  //Send the request

    if (httpCode > 0) { //Check the returning code

      String payload = http.getString();   //Get the request response payload
      Serial.println(payload);                     //Print the response payload

    }

    http.end();   //Close connection

}

Die aktuellste Version liegt wie immer auf Github.com/Soeren3003

Weitere ToDo's

  1. Grafana Oberfläche anpassen -> OpenWeatherMap und lokale Wetterdaten auf ein Dashboard migrieren
  2. Wetterstation in ein Gehäuse packen und befestigen

Literatur