Forum: Mikrocontroller und Digitale Elektronik ESP8266 Modul ESP01 GPIO Input Boot Probleme


von Diagonal D. (diagonal)


Lesenswert?

Hallo Freunde,

ich bin gerade an einem ESP01 und habe folgendes Problem:

ich habe den Gpio1 Pin auf Input gesetzt und geerdet, wenn ich den ESP01
boote erhalte ich folgende Fehlermeldung:
"Timed out waiting for packet header"

wenn ich das grounding weg lasse kann ich booten, muss aber dann manuell
das Erdungskabel einsetzen, das ist natürlich unschön.

Ich habe nun auf diversen Seiten gesucht, und keine vernünftige Lösung 
gefunden.

Der pin Gpio1 soll als Input genutzt werden.
Wenn Input 3,3 Volt vorhanden sind kann ich das ja im Code abfangen, 
wenn dann die 3,3 Volt abfallen wird der GPIO1 Pin nicht geerdet, daher 
hatte
ich den Pin geerdet um das Problem zu umgehen, habt ihr eventuell eine 
Idee woran das liegen könnte ?

Vielen Dank!

Gruß
Diago

von Stefan F. (Gast)


Lesenswert?

Diagonal D. schrieb:
> Ich habe nun auf diversen Seiten gesucht, und keine vernünftige Lösung
> gefunden.

Dann schau mal dort: http://stefanfrings.de/esp8266/index.html#fwupdate

von Diagonal D. (diagonal)


Lesenswert?

Hallo,

danke für die schnelle Rückmeldung.
Ich habs noch nicht so ganz verstanden, eine Korrektur vorab, ich bin am
Gpio2 ( nicht 1), wenn ich mir die Beschreibung aus deinem Link anschaue 
steht da drin:
"Ist mit der blauen LED verbunden, die bei LOW Pegel leuchtet. Flackert 
beim Start. Darf beim Start nicht auf Low gezogen werden. Ausgang vom 
zweiten UART, der nur Ausgabe kann."

Daraufhin habe den Pin beim

void setup(void){
   pinMode(2, INPUT);
   digitalWrite(2, HIGH); ( als auch auf LOW gesetzt)
  }

gesetzt und gestartet, es bootet, ich kann dann am GPIO Pin einen Input 
code Technisch abfragen ( Strom liegt an), wenn der Strom weg ist wird 
die Pin nicht geerdet<-- das ist das Problem ?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Diese Befehlsfolge ist sinnlos:
> pinMode(2, INPUT);
> digitalWrite(2, HIGH);

Ein Eingang wird mit digitalRead() abgefragt. Ein Ausgang wird mit 
digitalWrite() gesteuert.

Der Pin ist beim Booten zeitweise ein Ausgang, welcher mehrmals den 
Pegel zwischen LOW und HIGH wechselt.

Wenn du ihn durch deine externe Signalquelle direkt auf HIGH oder LOW 
legen würdest, hättest du dabei einen Kurzschluss.

Außerdem musst du berücksichtigen, dass da noch die blaue LED dran 
hängt. Deine Quelle darf daher nicht allzu hochohmig sein, sonst wird 
der LOW Pegel zu viel Spannung haben.

Wenn du den Pin durch deine externe Quelle auf LOW ziehst, kann der ESP 
in dieser Zeit nicht booten.

Deswegen kannst du den Pin nur sehr Eingeschränkt als Eingang verwenden. 
Das geht nur, wenn du eine Quelle hast, die zum Zeitpunkt des Bootens 
garantiert keinen LOW Pegel liefert. Zwischen Quelle und Pin muss auf 
jeden Fall ein Widerstand. Beispiel:
1
          Taster        220Ω
2
           ____
3
GND |-------  ---------[===]----o GPIO2

von Diagonal D. (diagonal)


Lesenswert?

Hallo,

zum Zeitpunkt des Bootens kann am Eingangspin Low oder High liegen, das 
hängt von einem externen Lichtsensor ab, dieser Lichtsensor liefert dann 
am gpio2 Low oder High, das kann ich nicht beeinflussen, da bleibt ja 
dann nur eine Möglichkeit übrig,
erst nach dem Booten den Lichtsensor anzuschliessen und pin2 über eine 
Widerstand auf ground ziehen....

Danke für deine Super tollen Erklärungen!

von Stefan F. (Gast)


Lesenswert?

Diagonal D. schrieb:
> dieser Lichtsensor liefert dann am gpio2 Low oder High, das kann
> ich nicht beeinflussen, da bleibt ja dann nur eine Möglichkeit übrig,

Ja

> erst nach dem Booten den Lichtsensor anzuschliessen und pin2 über eine
> Widerstand auf ground ziehen....

Ähh, nein. Das wäre mir zu unhandlich. Und auf GPIO0 auszuweichen macht 
es nicht besser, denn der steuert ja auch den Bootloader.

Ich würde lieber den ESP-01 durch einen ESP-12F austauschen, der hat 
genug Eingänge für deinen Anwendungsfall.

Oder: Benutze doch einfach den GPIO3 (RxD) als Eingang. Oder brauchst du 
ihn für serielle Kommunikation?

von Diagonal D. (diagonal)


Lesenswert?

kann ich den GPIO3 auch während der Programmierung und danach im Betrieb 
so belassen ohne das ich jedesmal evt. umstecken muss, je nach dem in 
welchem Mode ich bin, Programmierung oder normaler Betrieb ?

von Stefan F. (Gast)


Lesenswert?

Zum Programmieren muss der Pin logischerweise mit dem USB-UART Adapter 
verbunden sein.

Du kannst nicht einfach zwei Signalquellen gleichzeitig auf einen Pin 
direkt zusammen verbinden. Das wäre so als ob du die Haustüre (den 
Eingang) öffnen würdest, während deine Frau sie zu drückt. Der stärkere 
gewinnt, der Schwäche verletzt sich möglicherweise dabei.

von Diagonal D. (diagonal)


Lesenswert?

die Frage bezog sich auf den USB-UART Programmer, der ESP01 wird ja zum 
Programmieren drauf gesteckt, als INPUT pin würde ich die 3 benutzen, 
nach dem Programmieren nehme ich den ESP01 ja wieder vom Programmer ab 
und verbinde es mit Batterien, das wars oder, an Pin3 muss ich ja nichts 
ändern, da dieser vom Bootvorgang nicht betroffen ist, korrekt ?

von Stefan F. (Gast)


Lesenswert?

Diagonal D. schrieb:
> das wars oder, an Pin3 muss ich ja nichts
> ändern, da dieser vom Bootvorgang nicht betroffen ist, korrekt ?

Ja.

von Diagonal D. (diagonal)


Lesenswert?

sorry, eine Frage noch: im Programmier Modus über den USB-UART Adapter 
kommt es auch nicht zu konflikten wenn ich den Pin3 als Input benutze 
oder ? Ich frage deswegen weil der Pin3 ja auch gleichzeitig Serieller 
Eingang ist, das bedeutet für mich, dieser Pin3 wird während des 
Flashings als RX benutzt, dann nach dem Flashen wenn das Programm 
startet kann ich es über den Code ganz normal als Pin3 Input etc. 
benutzen, korrekt ?

: Bearbeitet durch User
von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Diagonal D. schrieb:
> sorry, eine Frage noch: im Programmier Modus über den USB-UART Adapter
> kommt es auch nicht zu konflikten wenn ich den Pin3 als Input benutze
> oder ?

Bevor wir aneinander vorbei reden: Du meinst so einen Adapter, order?

Was du in deinem Programm einstellst spielt keine Rolle, weil das 
Programm erst nach dem Bootloader startet.

> nach dem Flashen wenn das Programm startet kann ich es
> über den Code ganz normal als Pin3 Input etc. benutzen, korrekt ?

Ja sicher. Kommt dir das komisch vor? Ist es nicht.

von Diagonal D. (diagonal)


Angehängte Dateien:

Lesenswert?

ich habe fast den gleichen Programmer, meiner ist noch mit einem 
Schalter für Programming und UART versehen.

Ich verstehe den Gesamt Prozess (Programmierung über Arduino so):

1. In Arduino wird Programmiert
2. dann wird in Arduino ein Maschinencode generiert der dann auf den 
Microcontroller via USB Programmer übertragen wird, genau nach diesem 
Flash Vorgang startet der Bootloader auf dem ESP01 und lädt das 
übertragene Programm ( das passiert alles ohne die ESP01 aus dem 
Programmer zu nehmen,) korrekt?

dann wenn das Programm fertig programmiert ist, kann ich es ja vom 
Programmer abziehen und mit einer Batterie betreiben?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Also ehrlich Mann, probiere es doch einfach aus anstatt ewig um den 
heißen Brei zu diskutieren. Du hast schon zwei Bestätigungen von mir, 
nun die dritte. Brauchst du es als Einschreiben mit der Post?

von Diagonal D. (diagonal)


Lesenswert?

danke für die Mühen! und sorry für die vielen Fragen.

von Diagonal D. (diagonal)


Lesenswert?

Moin,

da ich jetzt keinen neuen Thread aufmachen wollte, stelle ich die Frage 
mal in dem Thread:

wenn ESP01 startet und die void loop() funktion geht, falls dort
irgendein Fehler passiert kann man das Programmtechnisch abfangen, wie 
bei herkömmlichen Programmen mit "try catch" und evlt. das Modul neu 
starten lassen ?

von Stefan F. (Gast)


Lesenswert?

Deine Frage hat nichts mit diesem Thread zu tun. Wenn es mit dieser 
Antwort nicht erledigt ist, mache dazu bitte einen neuen eigenen Thread 
auf.

Exception handling wurde erst relativ spät als optionale Funktion zum 
SDK hinzugefügt. Es kommt also auf die Version an.

Wenn du eine verbotene Endlosschleife (ohne delay() und yield()) 
ausführst, löst der Watchdog automatisch einen Neustart aus.

von Diagonal D. (diagonal)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
>> nach dem Flashen wenn das Programm startet kann ich es
>> über den Code ganz normal als Pin3 Input etc. benutzen, korrekt ?
>
> Ja sicher. Kommt dir das komisch vor? Ist es nicht.


Moin,

ich wollte ein kurzes Feedback geben was beim Programmieren und Flashen 
zu beachten ist ( kann u.U. für Anfänger viel Zeit sparen):

Nach dem ich meinen Code über Arduino geschrieben habe, habe ich alle 
GPIO Pin Input und Output Kabel abgezogen dann über den USB Flasher auf 
den ESP01 hochgeladen ( Usb flasher siehe Anhang),
beim "Hochladen" über Arduino wird danach das Programm auf dem ESP01 
gestartet, dies führt z.B. bei Pin3 (als Input) zu Fehlern (vermutlich 
da dort auch die RX Belegung über den USB Programmer belegt ist <--- das 
war auch der Punkt was ich gestern noch nicht so ganz verstanden hatte 
;-) ,

besser ist es:
in Arduino Programmieren, GPIO Kabel abziehen, dann "Hochladen" (Button 
auf Menüleiste von Arduino klicken) warten bis Hochladen beendet ist,
ESP01 vom Programmer abziehen alle GPIO Kabel wieder anschliessen und an 
Stromquelle anschliessen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Diagonal D. schrieb:
> dies führt z.B. bei Pin3 (als Input) zu Fehlern

Was für Fehler?

Meinst du dass dein Sketch mit den seriellen Daten vom PC nichts 
anfangen kann und sich deswegen nicht wie gewünscht verhält? Dann ist 
das halt so, der Programmieradapter ist schließlich nicht die richtige 
Laufzeitumgebung.

von Diagonal D. (diagonal)


Lesenswert?

meine Waschmaschinen Schaltung ist jetzt fertig, dieser Prüft anhand der 
LED Lampe an der Waschmaschine ob der Waschvorgang durch ist, dort habe 
ich ein Lichtsensor angebracht, dieser prüft ob die LED an oder aus ist 
und sendet ein Befehl per client an einen 2. ten ESP01 der als Webserver 
an einer Steckdose mit Adapter läuft ein Signal, dort leuchtet während 
des Waschvorgangs eine LED, wenn der Waschvorgang zu Ende ist geht die 
Leuchte aus.

Da die Waschmaschine im Keller läuft und ich vom Obergeschoss nicht 
mitbekomme wann der Waschvorgang zu Ende war, ist es eine schönes Teil 
der mir die Arbeit erleichtert, ich konnte auch wieder viel dazu lernen 
;-)

Die von Dir angepriesene Internetseite:

http://stefanfrings.de/esp8266/index.html#fwupdate

ist ja sowas von toll, wer hat die wohl gemacht ;-)?

Wenn Du lust hast können wir die Schaltung als ein Beispielprojekt 
irgendwo hinterlegen ? (ich muss dazu sagen, ich bin kein Elektroniker, 
die Bauteile habe ich nach bestem Kenntnisstand/Prüfen dimensioniert, 
die Schaltung insgesamt auch...)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Diagonal D. schrieb:
> Wenn Du lust hast können wir die Schaltung als ein Beispielprojekt
> irgendwo hinterlegen ?

Tu dir keinen Zwang an, es gibt genug Platformen für so etwas:

* https://www.mikrocontroller.net/forum/codesammlung
* https://create.arduino.cc/projecthub
* https://github.com/

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
Noch kein Account? Hier anmelden.