Forum: Mikrocontroller und Digitale Elektronik ESP8266 und Micropython: TCP hängt


von Max G. (l0wside) Benutzerseite


Angehängte Dateien:

Lesenswert?

Gibt es eine Taktik, mit der das ESP8266 unter Micropython zuverlässig 
TCP-Streams empfangen kann und die üblichen Unix-Verdächtigen wie 
select() und recv() auch wie erwartet funktionieren?
Wenn ja, kann mir jemand sagen, was ich falsch mache?

Nach mehreren Tagen bin ich inzwischen weitgehend der Überzeugung, dass 
der uP-Code für TCP ziemlicher Schrott ist. Ich lasse mich aber gerne 
eines Besseren überzeugen.
* Lesen auf einem offenen Socket mit read() oder readline() bricht immer 
wieder mit ECONNRESET ab, obwohl die Gegenstelle definitiv noch Daten 
sendet
* poll() liefert als einzige je gesehenen Wert POLLIN zurück (d.h. Daten 
stehen zum Empfang bereit). POLLHUP habe ich nie gesehen. Bitmaske ist 
richtig gesetzt.
* Auch gerne genommen: poll() liefert POLLIN, ein anschließendes read() 
geht dann in den Timeout.

Mir scheint, als würde, wenn die Gegenstelle die Daten nicht am Stück 
sendet, am Ende nur noch ein einzelner Ethernet-Frame (536 Byte) 
durchkommen, dann ist Schluss. Verrückterweise stimmt das aber auch 
nicht immer, manchmal geht´s.

Die aktuelle Version ist per mpy-cross übersetzt und auf das Board 
geladen. Eine ältere Version hatte ich direkt ins Image eincompiliert, 
verhält sich genauso bescheiden.
Die Effekte sind auf zwei verschiedenen ESP-12S identisch.

Aktueller (zig-mal umgebauter) Code anbei. Der Code soll mit einem 
Raumfeld One S sprechen - das tut er auch, aber mit den oben 
beschriebenen Eigenschaften macht das so keinerlei Spaß.

urequest habe ich auch schon ausprobiert, das kann aber keine Redirects. 
Den Ansatz mit readline() hatte ich auch schon in meinem Code drin, hat 
nicht geholfen.
Das Monster http.client aus der uP-Lib habe ich nicht versucht - das 
müsste ich samt sämtlicher Abhängigkeiten eincompilieren, und am Ende 
steht dann doch wieder nur ein poll() und read().

Also: hat das mal jemand erfolgreich ans Laufen bekommen? Wenn ja, wie?

: Bearbeitet durch User
von Patrik S. (Firma: Verein: BLS-Electronics) (patrikseiler)


Lesenswert?

Max G. schrieb:
> Also: hat das mal jemand erfolgreich ans Laufen bekommen? Wenn ja, wie?

Hallo Max

Ich hatte genau die selben Probleme wie du.
Kurz und bündig: uPython ist für diese Anwendung unbrauchbar.
Welchsle zu der ArduinoIDE mit dem ESP8266 Plugin. Damit funktionierts 
massiv stabiler. Ist halt kein Python mehr. Dafür läufts.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Merde alors. Danke.

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.