ESP8266 DIY IoT Wetterstation mit OLED Display und DHT11 Sensor

In diesem Beitrag möchte ich dir die DIY IoT Wetterstation mit dem  Microcontroller ESP8266, einem OLED Display sowie dem DHT11 Sensor vorstellen.

DIY IoT ESP8266 Wetterstation
DIY IoT ESP8266 Wetterstation

Bezug

Diese kleine Wetterstation mit dem ESP8266 Microcontroller habe ich über aliexpress.com für ca. 7€ inkl. 4€ Versandkosten erstanden. Auf ebay.de erhälst du diesen Bausatz für ca. 17€ inkl. Versandkosten.

Da beide Produkte aus dem asiatischen Raum geliefert werden, denke ich das die Lieferzeit ziemlich ähnlich sein werden und somit empfehle ich das deutlich günstigere Produkt von aliexpress.com.

Lieferumfang

Zum Lieferumfang gehört:

  • ein 30cm langes USB Kabel (USB Typ A Stecker auf Micro USB Buchse),
  • eine Hauptplatine mit dem ESP8266 Chip,
  • ein 0,96″ OLED Display, 
  • ein DHT11 Sensor, sowie
  • 3 Breadboardkabel, 20cm, Buchse – Buchse (zum alternativen Anschluß des DHT11 Sensors)

Geliefert wurde das Display sowie der Sensor in jeweils kleine, antistatische Tüten.

Lieferumfang, DIY IoT Wetterstation
Lieferumfang, DIY IoT Wetterstation

Die Hauptplatine wurde zusammen mit dem USB Kabel in einer kleinen Plastikbox geliefert, welche jedoch so groß ist dass, das Display und der Sensor einen Platz darin finden. Leider kann diese Box aber nicht als Gehäuse für diesen Bausatz verwendet werden da der DHT11 Sensor knapp 2cm zu hoch absteht.

Aufbewahrungsbox für die Bauteile zur DIY IoT Wetterstation
Aufbewahrungsbox für die Bauteile zur DIY IoT Wetterstation

Zusammenbau der Komponenten

Dieser kleine und vor allem sehr übersichtliche Bausatz (3 Bauteile) wird über Stiftleisten und Buchsen zusammengesteckt. Der DHT11 Sensor ist dabei fertig aufgebaut und wird in die 3 Polige Buchse oben rechts gesteckt. Es ist dabei auf die korrekte Polung zu achten. 

An das Display muss die vierpolige Stiftleiste angelötet werden, ich stecke dazu diese Stiftleiste auf ein Breadboard und fixiere das Display mit UHU patterfix. 

anlöten der Stiftleiste an das 0,96" OLED Display
anlöten der Stiftleiste an das 0,96″ OLED Display

Der Vorteil bei UHU patterfix ist, das dieses etwas klebt und leicht formbar ist. Des Weiteren bleibt dieses sehr lange formbar und kann somit sehr oft wiederverwendet werden.

Besonderheiten beim OLED Display

Die Pinleiste des OLED Displays ist anders angeordnet als wie bei anderen Displays dieser Bauart. 
Auf der linken Seite im Bild findest du das 0,96″ OLED Display welches dem Bausatz beilegt ist, hier sieht man das v.l.n.r die Pinbelegung VCC, GND, SCL und SDA ist.
Im rechten Bereich des Bildes habe ich ein 1,3″ OLED Display gestellt hier ist die Belegung von VCC & GND verdreht.

OLED Displays im Vergleich
OLED Displays im Vergleich

Somit kann leider kein anderes Display einfach angesteckt werden. Hier hätte meiner Meinung nach der Hersteller etwas drauf achten können und somit hätte der Endkunde etwas mehr Spielraum bei der Auswahl eines Displays. Jedoch kann man sich mit entsprechenden Breadboardkabeln behelfen und trotzdem ein anderes Display anschließen. (Das sieht dann aber nicht mehr ganz so schön aus.)

Programmierung

Für die Programmierung nutze ich die Entwicklungsumgebung Arduino IDE in der Version 1.8.12 welche du kostenfrei von der Seite https://www.arduino.cc/en/Main/Software herunterladen kannst. 

Installieren des Treibers für den ESP8266

Der Treiber für den ESP8266 ist nicht Standardmäßig in der Arduino IDE installiert, damit wir diesen programmieren können müssen wir dieses also nachholen.

Schritt 1 – Boardverwalter URL ergänzen

Als erstes müssen wir in den Voreinstellungen unter „Zusätzliche Boardverwalter-Urls“ die Adresse

http://arduino.esp8266.com/stable/package_esp8266com_index.json

hinzufügen.

erweitern der Boardverwalter Urls für den ESP Treiber
erweitern der Boardverwalter Urls für den ESP Treiber

Schritt 2 – Installieren des Treibers über den Boardverwalter

Wenn man nun den Boardverwalter („Werkzeug“ > „Board:“ > „Boardverwalter…“) öffnet kann man den Treiber unter der Eingabe der Zeichenkette „esp8266“ installieren.

Boardverwalter - ESP8266 Treiber
Boardverwalter – ESP8266 Treiber

In meinem Fall ist dieser bereits installiert.

benötigte Bibliotheken

Für die Programmierung des Sketches / Programmes benötigen wir 3 Bibliotheken, zwei für das Display und eine für den DHT11 Sensor.

Für das OLED Display verwende ich die Adafruit GFX und Adafruit SSD1306 Bibliothek. Beide Bibliotheken findest du im Bibliotheksverwalter der Arduino IDE. Den Boardverwalter öffnest du in dem du über das Hauptmenü „Sketch“ > „Bibliothek einbinden…“ > „Bibliotheken verwalten…“ navigierst. 

Dort gibst du nun die Zeichenkette „gfx“ ein und suchst nach dem Eintrag „Adafruit GFX Library“ und installierst diese über die Schaltfläche „Installieren“. Das gleiche machst du ebenfalls mit der Bibliothek „ssd1306“ (der Eintrag lautet „Adafruit SSD1306“).

Wenn beide Bibliotheken installiert sind wird als letztes die Bibliothek für den DHT11 Sensor installiert. Hier gibt es diverse Bibliotheken ich verwende die „DHT sensor library“ von Adafruit.

Es ist nach der Installation kein neustarten der Arduino IDE notwendig, die Treiber und Bibliotheken sind sofort Einsatzbereit.

Ausgabe der Sensordaten auf dem Display

//Bibliothek für die Kommunikation über I2C
#include <Wire.h>

//Bibliothek für den Sensor DHT11
#include "DHT.h"

//Bibliotheken zum betreiben des Displays
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Der DHT11 Sensor ist am Board über den 
//digitalen Pin D5 angeschlossen
#define DHTPIN 5 
//Der Sensor ist vom Typ DHT11
//Theoretisch könnte man den DHT11 auch gegen einen
//DHT22 oder ASM2320 austauschen, diese Sensoren sind
//baugleich 
#define DHTTYPE DHT11
//erstellen einer Instanz des Sensor Objektes
DHT dht(DHTPIN, DHTTYPE);

//default Rest des Displays
#define OLED_RESET 4
//eine neue instanz für das Display erzeugen
Adafruit_SSD1306 display(OLED_RESET);

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  //eventuelle Fehler (zbsp. beim lesen der Werte des DHT11 Sensors) 
  //werden auf der seriellen Schnittstelle ausgegeben
  Serial.begin(9600);
  //beginn der Kommunikation mit dem DHT11 Sensor
  dht.begin();
  //setzen der I2C Pins auf digital D2 und digital D14
  Wire.begin(2,14);
  //beginn der Kommunikation mit dem Display
  //das OLED Display verfügt über die Adresse 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  //setzen der Textgröße auf den kleinsten Wert von 1
  display.setTextSize(1);
  //setzen der Schriftfarbe "weiß"
  display.setTextColor(WHITE);
}

void loop() {
  //eine Pause von 2 Sekunden
  delay(2000);
  //lesen der rel. Luftfeuchtigkeit
  float h = dht.readHumidity();
  //lesen der Temperatur in Grad Celsius
  //mit der übergabe des Parameters "false" in der Funktion 
  //readTemperature(), wird der Wert in Grad Fahrenheit geliefert
  float t = dht.readTemperature();

  //prüfen ob Zahlenwerte geliefert wurden
  //Wenn der Sensor nicht gefunden wurde, dann enthalten die flaot Variablen "NaN"
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Fehler beim lesen der Sensorwerte!"));
    return;
  }

  //löschen des Displays
  display.clearDisplay();
  //setzen des Cursors an die Position Spalte = 0, Zeile = 0
  display.setCursor(0, 0);
  //schreiben der Temperatur,
  //der Wert der Variable t wird dabei in ein String umgewandelt und
  //auf zwei Stellen nach dem Komma gekürzt.
  display.println("Temp.: " + String(t,2)+"C");
  //setzen des Cursors an die Position Spalte = 0 , Zeile = 15
  display.setCursor(0, 15);
  //schreiben der rel. Luftfeuchtigkeit
  //der Wert der Variabel h wird dabei in ein String umgewandelt und
  //auf zwei Stellen nach dem Komma gekürzt.
  display.println("Humidity: "+String(h,2)+"%");  
  //aktualisieren des Displays
  display.display();
}
Darstellen der Sensorwerte des DHT11 auf dem 0,96" OLED Display
Darstellen der Sensorwerte des DHT11 auf dem 0,96″ OLED Display

Download

Hier nun der Sketch zum bequemen Download.

 

8 Kommentare

  1. Hallo,
    gibt es eine Möglichkeit das Display bei einer vorher festgelegten Temperaturüberschreitung , blinken zu lassen?
    Ich messe die Temperatur in meinem Terrarium und hätte gerne zusätzlich einen „alarm“ , den würde ich gerne in Form des blinkenden Display realisieren. Kannst du mir einen tip geben wie ich das im Code umsetzen könnte?
    MfG.

    1. Hi,

      klaro geht das, du musst „nur“ das Display löschen einpaar Millisekunden warten und dann die Daten neu schreiben.

      Gruß,

      Stefan Draeger

      1. Nabend,
        Okay den schritt verstehe ich. Nun möchte ich aber das Display bei sagen wir 30°C anfangen lassen zu blinken, da bei dieser Temperatur eine kritische Schwelle im Terrarium überschritten wird.
        Kannst du mir einen Tip geben wie ich das machen könnte?

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert