ESP-Baudrate-Suche: vor jedem AT leere Zeile senden, README ergaenzt
Zeichensalat vom Uno-Reset oder von Versuchen mit falscher Baudrate landete vor dem naechsten AT (ESP antwortete ERROR statt OK -> sporadisch E1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Phase1Deliverables
parent
604a24086c
commit
74104047c9
15
README.md
15
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 E2 | ESP antwortet, Station-Modus nicht setzbar |
|
||||||
| WLAN Fehler E3 | Hotspot nicht erreichbar: SSID/Passwort, „Maximale Kompatibilität“ aus, Hotspot aus |
|
| 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 |
|
| 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.
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,10 @@ bool espBaudrateFinden() {
|
||||||
for (uint8_t runde = 0; runde < 2; runde++) {
|
for (uint8_t runde = 0; runde < 2; runde++) {
|
||||||
for (uint8_t i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
espSerial.begin(raten[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)) {
|
if (espBefehl(F("AT"), "OK", 1000)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue