Temperaturanzeige auf einem LCD mit einem ESP32-Wroom



Seite als PDF

Ziel des Projekts

Tem­pe­ra­tur und Luft­feuch­tig­keit wer­den wahl­wei­se mit einem SHT20, einem DHT11 oder einem DHT22 gemes­sen. Alle Wer­te wer­den im Seri­el­len Moni­tor aus­ge­ge­ben, auf dem LCD kön­nen nur die Daten eines Sen­sors ange­zeigt wer­den. Der ESP32-Wroom ver­bin­det sich über WiFi mit einem Zeit­ser­ver und zeigt das aktu­el­le Datum und die aktu­el­le Zeit an.

Hier gibt es die Lösung für den ⇒SHT40.

Benö­tig­te Bauteile

  • Tem­pe­ra­tur­sen­sor SHT20, DHT11 oder DHT22
  • 4-zei­li­ges LCD mit I²C-Schnitt­stel­le 20×4
  • Lei­tungs­dräh­te

Board installieren

Der Schaltplan

(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Das Programm

Bibliotheken und Variablen

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);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ähnliche Projekte:


letz­te Aktua­li­sie­rung: Jan. 2, 2026 @ 10:10

Inhalt