Hallo,
ich versuche seit einigen Tagen einen ESP8266 an einen Arduino-basierten
Roboter anzuschließen. Nachdem der, entsprechend einiger
Internetrecherchen geplante, Erstaufbau zwar funktionierte (rote LED
leuchtet, ESP meldet sich in der Seriellen Konsole), es aber nicht
möglich war den ESP über die Arduino IDE (mit ESP-Erweiterung) und einen
Arduino Uno zu flashen, habe ich seeehr viel rumprobiert und mit
verschiedensten Konstellationen aus Stromversorgungen,
Pull-Up-Widerständen und zusätzlichen Kondensatoren experimentiert und
dabei einen einzigen Weg entdeckt, mit dem die Übertragung von
Programmen zuverlässig funktioniert:
RX -> 10K Ohm -> RX Arduino (zudem ist RX des ESP auch mit 20K Ohm auf Masse gelegt)
Die 3.3V Stromversorgung erfolgt über einen LD33V3-Festspannungsrelger,
der Eingang ist mit 100nF und der Ausgang mit 10µF gegen Masse
stabilisiert (entsprechend Datenblatt).
Wenn ich anstelle des 10 Ohm-Widerstandes einen 1K Ohm-Widerstand
benutze oder zusätzlich zum Arduino eine 5V(2,5A) Stromversorgung
anschließe (auch mit eigenständigem Betrieb des Arduinos probiert, also
5V-Leitung zum Arduino getrennt), schlägt die Verbindung beim Versuch
ein Programm hochzuladen mit
1
error: espcomm_open failed
fehl. Die Serielle Verbindung steht aber dennoch und es ist möglich die
Boot-Ausgabe beim Start zu empfangen, die sich auch nach Aktivierung des
Flash-Modes entsprechend auf
1
ets Jan 8 2013,rst cause:2, boot mode:(1,6)
ändert.
Alternativ zum 5V-Netzteil habe ich auch den Betrieb über 8 NimH-Akkus
ausprobiert, welche über einen weiteren Spannungsregler 5V liefern, die
Symptome waren aber die gleichen wie auch beim Netzteil.
Außerdem funktioniert ein Programm-Upload nur, solange ich den
Flash-Taster während des gesamten Upload-Prozesses gedrückt halte (Flash
drücken - Kurz Reset betätigen - Upload abwarten - Flash loslassen).
Hat jemand eine Idee, was hier schieflaufen könnte und warum es so eine
starke Auswirkung hat, ob zusätzlich zum 5V-Ausgang des Arduinos eine
externe Stromversorgung angeschlossen ist? Die Ausgangsspannung des
Spannungsreglers habe ich kontrolliert, und die liegt unabhängig von der
Spannungsquelle bei stabilen 3.29V.
Ich wäre über jegliche Hilfe sehr dankbar und hoffe, dass die obige
Erklärung detailliert genug ist.
Marcus
Du hast also den AVR Mikrocontroller und den ESP8266 quasi parallel an
den USB-UART angeschlossen. Das funktioniert nur, wenn der AVR
"deaktiviert" wird, indem du dessen Reset Eingang auf GND ziehst. Dazu
kannst du eine Jumper auf den ISP Stecker stecken.
Zweitens sind 10k Ohm sehr viel. Bei 9600 Baud geht das sicher noch.
Aber zum Flashen wird eine höhere Bitrate verwendet, oder nicht?
Benutze so einen Spannungsteiler, um die 5V auf 3,3V runter zu bringen:
Hallo,
Marcus schrieb:> GPIO0 -> Taster -> GND (Mit 10 Ohm Pull-Up-Widerstand auf 3.3V)
das ist hoffentliche in Schreibfehler und sollte 10k Ohm heißen??
Ein PullUp ist da nicht zwingend nötig, ist ein interner aktiv beim
Booten.
Zum Spannungsteiler wurde schon was gesagt, ist mit 10k/22k zu
hochohmig.
Dicht an den ESP einen Elko 220µ von 3,3V nach GND, der reagiert sehr
empfindlich auf Störungen der Betriebsspannung.
Flash drücken, Reset drücken und wieder loslassen und dann Flash wieder
loslassen reicht normalerweise.
Vermutlichs stürzt der ESP wegen Problemen mit der BEtriebsspannung beim
Flashbeginn ab und dann bootet er natürlich nicht wieder im Flashmode
ohne GPIO0 auf L.
Gruß aus Berlin
Michael
Vielen Dank für eure Rückmeldungen!
@maxmicr: Sprichst du von der Tabelle, die auf der Wiki-Seite zu sehen
ist..? Die handelt glaube ich von einem anderen ESP8266-Modell, da ich
einen ESP-01 habe. Und auch da steht unter UART und GPIO0 ein "L", was
auf Low hindeutet. Oder meintest du etwas anderes..?
@stefanus: Da das Flashen problemlos klappt, solange der ESP nur über
die 5V vom USB-Kabel versorgt wird, glaube ich nicht, dass es ein
Problem darstellt, wenn der AVR des Arduino Unos zusätzlich an der
Seriellen Schnittstelle angeschlossen ist. Auf den Uno ist ein
Minimalprogramm (ohne jeglichen Code) aufgespielt, sodass dieser nicht
dazwischenfunkt.
Außerdem sollte ich vlt. erwähnen, dass ich den ESP vor einiger Zeit
schonmal auf einem Breadboard erfolgreich mit dem gleichen 5V-Netzteil
betrieben hatte, und der da auch ohne Probleme über den internen
Programmer des Arduino Unos flashbar war. Zudem bin ich mir sicher, dass
ich letztes Mal auch nicht den Flash-Taster die ganze Zeit über gedrückt
halten musste, also ist ziemlich sicher irgendetwas mit meinem
momentanen Aufbau falsch.
Deinen Vorschlag für einen anders dimensionierten Spannungsteiler werde
ich mal ausprobieren, danke!
@amiga: Nein, dies ist kein Schreibfehler. Ursprünglich war ein 10K Ohm
Widerstand vorgesehen, allerdings hatte ich in die Schaltung aufgrund
einer Verwechslung versehentlich 10 Ohm eingebaut, womit das Flashen wie
oben beschrieben auf spezielle Weise auch funktionierte. Nach Korrektur
des Fehlers durch Verwenden eines 1K Ohm Widerstandes war ein Flashen
allerdings nicht mehr möglich...
Ein Anschließen eines Elkos direkt vorm ESP habe ich bereits erfolglos
probiert, allerdings habe ich nur welche mit einer Kapazität von bis zu
100µF.
Wie gerade beschrieben war es mir früher bereits möglich den ESP mit der
von dir genannten Weise korrekt in den Flash-Mode zu versetzen, ich weiß
nicht, warum dies bei der neuen Schaltung nicht mehr funktioniert. An
einem einmaligen Reset beim Flashvorgang liegt es denke ich nicht, da
der Uploadvorgang auch sofort abbricht, sobald ich den Flash-Button
loslasse.
Danke für eure zahlreichen Tipps, ich werde mit verschiedenen
Korrekturen und Variationen der Schaltung in Kürze weiter
experimentieren, sobald ich die Zeit dazu finde, und dann berichten.
Marcus
Wenn du am arduino ne brücke von gnd nach reset machst und dann tx nach
tx und rx mit 10k nach rx fungiert der arduino als usb serial wandler
und du musstest den esp flashen können
Also das mit dem Arduino als USB Seriel Wandler sollteste vergessen.
Nim eine USB Serial Wandler mit FTDI drauf, der 3.3V kann. Den ESP musst
du auf jedenfall mit einer eigenen Spannungsversorgung mit midestens 1A
verwenden.
Habe mir bei in der bucht mal so 3.3 Volt Module gekauft die sind
Spannungsmässig nach einiger Zeit eingebrochen.
Das mit den Arduino als USB Serial wandler ist zwar auch schön und gut,
hat aber ein entscheidenen fehler. Die RS232 bei 115200 Baud und 16MHZ
kann massive übertragungsfehler verursachen (Siehe Datenblatt RS232).
Ich habe es mit 2 Arduino Leonardo getestet. Bei einem geht es , bei dem
anderen nicht.
Also 50/50.
Hier ist auch eine Seite mit der ausenbeschaltung.
http://www.xess.com/blog/esp8266-reflash/
Damit habe ich an die 20 ESP Schon geflashed, und das ohne probleme.
Hier ist jedoch gesagt, man sollte nicht den 3.3 Volt vom FTDI nehmen.
Schau Dir mal den Schaltplan vom Arduino Uno an. Da sind bereits
Widerstände zwischen dem USB-Chip und der externen Stiftleiste. Die
musst du in deinem Schaltungsdesign berücksichtigen. Ich hatte Dir 1,5k
Ohm empfohlen, davon musst du die bereits vorhandenen 1k Ohm
subtrahieren.
Weiterhin solltest du bedenken, dass der Bootloader den seriellen Port
aktiviert und in diesem Zustand belässt. Ein "nackter" AVR startet
hingegen mit deaktiviertem seriellen Port, so dass diese Pins als
Eingang konfiguriert sind.
Wenn du mal das diesem Thema Googelst, wirst du feststellen, dass
praktisch alle Tutorial dringend dazu raten, ein Kabel mit FTDI Chip zu
verwenden. Die schreiben das sicher nicht ohne Grund - sie hätten ja
auch den Arduino dazu nutzen können, der ohnehin auf dem Tisch liegt.
Ich habe meine ESP-01 Module mit einem alten Nokia Datenkabel
aktualisiert, in dem befindet sich ein PL2303 Chip. Diese alte Version
des Chips wird vom Windows 7-10 Treiber nicht mehr Unterstützt, aber
unter Linux funktioniert er einwandfrei. Es muss also nicht unbedingt
ein Chip von FTDI sein.
Aber der Ratschlag, dazu nicht den Arduino zu verwenden, ist sicher
sinnvoll.
Hast du einen Arduino Nano? Wenn ja, dann betreiben ihn mit 3,3V und
stecke einen Reset-Jumper auf den ISP Stecker. So kannst du dessen FTDI
Chip verwenden.
Hallo,
entschuldigt bitte, dass ich mich erst jetzt zurückmelden kann. Da ich
leider gerade keinen (funktionierenden) FTDI-Programmer oder etwas, was
man dafür zweckentfremden könnte, hier habe, habe ich erstmal weiter
versucht den Flash-Vorgang über meinen Arduino durchzuführen, was
entsprechend dieser Anleitung, ja auch möglich sein sollte (und bei mir
auch schonmal geklappt hat):
http://www.arduinesp.com/blink-manual-flash
Ich habe den nicht funktionalen Aufbau von meiner Leiterplatte nun
nochmal auf dem Breadboard nachgebaut und diesmal versucht die
Widerstände des Spannungsteilers so zu wählen, dass ich mit den hier
vorrätigen ungefähr an die von stefanus empfohlenen Werte komme.
Zudem habe ich den PullUp-Widerstand am GPIO0 nun testweise komplett
weggelassen.
Die entsprechende Beschaltung findet ihr im Anhang.
Und siehe da - es funktioniert! :-)
Jetzt ist es auch möglich bei externer 5V-Stromversorgung einen
Programmupload durchzuführen und auch der Flsh-Taster muss nicht mehr
gedrückt gehalten werden.
Vermutlich lag es tatsächlich am dem völlig überdimensionierten
Spnnungsteiler oder der PullUp-Widerstand an GPIO0 hat da Mist
angestellt.
Ich versuche die Schaltung auf meiner Leiterplatte nun nochmal so
anzupassen, dass sie dem Aufbau auf dem Breadboard genau entspricht,
dann müsste es ja eigentlich funktionieren...
Danke für eure Hilfe! :-)
So, ich habe die Leiterplatte nun entsprechend angepasst (sihe
Schaltplan vom vorherigen Post) und nun funktioniert das Flashen
komplett wie gewünscht. :-)
Also falls jemand an dem gleichen Problem verzweifelt und nur einen
Arduino Uno zur Hand hat, ich kann bestätigen, dass der oben genannte
Schaltplan korrekt funktioniert, und bislang hat noch nichts Feuer
gefangen. :D
Marcus