Forum: Mikrocontroller und Digitale Elektronik µPython uasyncio Streams ESP8266


von Alex Z. (alexander_z49)


Lesenswert?

Hallo,

ich stehe etwas auf dem Schlauch. Habe hier einen NodeMCU mit einem 
ESP8266 und µPython 1.16, bei dem ich versuch eine Stabile 
TCP-IP-Verbindung hinzubekommen.

Dabei habe ich aktuell 2 Probleme.

1.
In unregelmäßigen Abständen hängt sich der Stream auf / verliert die 
Verbindung zum Server. OSError spuckt [Errno 113] EHOSTUNREACH
aus.
Bisher habe ich folgendes versucht:
  --> Power Mode auf SLEEP_NONE gesetzt
  --> Nach dem Verbindungsabbruch geprüft, ob der NodeMCU noch mit dem 
WLAN verbunden ist. Ja ist er
  --> Garbagecollector aktiviert

Wenn ich in der Schleife auf den readerstream warte um Daten zu lesen, 
funktioniert das auch und wenn nichts kommt, wartet die coroutine auch 
einfach.

Im Netz habe ich dazu ein paar threads gefunden, allerdings keine 
brauchbare Lösung für mich.

Aktuell verbinde ich mich dann einfach neu mit dem Server, sobald die 
Verbindung abbricht, ist aber keine schöne Lösung. Bei einem Test mit 
Packet Sender und 4 gleichzeitig verbundenen Clients über einen tag gab 
es keine Verbindungsabbrüche.


2.
Wenn ich versuche mich mit
1
await uasyncio.open_connection(IP, Port)
mit dem Server zu verbinden, dann bekomme ich, auch wenn der Server gar 
nicht läuft immer ein Stream-Paar zurück.

Laut der Doku zur Funktion 
(https://docs.micropython.org/en/latest/library/uasyncio.html#uasyncio.open_connection) 
sollte es einen OSerror geben, wenn die Verbindung nicht aufgebaut 
werden kann. Wenn der Server nicht läuft, warum bekomme ich dann 2 
Streamobjekte zurück und keinen Fehler? Hat jemand schonmal die selben 
Erfahrungen gemacht?

Edit: Wenn ich eine falsche IP-Adresse angeben, die es im Netzwerk nicht 
gibt, bekomme ich trotzdem keinen Fehler....

Meine coroutine zum Verbinden sieht wie folgt aus:
1
async def connect(self):
2
   try:
3
      print("Connecting to server")
4
      self.bConnected = False
5
      self.stReader, self.stWriter = await uasyncio.open_connection(IP,Port)
6
      await uasyncio.sleep(1)
7
      if self.stReader and self.stWriter:
8
         print("reader: " + str(dir(self.stReader)))
9
         print("writer: " + str(dir(self.stWriter)))
10
         self.bConnected = True
11
      print("Connected: " + str(self.bConnected))
12
   except OSError as err:  
13
      print('Could not connect to server')
14
      print(str(err))

Die prints sind nur zum debuggen. Vllt. kann mir ja einer weiter helfen.


LG Alex

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ist die Stromversorgung stabil?

Ganz sicher, hast du es geprüft?

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.