In diesem Beitrag möchte ich dir zeigen, wie du eine akustische und optische Meldung bei Überschreitung eines Schwellwertes an der ESP8266 Wetterstation implementieren kannst.
Die ESP8266 Wetterstation habe ich dir bereits in den Beiträgen
- ESP8266 DIY IoT Wetterstation mit OLED Display und DHT11 Sensor
- ESP8266 DIY IoT Wetterstation, Webseite mit Sensordaten – Teil 2
- ESP8266 Wetterstation mit ESP Easy
vorgestellt.
benötigte Bauteile
Für den Nachbau benötigst du folgende Bauteile:
- einen Piezo Buzzer*,
- drei LEDs, rot, gelb, grün*,
- drei 220 Ohm-Widerstände*,
- ein 170 Pin Breadboard*,
- acht Breadboardkabel, 10 cm männlich – weiblich*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Und natürlich benötigst du auch die ESP8266 Wetterstation mit DHT11 Sensor. Diese kannst du zum Beispiel über aliexpress.com für 6,59 € inkl. Versandkosten erstehen.
Aufbau der Schaltung
Der ESP8266 auf der IoT Wetterstation verfügt über 9 GPIOs für die digitalen und 1 einen für analoge Signale.
Des Weiteren sind die üblichen Pins wie VCC, GND sowie UART (TX, RX) vorhanden.
Wenn du die von mir gezeigte ESP8266 Wetterstation nicht hast, dann kannst du dir diese recht einfach auch mit einem Wemos D1 Mini aufbauen.
Anschluss der LEDs und des Piezo Buzzers
Die drei LEDs sowie der Piezo Buzzer werden auf das Breadboard gesteckt und mit den GPIOs verbunden.
In meinem Beispiel verbinde ich nun:
- die rote LED mit IO16,
- die gelbe LED mit IO12,
- die grüne LED mit IO13, sowie
- den Piezo Buzzer mit IO15
Da die I2C Kommunikation über GPIO14 erfolgt, kann dieser Pin nicht genutzt werden, da sonst das Display nicht “funktionierten” würde!
Das kleine rote Breadboardkabel ist kein VCC Anschluss, sondern verdeutlicht in dem Bild nur die Kabelführung zum GPIO Pin!
Programmierung der ESP8266 Wetterstation mit Schwellwert
Wie man den angeschlossenen DHT11 Sensor ausliest, habe ich im oben verlinken Beitrag bereits gezeigt, jedoch möchte ich in diesem Beitrag ESP Easy nutzen, um am ESP8266 eine akustische & optische Meldung zu konfigurieren.
Was ist ESP Easy?
ESP Easy ist eine Firmware mit welcher man nicht programmiert, sondern konfiguriert d.h. in der Regel entfällt eine aufwändige Programmierung des Mikrocontrollers.
Die ESP8266 habe ich bereits für ESP Easy geflasht und kann somit per Browser auf diesen zugreifen.
Einrichten der I2C Konfiguration sowie des DHT11 Sensors und des OLED Displays
I2C Konfiguration
Bevor wir mit der Konfiguration (in diesem Fall ein Skript) der LEDs und des Piezo Buzzers beginnen können, müssen wir die I2C Pins einstellen.
Das komplette Beispiel wie du die ESP8266 Wetterstation mit ESP Easy konfigurierst und betreibst findest du unter ESP8266 Wetterstation mit ESP Easy.
DHT11 Sensor einrichten
Des Weiteren richten wir den DHT11 Sensor ein.
Daten auf dem OLED Display anzeigen
Das verbaute OLED Display wird als “OLED SSD1306/SH1106 Framed” eingerichtet. ACHTUNG es gibt auch einen Eintrag nur “Display – OLED SSD1306” welcher etwas weniger Möglichenkeit zur Einstellung bietet.
Folgende Werte müssen angepasst werden:
- Name “Display”
- Enabled (Haken gesetzt)
- Rotation: “Rotated”
- Lines per Frame: “2”
- Scroll: “Instant”
- Header: “Date”
- Header (alternate): “Time”
- Line1: “Temp.: [DHT11#Temp]°C”
- Line2: “Hum.: [DHT11#Hum]%”
- Interval: “6”
Einstellen des Schwellwertes in ESP Easy
Anzeigen des Reiters “Rules”
Den Schwellwert konfigurieren bzw. Skripten wir über eine Rule dazu müssen wir zunächst diesen Reiter anzeigen lassen.
Wenn dieser Reiter angezeigt wir erzeugen wir nun erstmal eine neue Rule damit wir dort den Temperaturwert auslesen und auf diesen reagieren können.
Programm erzeugen
Wenn der Reiter angezeigt wird dann können wir dort unser Skript erzeugen.
Zunächst müssen wir einen Timer beim starten des ESP8266 erzeugen und starten.
On System#Boot do //setze den Timer 1 auf 10 Sekunden timerSet,1,10 endon
Im nächsten Schritt müssen wir nun darauf reagieren wenn der Timer “abgelaufen” ist.
On Rules#Timer=1 do
Nun können wir unseren Schwellwert skripten, in meinem Fall prüfe ich die Temperatur des DHT11 Sensors.
Wenn der Sensor eine Temperatur kleiner 10°C liefert dann soll
- die rote LED (GPIO16) aktiviert,
- die gelbe LED (GPIO12) deaktiviert,
- die grüne LED (GPIO13) deaktiviert
werden.
Das aktivieren einer LED wird mit “gpio,<PIN>,<STATUS>” gemacht. In meinem ersten Fall wird die LED am GPIO 16 aktiviert (aktiviert = 1, deaktiviert = 0).
if [DHT11#Temp] < 10 gpio,16,1 gpio,12,0 gpio,13,0 else
Wenn die Temperatur jedoch größer als 10°C ist und kleiner gleich 20°C dann soll
- die rote LED (GPIO16) deaktiviert,
- die gelbe LED (GPIO12) aktiviert,
- die grüne LED (GPIO13) deaktiviert
werden.
if [DHT11#Temp] >= 10 and [DHT11#Temp] <= 20 gpio,16,0 gpio,12,1 gpio,13,0 else
Wenn die Temperatur jedoch größer als 20°C ist dann soll
- die rote LED (GPIO16) deaktiviert,
- die gelbe LED (GPIO12) deaktiviert,
- die grüne LED (GPIO13) aktiviert
werden.
if [DHT11#Temp] > 20 gpio,16,0 gpio,12,0 gpio,13,1 endif
Hier nun das gesamte Skript:
//Wenn das System gestartet ist, dann... On System#Boot do //setze den Timer 1 auf 10 Sekunden timerSet,1,10 endon //Wenn der Timer 1 abgelaufen ist, dann... On Rules#Timer=1 do if [DHT11#Temp] < 10 gpio,16,1 gpio,12,0 gpio,13,0 else if [DHT11#Temp] >= 10 and [DHT11#Temp] <= 20 gpio,16,0 gpio,12,1 gpio,13,0 else if [DHT11#Temp] > 20 gpio,16,0 gpio,12,0 gpio,13,1 endif endif endif //setze den Timer 1 auf 10 Sekunden timerSet,1,5 endon
implementieren eines Piezo Buzzers
Nachdem nun die LEDs konfiguriert sind möchten wir noch eine akustische Meldung mit einem Piezo Buzzer ausgeben.
Wie du einen Piezo Buzzer mit ESP Easy konfigurierst wird dir auf der offiziellen Wiki-Seite von ESP Easy https://www.letscontrolit.com/wiki/index.php/Buzzer_(RTTTL) ausführlich erläutert.
Es gibt genau zwei Möglichkeiten einen Ton über ESP Easy auszugeben, einmal mit “tone” und zum anderen mit “rttl”. Beide Funktionen stehen mit dem Update / Build vom 14.01.2021 zuverlässig zur Verfügung. D.h. solltest du deinen ESPx Microcontroller mit einem älteren Build geflasht haben, so solltest du diesen vorher aktualisieren.
Du kannst Töne bzw. Tonfolgen über ESP Easy auf den GPIOs 12 bis 16 ausgegeben!
Ich nutze hier eine kleine Tonfolge (aus dem ESP Easy Wiki Beitrag)
rtttl,15:d=10,o=6,b=180,c,e,g
Diese Tonfolge (c,e und g) wird am digitalen GPIO Pin 15 ausgegeben.
das fertige Skript
//Wenn das System gestartet ist, dann... On System#Boot do //setze den Timer 1 auf 10 Sekunden timerSet,1,10 endon //Wenn der Timer 1 abgelaufen ist, dann... On Rules#Timer=1 do if [DHT11#Temp] < 10 gpio,16,1 gpio,12,0 gpio,13,0 rtttl,15:d=10,o=6,b=180,c,e,g else if [DHT11#Temp] >= 10 and [DHT11#Temp] <= 20 gpio,16,0 gpio,12,1 gpio,13,0 else if [DHT11#Temp] > 20 gpio,16,0 gpio,12,0 gpio,13,1 endif endif endif //setze den Timer 1 auf 10 Sekunden timerSet,1,5 endon