Aufbau
An "5V" und "GND" eines Arduino Uno hängt ein StepDown-Konverter und
erzeugt +3.3V für ein ESP-01 Modul. Die 3.3V sind zusätzlich mit einem
470µF Elko gestützt. RX und TX des ESP-01 sind an Pin8/9 mittels
SoftSerial angeschlossen (RX des ESP über Spannungsteiler). CH_PD und
RST hängen jeweils über 10kOhm an +3.3v.
Problen
Das funktioniert auch alles, nur leider nicht nach dem ersten
Einschalten: Nach dem Verbinden mittels WLAN sehe ich bei jedem Versuch,
mich über Telnet auf dem ESP-01 einzuloggen, nur ECONNREFUSED.
Um das zu ändern kann ich entweder die WLAN-Verbindung trennen und
wiederherstellen, dann funktioniert das Einloggen sofort.
Oder ich kann die Reset-Taste beim Arduino-Uno drücken, dann wird die
WLAN-Verbindung wohl automatisch unterbrochen und wiederhergestellt,
jedenfalls funktioniert dann das Einloggen auch sofort.
Frage
Was muss ich tun, damit das Einloggen gleich beim ersten Einschalten des
Arduino funktioniert?
ArdBack schrieb:> Frage>> Was muss ich tun, damit das Einloggen gleich beim ersten Einschalten des> Arduino funktioniert?
Ich befürchte, dass dir meine Antwort nicht schmecken wird....
Nach einigen Experimenten bin ich, für mich, zu dem Schluss gekommen,
dass es unsinnig ist, den fetteren der beiden Rechner, zum WLAN Sklaven
des schwächeren zu machen.
Andersrum wird da eher ein Schuh draus.
Mache den UNO zum I2C Slave des ESP8266-01
Andreas B. schrieb:> Als erstes würde ich mal loggen anstatt einfach exit 1 auszuführen, wenn> das "ok" beim Reset nicht kommt.
exit(1) wird nie ausgeführt.
setup() läuft immer problemlos durch. Nur kann ich mich eben erst nach
einem manuellen Druck auf den Resetbutton des Arduino per WLAN+Telnet
einloggen.
Arduino Fanboy D. schrieb:> Mache den UNO zum I2C Slave des ESP8266-01
Das restliche Programm des Arduino steuert massenweise Hardware und WLAN
ist nur eine kleine Zugabe. Master und Slave ist längst geklärt. Es geht
jetzt also nur noch um einen komfortableren Startup als immer einen
manuellen Reset.
Arduino Fanboy D. schrieb:> Du bestätigst meine Befürchtungen.
Deine Antwort schmeckt mir doch. Es ist nur keine Lösung für das
Problem. Es gilt, eine näherliegende Lösung zu suchen.
Der ESP-01 läuft völlig problemlos Stunden, Tage, Wochen, Monate am
Arduino. Wie gesagt es funktioniert alles bis auf dieses unschöne
Startup-Problem.
Klingt für mich, als wärst Du (in der Software) zu ungeduldig.
Ich bin jetzt nicht sicher, was genau hier abgefragt wird
while ( toEspNAwaitAns( "AT+RST\r\n", "OK\r\n" ) == false )
aber wenn der jede Sekunde einen Reset an den ESP schickt wird er
Probleme haben, eine WLAN-Verbindung aufzubauen.
Dies kann schon mal länger als eine Sekunde dauern.
Das würde dann auch dafür sprechen, dass - wenn Du den Arduino neu
startest - es dann funktioniert. Dann hatte der ESP möglicherweise mehr
Zeit eine Verbindung zu etablieren und dann kommt auch die gewünschte
Antwort.
Ich würde mal versuchen die Wartezeit auf 3 oder 5 Sekunden hochzusetzen
und schauen, was dann passiert.
Jörg
Also das klingt stark danach als ob da etwas timing mäßiges nicht
stimmt.
Beim ersten Einschalten wird angestoßen dass irgendwas hochfährt (Wlan
ist ja nicht so trivial) aber das, was auch immer es ist, ist noch nicht
bereit wenn es sofort verwendet werden soll.
Wenn das Ganze erneut angestoßen wird, ist das was auch immer es ist,
schon bereit und darum geht es sofort.
EDIT: Zu spät :)
Jörg B. schrieb:> Ich bin jetzt nicht sicher, was genau hier abgefragt wird>> while ( toEspNAwaitAns( "AT+RST\r\n", "OK\r\n" ) == false )
Der Reset-Befehl wird an den ESP geschickt und auf die Antwort "OK"
gewartet. Diese kommt normalerweise auch sofort (in ganz seltenen Fällen
kommen wirre Zeichen, dann reicht es, ein bischen zu warten und den
Reset-Befehl noch einmal zu schicken und dann geht es immer. 1s ist hier
sogar großzügig und 10 Wiederholungen auch übertrieben, 2 hätten
gereicht).
Aber wie gesagt, gleich nach dem Einschalten läuft das Ganze ja
wunderbar durch. Der Server ist auf port 80 aktiviert und ich kann auch
eine WLAN-Verbindung herstellen.
Nur eben wird der Einlogg-Versuch per Telnet mit "ECONNREFUSED"
quitiert, solange bis ich den Reset-Knopf des Arduino drücke. Dann läuft
das Ganze wieder durch. Der Server ist auf port 80 aktiviert und ich
kann auch eine WLAN-Verbindung herstellen und mich dann auch per Telnet
einloggen ...
Versuch mal zwischen:
ArdBack schrieb:> Aber wie gesagt, gleich nach dem Einschalten läuft das Ganze ja> wunderbar durch. Der Server ist auf port 80 aktiviert und ich kann auch> eine WLAN-Verbindung herstellen.
Und:
> Nur eben wird der Einlogg-Versuch per Telnet mit "ECONNREFUSED"> quitiert, solange bis ich den Reset-Knopf des Arduino drücke. Dann läuft> das Ganze wieder durch. Der Server ist auf port 80 aktiviert und ich> kann auch eine WLAN-Verbindung herstellen und mich dann auch per Telnet> einloggen ...
Besagte Pause von ein paar Sekunden zu legen.
Danke Alex G. und Jörg B. für Euer Beschäftigen mit meinem Problem. Eure
Ideen deuten auf etwas hin, was auch folgender Thread-Beitrag angibt:
https://forum.arduino.cc/index.php?topic=410778.msg2878801#msg2878801
Gibt es irgendwo eine Liste mit den Wartezeiten für andere Befehle? Der
ESP scheint sich ja tatsächlich zu verhaspeln, aber ich kann ja jetzt
nicht alle Kommando-Delays selber durch Trial&Error herausfinden...
ArdBack schrieb:> Gibt es irgendwo eine Liste mit den Wartezeiten für andere Befehle? Der> ESP scheint sich ja tatsächlich zu verhaspeln, aber ich kann ja jetzt> nicht alle Kommando-Delays selber durch Trial&Error herausfinden...
Warum nicht? Es sind doch nur ungefähr 10 Kommandos, die du brauchst.
Zeige mal den Quelltext der Funktion toEspNAwaitAns().
Btw. wenn du dich klug anstellst, kannst du mit nur 3 oder 4 Testrunden
rausfinden zwischen welchen der 10 Befehle, gewartet werden muss ;)
Stichwort: Teile und herrsche.
Schau aber erst obs geht wenn du zwischen allen 10 Befehlen wartest.