
Temperatur und Luftfeuchtigkeit werden wahlweise mit einem SHT20, einem DHT11 oder einem DHT22 gemessen. Alle Werte werden im Seriellen Monitor ausgegeben, auf dem LCD können nur die Daten eines Sensors angezeigt werden. Der ESP32-Wroom verbindet sich über WiFi mit einem Zeitserver und zeigt das aktuelle Datum und die aktuelle Zeit an.

Hier gibt es die Lösung für den ⇒SHT40.
So sieht es aus:


Benötigte Bauteile:
- Temperatursensor SHT20, DHT11 oder DHT22
- 4‑zeiliges LCD mit I²C-Schnittstelle 20x4
- Leitungsdrähte
Board installieren:
Baue die Schaltung auf
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Binde die benötigten Bibliotheken ein und definiere die Variablen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /* WiFi.h -> WiFi-Verbindungen herstellen time.h -> Zeitfunktionen bereitstellen SHT2x.h -> Messfunktionen für den Sensor SHT20 LCDIC2.h -> Anzeige auf LCD mit I2C-Schnittstelle DHT.h -> Messfunktionen für die Sensoren DHT11/DHT22 */ #include “WiFi.h” #include “time.h” #include “SHT2x.h” #include “LCDIC2.h” #include “DHT.h” // Pin des DHT-Sensors int SENSOR_DHT = 4; // Sensortyp festlegen // DHT22 #define SensorTyp DHT22 // DHT11 // #define SensorTyp DHT11 // dht-Sensor einen Namen und Typ zuweisen DHT dht(SENSOR_DHT, SensorTyp); // Router-SSID und Passwort char Router[] = “Router_SSID”; char Passwort[] = “xxxxxxxx”; // NTP-Server aus dem Pool für Deutschland #define Zeitserver “de.pool.ntp.org” /* Liste der Zeitzonen https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv Zeitzone CET = Central European Time ‑1 -> 1 Stunde zurück CEST = Central European Summer Time von M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr */ #define Zeitzone “CET-1CEST,M3.5.0/02,M10.5.0/03” // time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr time_t aktuelleZeit; /* Struktur tm tm_hour -> Stunde: 0 bis 23 tm_min -> Minuten: 0 bis 59 tm_sec -> Sekunden 0 bis 59 tm_mday -> Tag 1 bis 31 tm_mon -> Monat: 0 (Januar) bis 11 (Dezember) tm_year -> Jahre seit 1900 tm_yday -> vergangene Tage seit 1. Januar des Jahres tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time) */ // Zeit -> Name der Struktur tm Zeit; // Kommunikation des Servers über den Standardport 80 WiFiServer Server(80); // Name des Klienten WiFiClient Client; // 4‑zeiliges LCD LCDIC2 lcd(0x27, 20, 4); // ESP32 I2C-Pins #define SDA 21 #define SCL 22 // sht Wire zuordnen SHT2x sht(&Wire); // statischeIP = false -> IP-Adresse über DHCP vergeben // statischeIP = true -> statische IP festlegen // ip und gateway müssen an das lokale Netz angepasst werden bool statischeIP = true; IPAddress ip(192, 168, 1, 200); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 255, 0); /* öffentliche DNS-Server ———————————————– OpenDNS 208, 67, 222, 222 (USA) Google 8, 8, 8, 8 (USA) Cloudfare 1, 1, 1, 1 (USA) DNSWWatch 84.200.69.80 (Deutschland) Quad9 9, 9, 9, 9 (Schweiz) Neustar UltraDNS 56, 154, 70, 3 (USA, gefiltert) Deutsche Telekom 217, 5,100,185 ———————————————— oder die im Router eingetragene IP im Beispiel: 192, 168, 1, 20 */ IPAddress primaryDNS(192, 168, 1, 20); IPAddress secondaryDNS(9, 9, 9, 9); |
Der setup-Teil. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | void setup() { // Zeitzone: Parameter für die zu ermittelnde Zeit configTzTime(Zeitzone, Zeitserver); Serial.begin(9600); // auf serielle Verbindung warten while (!Serial); delay(500); // WiFi starten WiFi.mode(WIFI_STA); WiFi.begin(Router, Passwort); // statische IP vergeben if (statischeIP) { WiFi.config(ip, gateway, subnet, primaryDNS, secondaryDNS); Serial.print(“Verbunden mit ”); Serial.println(Router); // IP anzeigen Serial.print(“IP: ”); Serial.println(ip); } // IP über DHCP ermitteln else { while (WiFi.status() != WL_CONNECTED) { delay(200); Serial.print(“.”); } Serial.println(); Serial.print(“Verbunden mit ”); Serial.println(Router); Serial.print(“IP: ”); Serial.println(WiFi.localIP()); } // Wire mit den Parametern für I2C starten Wire.begin(SDA, SCL); // sht-Sensor startem sht.begin(); // dht-Sensor starten dht.begin(); // LCD starten lcd.begin(); // Cursor “verstecken” lcd.setCursor(false); } |
Der loop-Teil. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | void loop() { // aktuelle Zeit holen time(&aktuelleZeit); // localtime_r -> Zeit in die lokale Zeitzone setzen localtime_r(&aktuelleZeit, &Zeit); lcd.setCursor(0, 0); // es kann bis zu 60 Sekunden dauern // bis die Zeit ermittelt wird // Tag: führende 0 ergänzen if (Zeit.tm_mday < 10) { Serial.print(“0”); lcd.print(“0”); } Serial.print(Zeit.tm_mday); lcd.print(String(Zeit.tm_mday)); Serial.print(“.”); lcd.print(“.”); // Monat: führende 0 ergänzen if (Zeit.tm_mon < 10) { Serial.print(“0”); lcd.print(“0”); } // Zählung beginnt mit 0 -> +1 Serial.print(Zeit.tm_mon + 1); lcd.print(String(Zeit.tm_mon + 1)); Serial.print(“.”); lcd.print(“. ”); // Anzahl Jahre seit 1900 Serial.print(Zeit.tm_year + 1900); Serial.print(“ ”); // Stunde: wenn Stunde < 10 -> 0 davor setzen if (Zeit.tm_hour < 10) { Serial.print(“0”); lcd.print(“0”); } Serial.print(Zeit.tm_hour); Serial.print(“:”); lcd.print(String(Zeit.tm_hour)); lcd.print(“:”); // Minuten if (Zeit.tm_min < 10) { Serial.print(“0”); lcd.print(“0”); } Serial.print(Zeit.tm_min); lcd.print(String(Zeit.tm_min)); Serial.print(“:”); lcd.print(“:”); // Sekunden if (Zeit.tm_sec < 10) { Serial.print(“0”); lcd.print(“0”); } Serial.print(Zeit.tm_sec); lcd.print(String(Zeit.tm_sec)); Serial.println(); // sht-Sensor lesen sht.read(); // gelesene Temperatur sht in String mit 2 Nachkommastellen umwandeln String gemesseneTemperaturSHT = String(sht.getTemperature(), 2); // . durch , ersetzen gemesseneTemperaturSHT.replace(“.”, “,”); // gemessene Luftfeuchtigkeit sht in String mit 2 Nachkommastellen umwandeln String gemesseneLuftfeuchtigkeitSHT = String(sht.getHumidity(), 2); // . durch , ersetzen gemesseneLuftfeuchtigkeitSHT.replace(“.”, “,”); // gemessene Temperatur dht in String umwandeln String gemesseneTemperaturDHT = String(dht.readTemperature()); // . durch , ersetzen gemesseneTemperaturDHT.replace(“.”, “,”); // gemessene Luftfeuchtigkeit dht in String umwandeln String gemesseneLuftfeuchtigkeitDHT = String(dht.readHumidity()); // . durch , ersetzen gemesseneLuftfeuchtigkeitDHT.replace(“.”, “,”); // Temperatur/Luftfeuchtigkeit sht anzeigen Serial.println(“Temperatur SHT: ” + gemesseneTemperaturSHT + “°C”); Serial.println(“Luftfeuchtigkeit SHT : ” + gemesseneLuftfeuchtigkeitSHT + “%”); // Temperatur/Luftfeuchtigkeit dht anzeigen Serial.println(“Temperatur DHT: ” + gemesseneTemperaturDHT + “°C”); Serial.println(“Luftfeuchtigkeit DHT : ” + gemesseneLuftfeuchtigkeitDHT+ “%”); Serial.println(“——————————–”); // Ausgabe auf dem LCD sht lcd.setCursor(0, 1); lcd.print(“Temperatur: ”); lcd.print(gemesseneTemperaturSHT + “\337C”); lcd.setCursor(0, 2); lcd.print(“Luftfeuchtigkeit:”); lcd.setCursor(0, 3); lcd.print(gemesseneLuftfeuchtigkeitSHT + “%”); /* Ausgabe auf dem LCD dht lcd.setCursor(0, 1); lcd.print(“Temperatur: ”); lcd.print(gemesseneTemperaturDHT + “\337C”); lcd.setCursor(0, 2); lcd.print(“Luftfeuchtigkeit:”); lcd.setCursor(0, 3); lcd.print(gemesseneLuftfeuchtigkeitDHT + “%”); */ // alle 30 Sekunden aktualisieren delay(30000); } |
Verwandte Anleitungen:
- BME280 ‑Messdaten anzeigen
- DHT — Messdaten und Zeit auf TFT anzeigen
- DHT11/DHT22 — Durchschnittstemperatur berechnen und auf einem OLED-Display anzeigen
- DHT11/DHT22 — Wetterdaten aufzeichnen
- DHT11/DHT22 — Wetterdaten mit Bluetooth-Modul übermitteln
- DHT11/DHT22 — Wetterstation LAN
- DHT11/DHT22 — Wetterstation Anzeige auf einem LCD
- DHT11/DHT22 — Wetterstation WiFi
- ESP — DHT Messdaten auf Waveshare 1,54 Zoll E‑Ink anzeigen
- ESP32-Wroom – BMP280/DHT Zeit und Messdaten auf TFT anzeigen
letzte Aktualisierung:






