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?