Hallo zusammen, ich habe auf einer Platine ein ESP8266-01 WLAN Modul per UART mit einem Atmega32 verbunden. Zusätzlich habe ich auf die Platine noch ein Display gelötet, das ich zum Debuggen nutze. Um mich mit dem ESP und seinen AT-Commands vertraut zu machen, habe ich einen USB-Adapter für den PC genutzt. Grundsätzlich scheint die Kommunikation zwischen ESP und Atmega32 zu funktionieren. Wenn ich die Platine einschalte, erscheint auf dem Display der gleiche Text, wie als wenn ich am PC ein „AT+RST“ (reset) an den ESP sende (1.jpg, nicht-darstellbare Zeichen wie z.B. \r oder \n werden als Kästchen dargestellt). Wenn ich dann ein „ATE0“ (Echo der AT Commands deaktivieren) an den ESP sende, erscheint auf meinem Display nur Datenmüll (2.jpg). Nach meinen Tests am PC dem USB-Adapter dürfte hier nur ein „\r\nOK\r\n“ bzw. „KästchenKästchenOKKJästchenKästchen“ erscheinen. „Eigentlich“ funktioniert die UART Kommunikation, aber dann auch wieder nicht… Hat jemand eine (noch so wilde) Idee wo mein Problem liegen könnte?
:
Bearbeitet durch User
fehlende Abblockkondensaoren? fehlende 3,3V zu 5V Anpassung? printen von !isprint(char)?
Was kommt bei einem "AT+CIFSR\r\n"? Läuft evtl. der Buffer (falls vorhanden) des UART über? Nach einem Reset sendet der ESP (je nach firmware) ne ganze Menge? Welche Firmware läuft auf dem ESP?
Sascha B. schrieb: > Wenn ich dann ein „ATE0“ (Echo der AT Commands deaktivieren) an den ESP > sende, erscheint auf meinem Display nur Datenmüll (2.jpg). Nach meinen > Tests am PC dem USB-Adapter dürfte hier nur ein „\r\nOK\r\n“ bzw. > „KästchenKästchenOKKJästchenKästchen“ erscheinen. Ja. Probiere es mit: HardUart => ESP8266 SoftUart => USB-Adapter => PC Alles, was MEGA zum ESP sendet, wird auch zum PC gesendet. Alles, was MEGA vom ESP empfängt, wird auch zum PC gesendet.
:
Bearbeitet durch User
Sascha B. schrieb: > „Eigentlich“ funktioniert die UART Kommunikation, aber dann auch wieder > nicht… Hat jemand eine (noch so wilde) Idee wo mein Problem liegen > könnte? Gerade eben gesehen: Bei dir ist rst cause eigentlich der Reset Pin und nicht die AT+RST. Dein Problem könnte mit unzureichender Stromversorgung zusammenhängen. 99.98% bis 99.99% ;-)
:
Bearbeitet durch User
Das ESP Modul bootet bei einem Hard-Reset (bzw. Power-On) mit einer anderen Baudrate, als danach verwendet wird. Hast du das berücksichtigt?
Stefan U. schrieb: > Das ESP Modul bootet bei einem Hard-Reset (bzw. Power-On) mit einer > anderen Baudrate, als danach verwendet wird. Hast du das berücksichtigt? Weiss er doch, sieht man an seinen Bildern. Sein ESP bricht ganz einfach zusammen weil die Stromversorgung nicht ausreicht, deswegen wird als Resetursache Resetpin angegeben.
Gerade ist ein schönes deutschsprachiges ESP8266-Praxisbuch auf den Markt gekommen. Einfach mal googeln :)
Zuerst einmal vielen Dank für die zahlreichen Antowrten! Wilhelm M. schrieb: > Können wir Stromversorgungsprobleme des ESP ausschließen? Sollte sich ausschließen lassen. Ich habe einen 2200µF Elko (ziemlich dicker Brummer) so dicht wie möglich an VCC gelötet. Davor ging garnix. Wilhelm M. schrieb: > Was kommt bei einem "AT+CIFSR\r\n"? Bin ja noch zu keinem WLAN verbunden... Wilhelm M. schrieb: > Läuft evtl. der Buffer (falls vorhanden) des UART über? Nach einem Reset > sendet der ESP (je nach firmware) ne ganze Menge? Ich habe eine Ausgabe auf dem LCD, falls das passiert. Ich hab den buffer soweit (und noch etwas höher) hochgedreht, bin das Problem weg war. Wilhelm M. schrieb: > Welche Firmware läuft auf dem ESP? Bisher die originale. Das Modul am PC sagt: AT+GMR<\r><\r><\n>AT version:1.1.0.0(May 11 2016 18:09:56)<\r><\n> SDK version:1.5.4(baaeaebb)<\r><\n> Ai-Thinker Technology Co. Ltd.<\r><\n> Jun 13 2016 11:29:20 Marc V. schrieb: > Bei dir ist rst cause eigentlich der Reset Pin und nicht die > AT+RST. Ich verstehe leider nicht so ganz, was damit gemeint ist. Stefan U. schrieb: > Das ESP Modul bootet bei einem Hard-Reset (bzw. Power-On) mit > einer > anderen Baudrate, als danach verwendet wird. Hast du das berücksichtigt? Habe ich tatsächlich nicht gewusst und nicht berücksichtigt. Das Modul am USB-Adapter ist mit Baud 115200 dauerglücklich. Damit funktioniert auch die initialie Kommunikation mit dem Atmega. Ich werde mal probieren die Baudrate nach dem Init umzustellen... omg.
Meine Module senden nach dem Einschalten ihre ersten Boot-Meldungen (wie in deinem Screenshot) mit irgendeiner krummen Baudrate. Danach schalten sie auf 115200 Baud um. Mein AVR sendet dann fleißig Befehle mit 115200 Baud. > Wenn ich die Platine einschalte, erscheint auf dem > Display der gleiche Text, wie als wenn ich am PC ein „AT+RST“ (reset) > an den ESP sende Das würde bedeuten, dass deine Module die Baudrate nicht zwischendurch wechseln. Das kenne ich so noch nicht. > Wenn ich dann ein „ATE0“ an den ESP > sende, erscheint auf meinem Display nur Datenmüll Klingt verdächtig nach Absturz, was wiederum meistens durch mangelhafte Stromversorgung ausgelöst wird. 2200µF ist vielleicht zu groß. Elkos haben eine große Induktivität. Ich verwendet immer 100µF oder 220µF, die ich direkt an VCC+GND an das Modul löte. Zusätzlich muss aber auch der Spannungsregler und das Netzteil mindestens 400mA für den ESP übrig haben. USB Kabel eignen sich wegen ihres hohen Innenwiderstandes häufig nicht.
Welche Kondensatoren hast du dem 3,3V Spannungsregler (LM1117) spendiert? Und mach mal ein Foto von den Leiterbahnen. Ich fürchte, dass eventuell eine ungünstige Masse-Führung vorliegt.
Stefan U. schrieb: > Klingt verdächtig nach Absturz, was wiederum meistens durch mangelhafte > Stromversorgung ausgelöst wird. > > 2200µF ist vielleicht zu groß. Elkos haben eine große Induktivität. Ich > verwendet immer 100µF oder 220µF, die ich direkt an VCC+GND an das Modul > löte. Zusätzlich muss aber auch der Spannungsregler und das Netzteil > mindestens 400mA für den ESP übrig haben. USB Kabel eignen sich wegen > ihres hohen Innenwiderstandes häufig nicht. Als Spannungsregler verwende ich einen LM 1117 T3,3. Der kann laut Datenblatt 0,8A liefern. Das Display braucht um die 100mA, Controller und Sensoren auf dem Board deutlich weniger. Sollten also noch mindestens 500mA für den ESP übrig sein. Das Netzteil hinter dem LM kann deutlich mehr als 0,8A. Ich bastle da seit ein paar Tagen dran rum und hatte zuerst nur den 2200µF aus der Verwandschaft besorgt (was anderes war nicht verfügbar). Heute Nachmittag kam aber meine Bestellung mit 100µF und 220µF. Werde das direkt mal umlöten. Stefan U. schrieb: > Welche Kondensatoren hast du dem 3,3V Spannungsregler (LM1117) > spendiert? Davor einen 10µF Elko + 100nF Keramik, dahinter noch einen 100nF Keramik Stefan U. schrieb: > Und mach mal ein Foto von den Leiterbahnen. Ich fürchte, dass eventuell > eine ungünstige Masse-Führung vorliegt. Habe etwas gemalt: https://picload.org/image/ragacici/layout.jpg
Sascha B. schrieb: > Heute Nachmittag kam aber meine Bestellung mit 100µF und 220µF. Werde > das direkt mal umlöten. Ok, 2200µF ist gegen 100µF Elko getauscht. Gleiches Verhalten wie zuvor. Stefan U. schrieb: > Ich fürchte, dass eventuell > eine ungünstige Masse-Führung vorliegt. Gibt es ein Best Practice, wie man VCC/GND Strippen am Besten ziehen sollte um Problemen vorzubeugen? (Ich bin Informatiker, daher kenne ich mich mit den Elektronikdingen nicht so gut aus, möchte es aber natürlich ordentlich machen und dazulernen)
:
Bearbeitet durch User
Die Leitungen sind kurz gehalten. Allerdings ist es besser, sie Sternförmig zu verbinden - vor allem die GND Leitung. Alle GND Leitungen sollen sich im Idealfall am GND Pin des Spannungsreglers treffen. Ich denke, dass deine Problemursache allerdings woanders liegt. Dein Aufbau sieht nicht schlimm aus.
Sascha B. schrieb: > Marc V. schrieb: >> Bei dir ist rst cause eigentlich der Reset Pin und nicht die >> AT+RST. > > Ich verstehe leider nicht so ganz, was damit gemeint ist. Schwer an irgendwelche Details ranzukommen, aber soviel habe ich rausgefunden: Nach Hardreset oder Powerup gibt es gar keine Messages, nur Müll. Nach AT+RST kommt erst die Meldung und danach Müll, aber rst cause soll 1 sein. rst cause 2 steht für Hardreset, da du das nicht gemacht hast, gibt es nur 2 Möglichkeiten: 1) Deine Stromversorgung ist schlecht, ESP resettet sich. 2) Deine MEGA zieht ESP-RST irgendwie auf Low. Zum testen: Stromversorgung für ESP (und nur für ESP) unterbrechen. Nach ein paar Sekunden wieder verbinden, Müll abwarten. AT+RST Wenn jetzt rst cause 1 kommt, ist alles OK. Wenn wieder rst cause 2 kommt, hat deine MEGA irgendwie den ESP zum Reset gebracht (LCD-Leitung ?).
Stefan U. schrieb: > Ich denke, dass deine Problemursache allerdings woanders liegt. Dein > Aufbau sieht nicht schlimm aus. Ein Problem, das ich mit den ESP hatte, sind die relativ hochohmigen Eingänge. Die halten einen eingenommenen Pegel zum Teil minutenlang. So kann der ESP trotz eines fehlenden Pullups an einem der Bootpins eine ganze Weile gut funktionieren und geht dann plötzlich in den Flash-Modus. Dies betrifft GPIO0, GPIO2 und GPIO15 (hier Pulldown). MfG Klaus
Marc V. schrieb: > Nach AT+RST kommt erst die Meldung und danach Müll, aber rst cause > soll 1 sein. > rst cause 2 steht für Hardreset, da du das nicht gemacht hast, gibt > es nur 2 Möglichkeiten: > > 1) Deine Stromversorgung ist schlecht, ESP resettet sich. > 2) Deine MEGA zieht ESP-RST irgendwie auf Low. Beim Herumprobieren in diese Richtung habe ich tatsächlich einige neue Erkenntnisse gewonnen: - Die PC-Screenshots im ersten Post dieses Threads zeigen als Reset-Cause den RST-Pin. Sehr merkwürdig. Der ESP hängt ja an einem USB-Adapter, den ich so in eBay gekauft habe. Ich habe keinen Einfluss auf den RST-Pin, ich gebe nur das AT+RST Command ab. - Beim Einschalten meiner selbstgelöteten Platine gibt der ESP NICHT! das gleiche aus wie in den PC-Screenshots zu sehen. Tatsächlich handelt es sich um etwa 300 Bytes Datenmüll gefolgt von "Ai-Thinker Technology Co. Ltd. ready". Endet genau wie die Antwort auf ein AT+RST, scheint aber tatsächlich eine Nachricht zu sein, die mir sagen will, dass der Bootup beendet ist und das Gerät nun ready ist. Ist mir bisher nur nicht aufgefallen, da der Text auf meiner selbstprogrammierten LCD-Console so schnell durchgerauscht ist... - Egal welchen Command ich nach dem Bootup absetzte, es kommt immer nur Datenmüll zurück. Eventuell habe ich ich dort in meinem Code was verbockt. Hier mal mein Code (ich verwendete die UART-Lib von Fleury): #define ESP8266_CHAR_CARRIAGE_RETURN 0x94 #define ESP8266_CHAR_LINE_FEED 0x7A void sendCommand(char *commandString) { uart_puts_p(commandString); //Übergabe an die UART Lib uart_putc(ESP8266_CHAR_CARRIAGE_RETURN); uart_putc(ESP8266_CHAR_LINE_FEED); } void blablub(void) { ... sendCommand("ATE0"); //echo off ... } Warum verwende ich nicht '\r' und '\n'? Ich habe mir die beiden "Kästchen" nach dem "ready" der Bootup Message in binär ausgeben lassen. Eben diese beiden Werte kamen dabei heraus. Wie sendet die die AT+Commands?
Sascha B. schrieb: > #define ESP8266_CHAR_CARRIAGE_RETURN 0x94 > #define ESP8266_CHAR_LINE_FEED 0x7A > Warum verwende ich nicht '\r' und '\n'? Ich habe mir die beiden > "Kästchen" nach dem "ready" der Bootup Message in binär ausgeben lassen. > Eben diese beiden Werte kamen dabei heraus. Wie sendet die die > AT+Commands? Verstehe ich nicht, kannst du das bisschen näher erklären ?
Marc V. schrieb: > Verstehe ich nicht, kannst du das bisschen näher erklären ? Ok, also: Wenn man sich meine 1_*.jpg Bilder aus dem ersten Post ansieht, ist ja eine gewisse Ähnlichkeit zu erkennen. Nämlich der letzte Abschnitt der Consolenausgabe am PC ist ähnlich der Schrift auf dem LCD. Entsprechend müssten die beiden letzten dargestellten Kästchen auf dem LCD ja einem CARRIAGE RETURN bzw. LINE FEED Zeichen entsprechen (siehe rn.jpg). Also habe ich das letzte sowie vorletzte Zeichen der Bootup Message nicht als Zeichen ausgeben lassen, sondern den 8-Bit Wert eben als Binärwert anzeigen lassen. Dabei kam (reproduzierbar) heraus: - für das vorletzte Zeichen, das vermeintliche '\r': 0b10010100 bzw. 0x94 - für das letzte Zeichen, das vermeintliche '\n': 0b01111010 bzw. 0x7A Daher sende ich diese beiden Werte nach dem eigentlichen Befehl. Ist mein Gedankengang falsch? Wie genau sendest du Daten bzw. "\r\n" an den ESP? Alternativer Code zum Senden von Befehlen: void sendCommand(char *commandString) { uart_puts_p(commandString); uart_putc('\r'); uart_putc('\n'); } Der ESP sendet mir in diesem Fall als Antwort auf ein einfaches "ATE0": "[zig Dutzend Bytes Datenmüll] ERROR" (siehe error.jgp).
:
Bearbeitet durch User
Sascha B. schrieb: > Also habe ich das letzte sowie vorletzte Zeichen der Bootup Message > nicht als Zeichen ausgeben lassen, sondern den 8-Bit Wert eben als > Binärwert anzeigen lassen. Dabei kam (reproduzierbar) heraus: > - für das vorletzte Zeichen, das vermeintliche '\r': 0b10010100 bzw. > 0x94 > - für das letzte Zeichen, das vermeintliche '\n': 0b01111010 bzw. 0x7A Kenne ich so nicht, kam bei mir nie heraus - Siehe "Muell.png". > Daher sende ich diese beiden Werte nach dem eigentlichen Befehl. > Ist mein Gedankengang falsch? Wie genau sendest du Daten bzw. "\r\n" an > den ESP? Kann das leider nur an ESP testen, die noch hier rumfliegen, ist aber kein allzugrosses Problem diese an eine Mega dranzuhängen. Obwohl, es ist kein Unterschied, ich sende alle Befehle in Grossbuchstaben und CR/LF am Ende - MEGA macht es genauso. Genauso sendet es ESP auch zurück. P.S. AT+RST 0x94-0x7A ergibt keine Reaktion. Nach nachträglich gesendeten CR/LF kommt vom ESP "ERROR" zurück. P.P.S. Vielleicht doch mit Softuart anstatt mit LCD probieren ?
:
Bearbeitet durch User
Oh man, ich habs! Das Problem lag an meiner eigenen Blindheit :( Fleury's UART Library bietet 2 Funktionen an um Strings zu versenden: void uart0_puts(const char *s ) und void uart0_puts_p(const char *progmem_s ) Wie in meinem Quellcode in einem früheren Post zu sehen, habe ich die ganze Zeit jene Methode verwendet, die einen String aus dem Program Memory versenden kann. Das ist natürlich Murks. Vielen Dank an alle für die Hilfe!! :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.