Wetterstation Teil 2

Reading Time: 2 minutes(Last Updated On: 24. Januar 2020)

Hier melde ich mich schon mit dem ersten Update im neuen Jahr 2020. In diesem Beitrag soll es mal wieder um das Projekt Wetterstation gehen und welche Fortschritte ich in den letzten Wochen gemacht habe. Wer sich Teil 1 noch nicht angeschaut hat, sollte dies hier unbedingt tun.

Die Schaltung

Natürlich musste ich mir so langsam dann doch einmal Gedanken machen wie die ganze Wetterstation eigentlich verkabelt werden soll. Also habe ich mich zuerst an die Software Fritzing gesetzt und mir die Schaltung skizziert um ein Gefühl für den Aufwand zu bekommen. Rausgekommen ist dabei das folgende Layout

Fritzing-Skizze zur Wetterstation

Die Datei kann sich über das entsprechende Github-Repository heruntergeladen werden.

Der erste Sketch

Nach dem nun das Layout feststand und ich dieses schnell provisorisch zusammen gesteckt hatte fing ich an einen Sketch zusammen zu basteln. Wobei zusammen basteln das richtige Stichwort ist. Da ich vorher zwar immer mal etwas zusammen geschustert hatte, aber nicht ständig mit C und Arduinos arbeite, musste ich doch etwas Dr. Google bemühen. Schließlich fand ich dort zahlreiche interessanten Hilfen. Durch diese Hilfen und die entsprechend verlinkten Bibliotheken ist es mir dann gelungen den ersten Sketch zu entwickeln.

#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
 
DHTesp dht;


void setup()
{
  Serial.begin(115200);
 
  // 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();
 
  Serial.print("H:");
  Serial.println(humidity);
  Serial.print("T:");
  Serial.println(temperature);
  
  status = pressure.startTemperature();
  if (status != 0)
  {
    // Wait for the measurement to complete:
    delay(status);
 
    status = pressure.getTemperature(T);
    if (status != 0)
    {
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);
      Serial.print(" deg C, ");
      Serial.print((9.0/5.0)*T+32.0,2);
      Serial.println(" deg F");

      int rain = analogRead(A0);

      Serial.print("rain: ");
      Serial.println(rain);
 
      status = pressure.startPressure(3);
      if (status != 0)
      {
        // Wait for the measurement to complete:
        delay(status);
 
        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          // Print out the measurement:
          Serial.print("absolute pressure: ");
          Serial.print(P,2);
          Serial.print(" mb, ");
          Serial.print(P*0.0295333727,2);
          Serial.println(" inHg");
 
          p0 = pressure.sealevel(P,ALTITUDE); 
          Serial.print("relative (sea-level) pressure: ");
          Serial.print(p0,2);
          Serial.print(" mb, ");
          Serial.print(p0*0.0295333727,2);
          Serial.println(" inHg");
 
          a = pressure.altitude(P,p0);
          Serial.print("computed altitude: ");
          Serial.print(a,0);
          Serial.print(" meters, ");
          Serial.print(a*3.28084,0);
          Serial.println(" feet");
        }
        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(5000);  // Pause for 5 seconds.
}

Für diesen Sketch musste ich zwei Bibliotheken aus dem Internet herunterladen und einbinden:

Soweit funktioniert unsere Idee also. In den nächsten Tagen und Wochen werde ich mich dann damit beschäftigen das PHP-Skript entsprechend anzupassen und die Kommunikation mit dem ESP8266 herzustellen. Außerdem benötigen wir noch ein schönes Gehäuse, was uns dann also im weiteren Projektverlauf zum Konstruieren und Drucken bringt.

Seid gespannt und bleibt dran!

Alle Dateien gibt es wie immer auf Github…

Literatur