Die Wetterstation

Warum baue ich eine Wetterstation?

Mein Sohn hatte in der Schule das Thema „Wetter“.

Da ich just zu diesem Zeitpunkt in den Einsatz von Mikrokontrollern eingestiegen bin, kam gleich die Idee, die in den „Anfängerpaketen“ mitgelieferten Sensoren einzusetzen um Wetterdaten in unserem Garten zu sammeln.

ESP8266 waren bereits vorhanden, genauso wie mehrere DHT11 und 0,96″-OLED-Displays. Diese waren bereits im Haus im Einsatz als Klimaüberwachung. Kurz im Inet geforscht und schon wurden mehrere BMP280 und ein Anemometer bestellt.

Das Ergebnis von der Datennahme bis zur analogen Ausgabe präsentiere ich im folgenden Beitrag. Ich denke, es ist für ambitionierte Einsteiger, ich selbst habe in dem Gebiet 34 Jahre pausiert, bestens geeignet. Allerdings beschäftige ich mich seit 23 Jahren mit diversen Programmiersprachen, weswegen ich die ein oder andere Lösung über die Software gesucht habe. Es gibt bestimmt elegantere Lösungen, welche ich, nachdem ich sie nachvollzogen habe, gerne mit aufnehme.

Welche Daten möchte ich aufzeichnen?

Diese Punkte erachte ich für diverse Steuerungen als wichtig:

  • Temperatur
  • Luftdruck
  • Luftfeuchtigkeit
  • Windgeschwindigkeit
  • ob es regnet

Welche Sensoren benötige ich?

Kurz in die Bastelkiste geschaut und folgende Sensoren gefunden:

  • DHT11
  • BMP280
  • Anemometer (natürlich bestellt)
  • leider schnell korrodierender Regensensor

Wie zeichne ich die Daten auf?

Die Daten sollen zum einen für statistische Zwecke, zum anderen zu Ausgabezwecken und zum dritten zu Steuerzwecken aufgezeichnet werden. Deswegen kommen 2 ESP8266 (1. fürTemperatur, Luftfeuchtigkeit, Luftdruck und Regensensor; 2. für Anemometer) und ein Raspberry Pi 4 (Apache2 installiert) mit Festplatte zum Einsatz. Die Festplatte habe ich gewählt, da sehr häufig Daten in der Datenbank hinterlegt werden.

Technische Umsetzung

Probeaufbau der Platine
Erste Umsetzung

Die Sensoren sollen einen möglichst großen Abstand zum ESP8266 haben, da der Sender durch die ununterbrochene Stromversorgung jede Menge Wärme erzeugt. Darum kann es zu höheren Temperaturen an den Sensoren kommen. Dem Regensensor ist das egal, aber wir messen ja schließlich auch die Temperatur.

Die Programmierung

Um die Daten zu speichern habe ich einige Dateien in PHP programmiert.
Ich übertrage die Daten vom ESP8266 (ESPEasy geflasht) an den Raspberry Pi.
Dieser speichert die Daten in einer Maria-DB und sendet sie weiter an eine Datenbank im Internet.
Ich zeige die Dateien zur Nachvollziehen im einzelnen. In meiner Programmierung übernimmt die Datenaufzeichnung eine einzelne Datei, die die entsprechende Tabelle für die Sensordatenspeicherung aus einer weiteren Datenbanktabelle ausliest und dort speichert.
Darüber hinaus werden die Daten auf dem Raspberry PI zum einen über die Schnittstelle an diverse Displays und eine LED-Leiste ausgegeben und zum anderen auf einer Website dargestellt.

Datei zur Speicherung der übergebenen Daten (BMP280)

<?php
    // Create connection
    $link = mysqli_connect("localhost","<dbuser>","<dbpasswort>","<dbname>");

    // Check connection
    if (mysqli_connect_errno())
      {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
    $value1 = $_GET["value1"];	//Temperatur
    $value3 = $_GET["value3"];	//Luftdruck
		
    $sql ="INSERT INTO `<tabellenname>` (`lfd_Nr`, `Datum`, `Temperatur`, `Luftdruck`) VALUES (NULL, NOW(), '".$value1."', '".$value3."')";
    $resultnav=mysqli_query($link, $sql)or die(mysqli_error());
?>

Datei zur Speicherung der übergebenen Daten (DHT11)

<?php
    // Create connection
    $link = mysqli_connect("localhost","<dbuser>","<dbpasswort>","<dbname>");

    // Check connection
    if (mysqli_connect_errno())
      {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
      else
      {
          echo "Connected successfully";
      }
    mysqli_query("SET NAMES 'utf8'");
    $value1 = $_GET["value1"];	//Temperatur
    $value2 = $_GET["value2"];	//Luftfeuchtigkeit
	
    $sql ="INSERT INTO `<tabellenname>` (`lfd_Nr`, `Datum`, `Temperatur`, `Luftfeuchtigkeit`) VALUES (NULL, NOW(), '".$value1."', '".$value2."')";
    $resultnav=mysqli_query($link, $sql)or die(mysqli_error());
?>

Hardwareausgabe

Ausgegeben werden die einzelnen Werte von Temperatur, Luftdruck und Luftfeuchtigkeit auf 0,96″-OLED-Displays und die Windstärke anhand einer LED-Leiste.

Erstes Layout der Ausgabe