diff --git a/README.md b/README.md index e4ec1ff..f633e19 100644 --- a/README.md +++ b/README.md @@ -99,3 +99,18 @@ Der 3,3-V-Pin des Uno liefert nur ca. 150 mA, der ESP-01 braucht beim Start kurz | WLAN Fehler E2 | ESP antwortet, Station-Modus nicht setzbar | | WLAN Fehler E3 | Hotspot nicht erreichbar: SSID/Passwort, „Maximale Kompatibilität“ aus, Hotspot aus | | CCS811 Fehler! | Sensor antwortet nicht am I2C: Verkabelung prüfen, `firmware/ccs811_diagnose` zeigt den genauen Schritt | + +### „Mal geht's, mal nicht“ (E1 trotz richtiger Verkabelung) + +**Beobachtung:** Bei korrekter, gekreuzter Verkabelung kam trotzdem manchmal „WLAN Fehler E1“. Zuverlässig lief es nur mit diesem Ablauf: +1. ESP **gerade** anschließen (TX → Pin 1, RX → Pin 0), Reset am Haupt-Uno +2. ESP **gekreuzt** anschließen (TX → Pin 0, RX → Pin 1), nochmal Reset + +**Vermutete Ursache:** Der Sketch sucht beim Start die Baudrate des ESP (115200, 9600, 57600, 38400). Jeder Versuch mit falscher Baudrate – und auch der Uno-Reset selbst, bei dem die TX-Leitung kurz offen ist – kommt beim ESP als Zeichensalat an. Der ESP hängt diesen vor den nächsten Befehl (`x#~AT` statt `AT`), antwortet `ERROR` statt `OK`, und die Suche dreht sich im Kreis. + +**Fix in der Firmware:** `espBaudrateFinden()` in `esp_wifi.h` schickt jetzt vor jedem `AT` eine leere Zeile. Damit schließt der ESP den Zeichensalat als eigene (ungültige) Zeile ab, und das folgende `AT` kommt sauber an. Damit sollte einmal gekreuzt anschließen + Reset reichen. Falls nicht, hilft weiterhin der Ablauf oben als Notlösung. + +Weitere Ursachen für wechselndes Verhalten: +- **Strom am Limit:** Ein Elko (100–470 µF) direkt zwischen VCC und GND am ESP fängt die Stromspitzen ab. +- **iPhone-Hotspot versteckt sich** nach einer Weile ohne verbundenes Gerät (dann E3): vor dem Reset Einstellungen → Persönlicher Hotspot öffnen. +- **Wackelkontakte** an GND, TX oder RX im Steckbrett. diff --git a/firmware/dht11_lcd/esp_wifi.h b/firmware/dht11_lcd/esp_wifi.h index 531edd7..5dea8f4 100644 --- a/firmware/dht11_lcd/esp_wifi.h +++ b/firmware/dht11_lcd/esp_wifi.h @@ -57,6 +57,10 @@ bool espBaudrateFinden() { for (uint8_t runde = 0; runde < 2; runde++) { for (uint8_t i = 0; i < 4; i++) { espSerial.begin(raten[i]); + // Leere Zeile zuerst: schliesst Zeichensalat ab, den der ESP beim Uno-Reset oder durch + // einen Versuch mit falscher Baudrate empfangen hat. Sonst wird daraus z. B. "x#~AT" -> ERROR. + espSerial.print(F("\r\n")); + delay(100); if (espBefehl(F("AT"), "OK", 1000)) { return true; }