In diesem Beitrag möchte ich dir die DIY IoT Wetterstation mit dem Mikrocontroller ESP8266, einem OLED Display sowie dem DHT11 Sensor vorstellen.
Bezug der DIY IoT Wetterstation
Diese kleine Wetterstation mit dem ESP8266 Mikrocontroller habe ich über aliexpress.com für ca. 7 € inkl. 4 € Versandkosten erstanden. Auf ebay.de erhältst 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 30 cm 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, 20 cm, Buchse – Buchse (zum alternativen Anschluss des DHT11 Sensors)
Geliefert wurde das Display sowie der Sensor in jeweils kleine, antistatische Tüten.
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 2 cm zu hoch absteht.
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.
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.
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 der DIY IoT Wetterstation
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.
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.
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(); }
Download
Hier nun der Sketch zum bequemen Download.
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.
Hi,
klaro geht das, du musst “nur” das Display löschen einpaar Millisekunden warten und dann die Daten neu schreiben.
Gruß,
Stefan Draeger
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?
Hi,
ich werde mir das gerne mal anschauen und ggf. darüber einen Beitrag schreiben.
Gruß und Danke,
Stefan Draeger
Ein interessanter Sketch. Dafür danke ich Ihnen. Könnte man diesen Sketch zum zeitgleichen Server erweitern?