Ich hatte bei mir im Bad Oben das Problem das die Luftfeuchtigkeit zu hoch ist nach dem Duschen und ich meine Kids darauch aufmerksam machen wollte. Das sie nach dem Duschen das Fenster aufmachen sollen.
Also habe ich ein ESP32 und einen Feuchtigkeitssensor und einen Buzzer zurecht gebastelt gehabt. Das hat dann auch alles super funktioniert das der Buzzer Star Wars gespielt hat wenn die Luftfeuchtigkeit zu hoch ist.
Die Kids haben auch schön das Fenster dann nach dem Duschen aufgemacht.
Aber das war mir dann auf die dauer etwas zu langweilig , und habe das AZ Touch Mod von AZ Delivery entdeckt.
Jetzt habe ich im Bad oben das Teil.
In dem Displaygehäuse ist ein ESP32 WROOM-32 eine LED und der DF mini mp3 player.
Extern ist ein DHT20 Temperatur und Luftfeuchtigkeitssensor und ein PIR Bewegungsmelder der das Display anschaltet sobald jeamand im Bad ist.
Das ganze Display lässt sich per Touch steuern. Und ich habe insgesammt 5 Seiten die ich aufrufen kann. Und halt die HomePage wo ich die wichtigsten Sensoren Werte mir anzeigen lasse.
Materialliste:
1x AZ-Touch MOD Wandgehäuseset mit 2,8 Zoll Touchscreen für ESP8266 und ESP32
1x ESP32 Wroom
1x DFPlayer Mini MP3 player
1x rote led
1x DHT20
1x PIY Bewegungssensor
1x 1x Klinken Buchse 3,5mm Adapter
2x USB-A Buchsen
1x USB-A Stecker zum DHT-20 Sensor
1x Mini Micro JST 2.0 mm 3-Poliger Stecker mit 150mm 22AWG Kabel & Female
2x 2-Pin Connector Plug Male & Female 1x für Stromversorgung und 1x für rote LED
Also die rote LED geht an wenn die Luftfeuchtigkeit im Bad über 95% ist und geht dann auch wieder aus wenn es unter 95% ist.
Jede Seite hat ihren eigenen Code (esphome)
- id: page1
lambda: |
int x, y;
//-------------------------------- Header Bereich --------------Seite 1---------------------------------------------
it.fill(Color::BLACK); // Hintergrund in schwarz
//it.fill(COLOR_BLACK);
//background image
it.image(0, 0, id(background_image));
// Draw a line from [0,0] to [100,50]
it.line(120, 0, 125, 15, id(my_grey));
// Print "Bad Oben" in top center.
it.printf(160, 0, id(font1), TextAlign::TOP_CENTER, "Bad Oben");
// Draw a line from [0,0] to [100,50]
it.line(195, 15, 200, 0, id(my_grey));
// Print time in HH:MM:ss format
it.strftime(0, 0, id(font1), TextAlign::TOP_LEFT, "%H:%M:%S", id(homeassistant_time).now());
// Print Datum
it.strftime(258, 0, id(font1), TextAlign::TOP_LEFT, "%d:%m:%Y", id(homeassistant_time).now());
// Print Fenster offen oder geschlossen anzeigen
if(id(fenster_bad_oben).has_state()) {
x = 210, y = 0;
if (id(fenster_bad_oben).state >= 0) {
it.print(x, y, id(materialdesign_icons_10), id(my_green), TextAlign::TOP_LEFT, "\U000F11DB");
//ESP_LOGI("Fenster", "Geschlossen");
} else if (id(fenster_bad_oben).state <= 1) {
it.print(x, y, id(materialdesign_icons_10), id(my_blue), TextAlign::TOP_LEFT, "\U000F11DC");
//ESP_LOGI("Fenster", "Offen");
}
}
// Motion Anzeigen
if(id(bad_oben_motion_sensor).has_state()) {
x = 75, y = 0;
if (id(bad_oben_motion_sensor).state >= 1) {
it.print(x, y, id(materialdesign_icons_15), id(my_green), TextAlign::TOP_LEFT, "\U000F0D91");
ESP_LOGI("Motion", "Bewegung erkannt");
} else if (id(bad_oben_motion_sensor).state <= 1) {
it.print(x, y, id(materialdesign_icons_15), id(my_grey), TextAlign::TOP_LEFT, "\U000F1435");
}
}
// Print Fenster offen oder geschlossen anzeigen als Text
if(id(fenster_bad_oben).has_state()) {
x = 225, y = 0;
if (id(fenster_bad_oben).state >= 0) {
it.print(x, y, id(font1), id(my_green), TextAlign::TOP_LEFT, "zu");
} else if (id(fenster_bad_oben).state <= 1) {
it.print(x, y, id(font1), id(my_blue), TextAlign::TOP_LEFT, "offen");
}
}
// Print Fenster offen oder geschlossen anzeigen
//if (id(fenster_bad_oben).state) {
//it.printf( 225, 0, id(font1), id(my_green), TextAlign::TOP_LEFT, "zu");
//} else {
//it.printf( 225, 0, id(font1), id(my_blue), TextAlign::TOP_LEFT, "offen");
//}
// Draw a line from [0,0] to [100,50]
it.line(0, 15, 320, 15, id(my_grey));
//-------------------------------- Sensoren Bereich ----------Seite 1---------------------------------------------------
// Print bad oben Luftfeuchtigkeit (vom homeassistant sensor)
it.print(2, 20, id(materialdesign_icons_15), id(my_light_blue), "\U000F058E");
it.printf(19, 20, id(font2), TextAlign::TOP_LEFT ,"Luftfeuchtigkeit: %2.1f% %", id(aht_humid).state);
// Print bad oben Temperatur (vom homeassistant sensor)
it.print(2, 35, id(materialdesign_icons_15), id(my_orange), "\U000F050F");
it.printf(19, 35, id(font2), TextAlign::TOP_LEFT , "Temperatur Bad: %2.1f °C", id(aht_temp).state);
// Draw a line from [0,0] to [100,50]
it.line(0, 55, 320, 55, id(my_grey));
// Print aktuelle Außen Temperatur (vom homeassistant sensor)
it.print(2, 60, id(materialdesign_icons_15), id(my_green), "\U000F18D6");
it.printf(19, 60, id(font2), TextAlign::TOP_LEFT , "Aussen Temperatur: %2.1f °C", id(aussen_temperatur).state);
// Print aktueller Stromverbrauch (vom homeassistant sensor)
it.print(2, 75, id(materialdesign_icons_15), id(my_orange), "\U000F0241");
it.printf(19, 75, id(font2), TextAlign::TOP_LEFT , "Stromverbrauch: %2.1f W", id(stromverbrauch).state);
// Print aktuelle Solar Produktion (vom homeassistant sensor)
it.print(2, 90, id(materialdesign_icons_15), id(my_yellow), "\U000F0A72");
it.printf(19, 90, id(font2), TextAlign::TOP_LEFT , "Solar: %2.1f W", id(solar_aktuell).state);
it.print(2, 105, id(materialdesign_icons_15), id(my_orange), "\U000F1904");
it.printf(19, 105, id(font2), TextAlign::TOP_LEFT , "Solar Heute: %2.1f kWh", id(solar_komplett_heute).state);
// Print Abfall Abholung
it.print(2, 120, id(materialdesign_icons_15), id(my_brown), "\U000F0A7A");
it.printf(19, 121, id(font2), "Abfall Abholung");
it.print(2, 136, id(font3), id(my_light_green), id(abfall_naechster_neu).state.c_str());
// --------------------------------------------Navi-Buttons-----------------------------------------------------------
// Draw a line über den Navi Buttons
it.line(0, 163, 320, 163, id(my_grey));
// NAVI Buttons
//id(touch_homepage).publish_state(false);
x = 10, y = 165;
it.printf(x, y, id(materialdesign_icons_50), id(my_grey), TextAlign::TOP_LEFT, "\U000F0150"); //Navi Button 1 (Clock)
x = 75, y = 165;
it.print(x, y, id(materialdesign_icons_50), id(my_grey), TextAlign::TOP_LEFT, "\U000F0128"); //Navi Button 2 (Balken Diagramm)
x = 140, y = 165;
it.print(x, y, id(materialdesign_icons_50), id(my_grey), TextAlign::TOP_LEFT, "\U000F0590"); //Navi Button 3 (Wetter Icon)
x = 205, y = 165;
it.print(x, y, id(materialdesign_icons_50), id(my_grey), TextAlign::TOP_LEFT, "\U000F0AD4"); //Navi Button 4 (Musik Icon)
x = 260, y = 165;
it.print(x, y, id(materialdesign_icons_50), id(my_grey), TextAlign::TOP_LEFT, "\U000F0A19"); //Navi Button ganz rechts (Switch Icon)
// -- Footer ------------------------------------Seite-1--------------Footer---------------------------------------------
// Draw a line from unten bei Wlan
it.line(0, 215, 320, 215, id(my_grey));
// Print aktuelle WLAN Stärke
// WiFi Signal Strength
if(id(bad_oben_wifi_signal).has_state()) {
x = 3, y = 220;
if (id(bad_oben_wifi_signal).state >= -50) {
it.print(x, y, id(materialdesign_icons_12), id(my_green), TextAlign::TOP_LEFT, "\U000F0928");
//ESP_LOGI("WiFi", "Ausgezeichnet");
} else if (id(bad_oben_wifi_signal).state >= -60) {
it.print(x, y, id(materialdesign_icons_12), id(my_light_green), TextAlign::TOP_LEFT, "\U000F0925");
//ESP_LOGI("WiFi", "Gut");
} else if (id(bad_oben_wifi_signal).state >= -67) {
it.print(x, y, id(materialdesign_icons_12), id(my_yellow), TextAlign::TOP_LEFT, "\U000F0922");
//ESP_LOGI("WiFi", "Mittel");
} else if (id(bad_oben_wifi_signal).state >= -70) {
it.print(x, y, id(materialdesign_icons_12), id(my_orange), TextAlign::TOP_LEFT, "\U000F091F");
//ESP_LOGI("WiFi", "Schwach");
} else {
it.print(x, y, id(materialdesign_icons_12), id(my_red), TextAlign::TOP_LEFT, "\U000F092B");
//ESP_LOGI("WiFi", "Schlecht");
}
}
//it.image(2, 220, id(wlan_icon), id(my_light_grey));
//it.printf(20, 220, id(font1), TextAlign::TOP_LEFT , "Wlansignal: %2.1f db", id(bad_oben_wifi_signal).state);
it.printf(20, 220, id(font1), TextAlign::TOP_LEFT , "Wlan: %2.1f% %", id(bad_oben_wifi_signal_percent).state);
//IP Adress
if (id(ip_address).has_state()) {
it.printf(110, 220, id(font1), TextAlign::TOP_LEFT, "IP: %s", id(ip_address).state.c_str());
}
// ESP Home UpTime
if (id(uptime_human).has_state()) {
it.printf(224, 220, id(font1), TextAlign::TOP_LEFT, "UP: %s", id(uptime_human).state.c_str());
}
Damit schließe ich meinen Luftsensor/Temperatursensor (DHT-20) an
daneben ist eine Buchse für den Bewegungsmelder (Der Das Display anschaltet sobald jemand in reichweite ist)
Wow, ist ja doch ne Menge Code, ich liebäugel ja auch mit solchen Displays, aber auf solche Codeblöcke hab ich nicht so wirklich Lust, das mach ich den ganzen Tag schon beruflich (aber in Powershell)
Ja, die meisten meiner Projekte mach ich auch 2mal
Hallo Lice,
Schönes Projekt!
Ich habe auch mehrere von den Teilen im Einsatz und zeige Temperaturen, PV-Anlage, usw. an.
Was ich noch nicht hin bekommen habe sind die Touchbuttons.
Den Code für die Anzeige hast Du ja oben schon gekostet.
Kannst Du bitte auch mal schreiben wie die Auswertung geht?
Danke!
Damit wird dann der Bereich wo die Unteren Navigations Button sind definiert.
Das Schwierige daran , finde ich die genauen Werte für den Bereich zu bestimmen.
Also x_min bis x_max und y_min und y_max.
Man muss sich halt so ein Unsichtbares Rechteck auf dem Display vorstellen was man damit definiert. Wo dann der Touch bereich ist.
Ich habe da auch eine gefühlte Ewigkeit für gebraucht. Aber jetzt funktioniert alles.
Habe mich auch mal an das Display getraut und deine Hilfen dazu benutzt. Jedoch habe ich noch ein kleines Problem: Das Umschalten ist noch dermaßen träge … wenn ich drücke dauert es manchmal bis zu 15 Sekunden bis er auf die andere Seite springt, oder er springt gar nicht um.