Fensterkontakt (Reed) mit Temperatursteuerung

Hallo zusammen,
seit Wochen beschäftige ich mich meinem Projekt, dass mich an den Rand der Verzweifelung gebracht hat. Meine Hardware stellt sich aus dem ESP 8266 D1 Mine Wemos, einem Taster als Reedkontaktersatz und LCD Display Themperatur Sensor DHT 22 und einer LED zusammen.
Bei meinem Projekt habe ich einen Reedkontakt (Taster) an mein Badfenster angebaut,
damit ich sehen kann, ob die Badfenster verschlossen ist oder offen.
Über den Taster lasse mir den Status anzeigen, ob das Fenster offen oder geschlossen ist.
Desweitern habe ich einen Temperatursensor (DHL 22) angeschlossen und mir den Wert der Temperatur auf einer Webseite und auf dem LCD-Display anzeigen zulassen. Das funkuniert auch so weit alles.
Nun meine Frage: wie kann man in den Sketch folgendes einbinden, ich möchte gerne das, wenn die Temperatur unter 20 Grad ist eine Meldung bekomme. Dann sollte auf dem LCD-Display und auf der Webseite stehen „Fenster schließen „, und der Piezo summer (Buzzer) soll ertönen.
Da ich noch blutiger Anfänger bin und gar nicht mehr weiter komme, hätte ich gerne eure Hilfe. Danke im vorraus.

Mein Sender Code`

#include <ESP8266WebServer.h>
#include "DHT.h"
#define sensor DHT22
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x3F for a 16 chars and 2 line display

// DHT22:   PIN 1:  VCC     mit 3,3 oder 5V verbinden (funzte beides)
//          PIN 2:  Data    mit D2 oder D6 funktioniert es, an D8 auch aber dann lässt sich der ESP8266 nicht mehr flashen. Spannungsteiler mit 10K Widerstand
//                          Siehe Zeichnung wemos_d1_mini_dht22_bb.jpg im Verzeichnis dieses Skriptes
//          PIN 3:  NC      bleibt unbelegt
//          PIN 4:  GND     mit Masse / G verbinden

// Typ des Sensors, hier DHT22
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Zugangsdaten zum WLAN:
const char* ssid = "xxxx";
const char* password = "xxxxx";

ESP8266WebServer server(80);

// DHT Sensor
// PIN mit dem "Data" des DHT22 verbunden ist
// uint8_t DHTPin = D2; 
uint8_t DHTPin = 12; 
               
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                

float Temperature;
float Humidity;

const int BUZZER = 13; 
int d0 =16;//Taster
int d0_Status = 0;

const int ledPin = 14; //Led Gelb
//const int ledPin2 = 0; //Led Rot
//int TasterLesen;
int ledState = LOW;

unsigned long previousMillis = 0;

const long intervalAN = 150;// Zeit Led an
const long intervalAUS = 2000; // Zeit aus


 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(DHTPin, INPUT);

  dht.begin();              

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
  lcd.begin();  //Display einschalten
  lcd.clear();         
  lcd.backlight();
  
    pinMode(BUZZER, OUTPUT);
    pinMode(ledPin, OUTPUT);
    pinMode (d0,INPUT);
}
void blinken(){
  bool d0_Status = digitalRead(d0);
  if (d0_Status == HIGH){  //Taster gesclossen
   unsigned long currentMillis = millis();
 
  if (currentMillis - previousMillis >= intervalAUS) {
    previousMillis = currentMillis;
    ledState = HIGH;
    digitalWrite(ledPin, ledState);
    } else if (currentMillis - previousMillis >= intervalAN) {
    //previousMillis = currentMillis;
    ledState = LOW;
    digitalWrite(ledPin, ledState);
    }
  }
  }
void loop() {
  
  server.handleClient();
  blinken();
 
  lcd.setCursor(0,0);
  lcd.print("AkLuftf: ");
  lcd.print(Humidity); 
  lcd.print(" %");
  lcd.setCursor(0,1);
  lcd.print("AkThemp: ");
  lcd.print(Temperature); 
  lcd.print(" \337C");
  lcd.setCursor(0,2);
    d0_Status = digitalRead(d0);
    if (d0_Status == HIGH)lcd.print("Fenster offen      ");
    else lcd.print("Fenster geschlossen");
   // d0_Status = digitalRead(d0);
  //if (d0_Status && Temperature = 20){  //Wenn Fenster offen ist und eine Temperatur unter 20 Grad dann sollen der Buzzer piepsen
                                         //und eine Meldung auf der Webseite erscheinen " Fenster schliesen".
//  digitalWrite(BUZZER, HIGH); //turn on the buzzer
//  delay(250);
//  digitalWrite(BUZZER, LOW);  //turn off the buzzer
//   delay(250);
  
}

void handle_OnConnect() {

 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity));
  
   
}


  
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP8266 Badezimmer</title>\n";
  ptr +="<meta http-equiv=\"refresh\" content=\"2\" >";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 Badezimmer </h1>\n";
  
  ptr +="<p>Aktulle Temperatur: ";
  ptr +=(int)Temperaturestat;
  ptr +=" C</p>";
  ptr +="<p>Luftfeuchtigkeit: ";
  ptr +=(int)Humiditystat;
  ptr +=" %</p>";
  
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}
tippe oder füge den Code hier ein

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

#include <ESP8266WebServer.h>
#include "DHT.h"
#define sensor DHT22
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x3F for a 16 chars and 2 line display

// DHT22:   PIN 1:  VCC     mit 3,3 oder 5V verbinden (funzte beides)
// PIN 2:  Data    mit D2 oder D6 funktioniert es, an D8 auch aber dann lässt sich der ESP8266 nicht mehr flashen. Spannungsteiler mit 10K Widerstand
// Siehe Zeichnung wemos_d1_mini_dht22_bb.jpg im Verzeichnis dieses Skriptes
// PIN 3:  NC      bleibt unbelegt
// PIN 4:  GND     mit Masse / G verbinden

// Typ des Sensors, hier DHT22
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Zugangsdaten zum WLAN:
const char *ssid = "Kunterbund";
const char *password = "05294428498023536871";

ESP8266WebServer server(80);

// DHT Sensor
// PIN mit dem "Data" des DHT22 verbunden ist
// uint8_t DHTPin = D2;
uint8_t DHTPin = 12;

// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

float Temperature;
float Humidity;

const int BUZZER = 13;
int d0 = 16; //Taster
int d0_Status = 0;

const int ledPin = 14; //Led Gelb
//const int ledPin2 = 0; //Led Rot
//int TasterLesen;
int ledState = LOW;

unsigned long previousMillis = 0;

const long intervalAN = 150;// Zeit Led an
const long intervalAUS = 2000; // Zeit aus

// Neue Einträge:
const uint8_t switchTemperature = 20; // Umschalttemperatur
const uint8_t hysterese = 2;  // Temperaturunterschied damit das DIng nicht ständig piept und nicht piept
bool isCold = false;

void setup()
{
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: "); Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
  lcd.begin();  //Display einschalten
  lcd.clear();
  lcd.backlight();
  pinMode(BUZZER, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode (d0, INPUT);
}
void blinken()
{
  bool d0_Status = digitalRead(d0);

  if (d0_Status == HIGH)   //Taster gesclossen
  {
    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= intervalAUS)
    {
      previousMillis = currentMillis;
      ledState = HIGH;
      digitalWrite(ledPin, ledState);
    }
    else if (currentMillis - previousMillis >= intervalAN)
    {
      //previousMillis = currentMillis;
      ledState = LOW;
      digitalWrite(ledPin, ledState);
    }
  }
}

void displayCold()
{
  lcd.setCursor(0, 0);
  lcd.print(F("MACH DAS FENSTER ZU!"));
}

void displayData()
{
  lcd.setCursor(0, 0);
  lcd.print("AkLuftf: ");
  lcd.print(Humidity);
  lcd.print(" %");
  lcd.setCursor(0, 1);
  lcd.print("AkThemp: ");
  lcd.print(Temperature);
  lcd.print(" \337C");
  lcd.setCursor(0, 2);
}

void grenzTemperature()
{
  if (temperature < switchTemperature)
  { iscold = true; }
  else if (temperature > switchTemperature + hysterese)
  { iscold = false; }
}

void checkCold()
{
  if (isCold)
  {
    if (digitalRead(BUZZER) == LOW)
    {
      lcd.clear();
      displayIsCold();
      digitalWrite(BUZZER, HIGH);
    }
  }
  else
  {
    if (digitalRead(BUZZER) == HIGH)
    {
      lcd.clear();
      digitalWrite(BUZZER, LOW);
    }

    dislayData();
  }
}

void loop()
{
  server.handleClient();
  blinken();
  grenzTemperature();
  checkCold();
  d0_Status = digitalRead(d0);

  if (d0_Status == HIGH)
  {
    lcd.print("Fenster offen      ");
  }
  else
  {
    lcd.print("Fenster geschlossen");
  }

  // d0_Status = digitalRead(d0);
  //if (d0_Status && Temperature = 20){  //Wenn Fenster offen ist und eine Temperatur unter 20 Grad dann sollen der Buzzer piepsen
  //und eine Meldung auf der Webseite erscheinen " Fenster schliesen".
  // digitalWrite(BUZZER, HIGH); //turn on the buzzer
  // delay(250);
  // digitalWrite(BUZZER, LOW);  //turn off the buzzer
  // delay(250);
}

void handle_OnConnect()
{
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity
  server.send(200, "text/html", SendHTML(Temperature, Humidity));
}
void handle_NotFound()
{
  server.send(404, "text/plain", "Not found");
}
String SendHTML(float Temperaturestat, float Humiditystat)
{
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr += "<title>ESP8266 Badezimmer</title>\n";
  ptr += "<meta http-equiv=\"refresh\" content=\"2\" >";
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr += "p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
  ptr += "<div id=\"webpage\">\n";
  ptr += "<h1>ESP8266 Badezimmer </h1>\n";
  ptr += "<p>Aktulle Temperatur: ";
  ptr += (int)Temperaturestat;
  ptr += " C</p>";
  ptr += "<p>Luftfeuchtigkeit: ";
  ptr += (int)Humiditystat;
  ptr += " %</p>";
  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}

Vielleicht.

Hoffe das sind nicht Deine gültigen Zugangsdaten.

Einfach mit einem
if(temperatur < 20)
{
„Fenster schließen „ ausgeben
Pin für Buzzer ansteuern.
}

Grüße Uwe

Und den Display nicht von den anderen Infos überschreiben lassen... etc.

Können es nicht sein, da das Passwort mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen oder leer sein muss. :wink:

Gruß Tommy

In der Hardware fällt mir auf:
Hast du am Reedkontakt einen Pulldown Widerstand?
Der gewählte Pin D0 (GPIO16) ist dafür nicht optimal. Hier bitte nachlesen.

Betreibst du dein Display an 5 Volt ?
Wenn ja, kann das Problem bringen, da der ESP nur 3,3V an den Pins verträgt.

Wollte die Angaben des TO nicht wiederholen.

Grüße Uwe

Das bezog sich auf Uwe in #8.

Gruß Tommy