
Ziel des Projekts
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.


Benötigte Bauteile
- Temperatursensor SHT20, DHT11 oder DHT22
- 4-zeiliges LCD mit I²C-Schnittstelle 20×4
- Leitungsdrähte
Board installieren
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Das Programm
Bibliotheken und 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
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
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);
}Ähnliche Projekte:
- 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 mit Arduino WiFi
- ESP – DHT Messdaten auf Waveshare 1,54 Zoll E-Ink anzeigen
- Klimaanlage mit 12V-Lüfter und Transistor
letzte Aktualisierung:






