Habe zwei Ideen wie man das mit der If abfrage erschlägt, im Setup erst mall auslesen anzeigen lassen bis die Zeit vergeht, oder mit Switch Case, auf jeden fall muss Doppel Gemoppelt werden
Meinst BME, der hat noch genaue Luftdruck Ausgab, dachte ich habe BME dran leider ist ein BMP geworden ohne Feuchtigkeitmessung
Ja ich weiß, ich hab mich im Internet dazu schlau gemacht, der ist ziemlich unbeliebt.
Das ist warscheinlich auch der Grund weshalb wir den DHT11 noch massenhaft herumliegen haben in der Ausbildung aber der DHT22 Mangelware ist😁
Ich verstehe icht wieso sich die IDE von jetzt auf gleich so dämlich anstellt und behaubtet das Board Plötzlich nicht mehr zu finden, ich bekomm gleich ein Kolaps:
`esptool.py v4.5.1
Serial port COM3
Connecting......................................
A fatal error occurred: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Der ausgewählte serielle Port For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
ist nicht vorhanden oder das Board ist nicht angeschlossen
`
ich hab immer das gleiche Kabel, hab grad ein brand neues genutzt und USB Port getauscht...warscheinlich hat Windows im Geräte Manager wieder irgendeine scheiße getreieben.....vilt. sollte ich mich mit Linux/Ubuntu anfreunden wenn ich mit Arduino Arbeite, das wurde mich schon öfters empfohlen.
EDIT:
ich habe den ESP getauscht und es geht....Sowas geht doch nicht von jetzt auf gleich kapput ? der Sketch der noch drauf ist funktioniert aber es lässt sich kein neuer hochladen
Hate no nie solche Probleme
Win 11, 10, 10
bei einem hab mich erschrocken nach Kurem ist der abgek... nach Neustart war alles ok.
Am meinem neuem Lapi kommt immer USB hub dran
ist bei mir nicht mehr im Sockel wenn ich in der Seriellen Schnittstelle bei baud 115200 mir den Boot anschaue bekomme ich bei allen ESP32 das gleiche angezeigt:
Windows 11 ist katastrophal (zumindest bei mir), bei mir Wollte Windows 11 kein Gerätetreiber für den ESP32 instalieren und als ich Manuell instaliert habe hat Windof 11 gezickt bei dem ESP32.
Ich scheue mich davor und warte mit Windows 11 bis 2025 da werden eh alle dann zu dem Umstieg gezwungen
@fony kleines update:
Es Funktioniert zwar, ich muss den Boot Knopf kurz gedrückt halten damit der ESP sich flashen lässt, das war vorher nicht nötig. Funktioniert nur noch wenn ich beim Upload Boot drücke. Der ESP geht von alleine wohl nicht mehr in Boot, warum auch immer
ich habe da die halbe Nacht gebastellt und das hier ist der Code:
/*
BLACK: 0x0000 → BLUE: 0x001F → GREEN: 0x07E0 → CYAN: 0x07FF
RED: 0xF800 → MAGENTA: 0xF81F → YELLOW: 0xFFE0 → WHITE: 0xFFFF
ORANGE: 0xFDA0 → GREENYELLOW: 0xB7E0 → PINK: 0xFE19 →
GOLD: 0xFEA0 → SILVER: 0xC618 → SKYBLUE: 0x867D → VIOLET: 0x915C
*/
#include "DHT.h"
#include <SoftwareSerial.h>
SoftwareSerial HC12Serial(26, 27); // RX an Pin 26, TX an Pin 27
#define DHTPIN 25
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include "RTClib.h"
RTC_DS3231 rtc; // SDA → GPIO21 // SCL → GPIO22
DateTime lastDateTime; // Variable zur Speicherung des letzten Datums und der letzten Uhrzeit
#include <TFT_eSPI.h>
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // G23>MOSI // G18>SCK // G4>RESET // G2>DC // G32>CS // G15>Led
const int buttonPin = 12;
const int ledPin = 15;
bool buttonState = LOW;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long ledStartTime = 0;
const unsigned long debounceDelay = 50;
const unsigned long ledDuration = 30000;
float lastTemp = 0; // Variable, um den letzten angezeigten Temperaturwert zu speichern
float lastHumidity = 0; // Variable, um den letzten angezeigten Luftfeuchtigkeitswert zu speichern
float outTemp = 0; // OUT Temperaturwert
float outHumidity = 0; // OUT Luftfeuchtigkeitswert
void setup()
{
HC12Serial.begin(4800);
Wire.begin(SDA, SCL);
dht.begin();
rtc.begin();
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_GOLD);
tft.setTextColor(TFT_BLACK);
tft.setFreeFont(&FreeSansBold12pt7b); // FreeSerifBold12pt7b // FreeSansBoldOblique12pt7b // FreeSansBold12pt7b
tft.drawString("OUT Temp:", 9, 115);
tft.drawString("IN Temp:", 9, 215);
tft.drawString("OUT Humidity:", 245, 115);
tft.drawString("IN Humidity:", 245, 215);
int x = 0; int width = 480; int height = 320; int y1 = 0;
drawRectWithWidth(x, y1, width, height, TFT_WHITE, 6); // Zeichne das erste Rechteck
x = 0; width = 480; height = 106; int y2 = 106;
drawRectWithWidth(x, y2, width, height, TFT_WHITE, 6); // Zeichne das zweite Rechteck
x = 0; width = 240; height = 320; int y3 = 106;
drawRectWithWidth(x, y3, width, height, TFT_WHITE, 6); // Zeichne das dritte Rechteck
}
void drawRectWithWidth(int x, int y, int width, int height, uint16_t color, int lineWidth)
{
for (int i = 0; i < lineWidth; i++)
{
tft.drawFastHLine(x, y + i, width, color);
tft.drawFastHLine(x, y + height - i - 1, width, color);
tft.drawFastVLine(x + i, y, height, color);
tft.drawFastVLine(x + width - i - 1, y, height, color);
}
}
void loop()
{
{
if (HC12Serial.available())
{
String receivedData = HC12Serial.readString();
teileDaten(receivedData);
readAndPrintSensorData();
}
int reading = digitalRead(buttonPin);
if (reading != lastButtonState)
{
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
ledStartTime = millis();
}
}
}
if (digitalRead(ledPin) == HIGH && millis() - ledStartTime >= ledDuration) {
digitalWrite(ledPin, LOW);
}
lastButtonState = reading;
}
readAndPrintRTC();
readAndPrintSensorData();
}
void teileDaten(String daten)
{
char *daten2 = new char[daten.length() + 1];
strcpy(daten2, daten.c_str());
char *Part0 = strtok(daten2, ",");
char *Part1 = strtok(NULL, ",");
atof(Part0);
atof(Part1);
tft.fillRect(77, 160, 150, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.setTextColor(TFT_BLACK);
tft.drawString(String(Part0), 77, 161); // OUT Temp
tft.fillRect(334, 160, 133, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString(String(Part1) + " %", 334, 160); // OUT Humidity
tft.setFreeFont(&FreeSansBold12pt7b);
tft.drawString("o", 182, 157); // Das "Grad" Zeichen für "OUT Temp:"
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString("C", 193, 161); // Das "C" Zeichen für "OUT Temp:"
tft.unloadFont();
}
void readAndPrintSensorData()
{
float Temperatur = dht.readTemperature();
float Luftfeuchtigkeit = dht.readHumidity();
// Überprüfen, ob sich die Werte geändert haben
if (Temperatur != lastTemp || Luftfeuchtigkeit != lastHumidity) {
tft.fillRect(77, 268, 150, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.setTextColor(TFT_BLACK);
tft.drawString(String(Temperatur, 1), 77, 269); // IN Temp
lastTemp = Temperatur;
tft.fillRect(334, 268, 133, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString(String((int)Luftfeuchtigkeit) + " %", 334, 268); // IN Humidity
lastHumidity = Luftfeuchtigkeit;
tft.setFreeFont(&FreeSansBold12pt7b);
tft.drawString("o", 182, 265); // Das "Grad" Zeichen für "IN Temp:"
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString("C", 193, 269); // Das "C" Zeichen für "IN Temp:"
tft.unloadFont();
}
}
void readAndPrintRTC()
{
DateTime now = rtc.now();
char datumAnzeige[15];
sprintf(datumAnzeige, "%.1d.%.02d.%.2d", now.day(), now.month(), now.year());
if (now.day() != lastDateTime.day() || now.month() != lastDateTime.month() || now.year() != lastDateTime.year()) // Überprüfen, ob sich das Datum geändert hat
{
tft.fillRect(35, 35, 235, 40, TFT_GOLD);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.setTextColor(TFT_BLACK);
tft.drawString(String(datumAnzeige), 35, 35);
}
if (now.hour() != lastDateTime.hour() || now.minute() != lastDateTime.minute()) // Überprüfen, ob sich die Uhrzeit geändert hat
{
tft.fillRect(325, 35, 120, 40, TFT_GOLD);
tft.setFreeFont(&FreeSansBold24pt7b);
String minuteString = String(now.minute(), DEC);
if (now.minute() < 10)
{
minuteString = "0" + minuteString;
}
tft.drawString(String(now.hour(), DEC) + ":" + minuteString, 325, 35);
}
lastDateTime = now; // Aktuelle Zeit und Datum als letzten bekannten Wert speichern
tft.unloadFont();
}
besser habe ich es nicht hinbekommen. Es kommt zu auslesefehlern des DHTs die Auslesefehler sind eine lange kette an wirwar. Nur wenn die RESET Taste am ESP32 gedrückt wird erscheien keine Auslesefehler, direkt nach dem BOOT schon
Aber das prinzip an sich Funktioniert, ansonsten bin ich mit meinen Ideen am ende.
EDIT:
ich wollte das in SETUP machen, aber damit hab ich das komplett gecrasht.
Mit dieser Variante Funst es, es ist aber nicht Ideal es Flattert sobald sich der Wert des DHTs ändert, zumindest verschwinden die Auslesefehler
/*
BLACK: 0x0000 → BLUE: 0x001F → GREEN: 0x07E0 → CYAN: 0x07FF
RED: 0xF800 → MAGENTA: 0xF81F → YELLOW: 0xFFE0 → WHITE: 0xFFFF
ORANGE: 0xFDA0 → GREENYELLOW: 0xB7E0 → PINK: 0xFE19 →
GOLD: 0xFEA0 → SILVER: 0xC618 → SKYBLUE: 0x867D → VIOLET: 0x915C
*/
#include "DHT.h"
#include <SoftwareSerial.h>
SoftwareSerial HC12Serial(26, 27); // RX an Pin 26, TX an Pin 27
#define DHTPIN 25
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include "RTClib.h"
RTC_DS3231 rtc; // SDA → GPIO21 // SCL → GPIO22
DateTime lastDateTime; // Variable zur Speicherung des letzten Datums und der letzten Uhrzeit
#include <TFT_eSPI.h>
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // G23>MOSI // G18>SCK // G4>RESET // G2>DC // G32>CS // G15>Led
const int buttonPin = 12;
const int ledPin = 15;
bool buttonState = LOW;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long ledStartTime = 0;
const unsigned long debounceDelay = 50;
const unsigned long ledDuration = 30000;
float lastTemp = 0; // Variable, um den letzten angezeigten Temperaturwert zu speichern
float lastHumidity = 0; // Variable, um den letzten angezeigten Luftfeuchtigkeitswert zu speichern
float outTemp = 0; // OUT Temperaturwert
float outHumidity = 0; // OUT Luftfeuchtigkeitswert
void setup()
{
HC12Serial.begin(4800);
Wire.begin(SDA, SCL);
dht.begin();
rtc.begin();
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_GOLD);
tft.setTextColor(TFT_BLACK);
tft.setFreeFont(&FreeSansBold12pt7b); // FreeSerifBold12pt7b // FreeSansBoldOblique12pt7b // FreeSansBold12pt7b
tft.drawString("OUT Temp:", 9, 115);
tft.drawString("IN Temp:", 9, 215);
tft.drawString("OUT Humidity:", 245, 115);
tft.drawString("IN Humidity:", 245, 215);
int x = 0; int width = 480; int height = 320; int y1 = 0;
drawRectWithWidth(x, y1, width, height, TFT_WHITE, 6); // Zeichne das erste Rechteck
x = 0; width = 480; height = 106; int y2 = 106;
drawRectWithWidth(x, y2, width, height, TFT_WHITE, 6); // Zeichne das zweite Rechteck
x = 0; width = 240; height = 320; int y3 = 106;
drawRectWithWidth(x, y3, width, height, TFT_WHITE, 6); // Zeichne das dritte Rechteck
}
void drawRectWithWidth(int x, int y, int width, int height, uint16_t color, int lineWidth)
{
for (int i = 0; i < lineWidth; i++)
{
tft.drawFastHLine(x, y + i, width, color);
tft.drawFastHLine(x, y + height - i - 1, width, color);
tft.drawFastVLine(x + i, y, height, color);
tft.drawFastVLine(x + width - i - 1, y, height, color);
}
}
void loop()
{
{
if (HC12Serial.available())
{
String receivedData = HC12Serial.readString();
teileDaten(receivedData);
readAndPrintSensorData();
}
int reading = digitalRead(buttonPin);
if (reading != lastButtonState)
{
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
ledStartTime = millis();
}
}
}
if (digitalRead(ledPin) == HIGH && millis() - ledStartTime >= ledDuration) {
digitalWrite(ledPin, LOW);
}
lastButtonState = reading;
}
readAndPrintRTC();
readAndPrintSensorData();
}
void teileDaten(String daten)
{
char *daten2 = new char[daten.length() + 1];
strcpy(daten2, daten.c_str());
char *Part0 = strtok(daten2, ",");
char *Part1 = strtok(NULL, ",");
atof(Part0);
atof(Part1);
tft.fillRect(77, 160, 150, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.setTextColor(TFT_BLACK);
tft.drawString(String(Part0), 77, 161); // OUT Temp
tft.fillRect(334, 160, 133, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString(String(Part1) + " %", 334, 160); // OUT Humidity
tft.setFreeFont(&FreeSansBold12pt7b);
tft.drawString("o", 182, 157); // Das "Grad" Zeichen für "OUT Temp:"
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString("C", 193, 161); // Das "C" Zeichen für "OUT Temp:"
tft.unloadFont();
}
void readAndPrintSensorData()
{
delay(200);
float Temperatur = dht.readTemperature();
float Luftfeuchtigkeit = dht.readHumidity();
// Überprüfen, ob sich die Werte geändert haben
if (Temperatur != lastTemp || Luftfeuchtigkeit != lastHumidity)
{
tft.fillRect(77, 268, 150, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.setTextColor(TFT_BLACK);
tft.drawString(String(Temperatur, 1), 77, 269); // IN Temp
lastTemp = Temperatur;
tft.fillRect(334, 268, 133, 40, TFT_GREEN);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString(String((int)Luftfeuchtigkeit) + " %", 334, 268); // IN Humidity
lastHumidity = Luftfeuchtigkeit;
tft.setFreeFont(&FreeSansBold12pt7b);
tft.drawString("o", 182, 265); // Das "Grad" Zeichen für "IN Temp:"
tft.setFreeFont(&FreeSansBold24pt7b);
tft.drawString("C", 193, 269); // Das "C" Zeichen für "IN Temp:"
tft.unloadFont();
}
}
void readAndPrintRTC()
{
DateTime now = rtc.now();
char datumAnzeige[15];
sprintf(datumAnzeige, "%.1d.%.02d.%.2d", now.day(), now.month(), now.year());
if (now.day() != lastDateTime.day() || now.month() != lastDateTime.month() || now.year() != lastDateTime.year()) // Überprüfen, ob sich das Datum geändert hat
{
tft.fillRect(35, 35, 235, 40, TFT_GOLD);
tft.setFreeFont(&FreeSansBold24pt7b);
tft.setTextColor(TFT_BLACK);
tft.drawString(String(datumAnzeige), 35, 35);
}
if (now.hour() != lastDateTime.hour() || now.minute() != lastDateTime.minute()) // Überprüfen, ob sich die Uhrzeit geändert hat
{
tft.fillRect(325, 35, 120, 40, TFT_GOLD);
tft.setFreeFont(&FreeSansBold24pt7b);
String minuteString = String(now.minute(), DEC);
if (now.minute() < 10)
{
minuteString = "0" + minuteString;
}
tft.drawString(String(now.hour(), DEC) + ":" + minuteString, 325, 35);
}
lastDateTime = now; // Aktuelle Zeit und Datum als letzten bekannten Wert speichern
tft.unloadFont();
}
Ich habe dieses Thema nur in Teilen gelesen, bin aber über diese Bemerkung gestolpert.
Die Bibliothek bietet als Lösung Sprites an. Ein Sprite ist ein Bereich, der zunächst im µC-Speicher zusammengestellt und dann komplett zum TFT an die gewünschte Stelle kopiert wird. Du kannst ein Sprite für mehrere Temperaturen verwenden, spart Speicher.
Bei mir hilft ein 10 µF Elektrolytkondensator zwischen EN und GND.
Einer meiner EPS32 ist jetzt Tot, gestern Nacht ging er noch einwandfrei sofern ich die BOOT Taste drücke, ich wollte eben weiter machen, der ESP32 macht nichts mehr.
Wird aber noch im Geräte manager erkannt, Laut dem Geräte Manager würde das Gerät Funktionieren, was Windows allerdings immer behaubtet
Habe dir schon Gestern geschrieben das du damit nicht Glücklich wirst, da du aber Stur auf das löschen bist, so wie auf den Hinweis mit dem Font, so wie das zeichnen von Rechteck in grün um da drin Schreiben,
Ich verstehe gerade nicht wie ich den Text sonst aktualisieren soll wenn ein neuer Text erscheint, ich hatte am anfang das problem das die texte dann einfach aufeinander gemallt werden !?
In #70 habe dir Beispiel gezeigt drauf laden testen danach nachbauen.
Mit den Fonts was sind in der Lib geht auch nur ist nicht das Gelbe vom EI, deshalb hat Bodmer sehr viel in die Lib reingetan um texte vernünftig anzeigen und Formatieren, man muss aber Vektor Font (vlw) dafür nehmen mit TTF ist so nicht ganz einfach.
Ach so ja. Stimmt ich hab das nicht machen können da ich kein BME habe und beim umschreiben für DHT hatte ich nicht hinbekommen ohne Kompilierungsfehler. Das heißt da mann vlw verwenden muss für komme ich mit &FreeSansBold12pt7b nicht weit?