Forum: Mikrocontroller und Digitale Elektronik ESP8266 Webserver reagiert manchmal nicht.


von Alt G. (altgr)


Lesenswert?

Bei dem hier vergiss irgendwer wo der server ist (irgendwas mit ARP) und 
die reaktion auf eine http anfrage dauert nach längerer inaktivität 30 
sek oder mehr:
1
  while (timeClient.getMinutes() == actMinute)
2
  {
3
    server.handleClient();  
4
    delay(20);
5
  }
6
  actMinute = timeClient.getMinutes();

Während das hier zuverlässig läuft:
1
  while (timeClient.getMinutes() == actMinute)
2
  {
3
    server.handleClient();  
4
  }
5
  actMinute = timeClient.getMinutes();

Geht bei delay das esp8266 wifi in sleep oder was läuft da schief?
Das "wifi_set_sleep_type(NONE_SLEEP_T);" ist gemacht.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Beim Delay blockiert du der Verarbeitungsschleife, bist in der zeit 
nicht empfangsbereit. Delays in dieser Größenordnung sind beim ESP8266 
weitgehend tabu.

von Alt G. (altgr)


Lesenswert?

Stefan F. schrieb:
> Beim Delay blockiert du der Verarbeitungsschleife, bist in der zeit
> nicht empfangsbereit. Delays in dieser Größenordnung sind beim ESP8266
> weitgehend tabu.

Nöö. Hat nix damit zu tun. Das wifi funktioniert auch im delay 
wunderbar, nur die reaktion ist um 20ms verzögert, was unbedeutend ist. 
Funktioniert die ersten 30 min auch klaglos.

Das ist viel komplexer. Das esp-wifi scheint im delay in sleep modus zu 
gehen und wird vom AP "vergessen".

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Alt G. schrieb:
> Das esp-wifi scheint im delay in sleep modus zu gehen

Nein, tut es ganz sicher nicht. Aber solange du mit Details so geizig 
bist kann man halt nur mutmaßen was ein deinem Programm falsch ist.

von mIstA (Gast)


Lesenswert?

Alt G. schrieb:
> Funktioniert die ersten 30 min auch klaglos.

Wie präzise werden diese 30 min denn eingehalten?


Alt G. schrieb:
> Das ist viel komplexer.

Da hast Du wohl absolut recht. Und genau deshalb ist Dein Code-Schnipsel 
allein viel zu wenig Information für sinnvolle zielgerichtete Antworten.

Bist Du Dir sicher, daß die verzögerte Reaktion nicht auf 'nen Absturz 
oder WD-Reset des ESP zurückzuführen ist?

Wo imn Deinem Code befindet sich Dein Schnipsel genau? In Callbacks o.ä. 
kann delay beim ESP8266 echt lustige Effekte haben; z.B. Absturz des 
Controllers nachdem der folgende Befehl noch ausgeführt wird: 
https://8266iot.blogspot.com/p/dont-delay.html

von Geli (Gast)


Lesenswert?

Delays in dieser Größenordnung sind beim ESP8266 nicht tabu, aber Du 
solltest den Hardware Timer benutzen, mit "period=<Dein_delay>" kannst 
Du auch ganz lange Verzögerungen festlegen, die Dein Programm trotzdem 
nicht blockieren:

import uos, machine
import esp
import gc
import webrepl
import micropython
import network
import mqtt
from machine import Timer
tim = Timer(-1)
esp.osdebug(None)
gc.collect()
staif = network.WLAN(network.STA_IF); staif.active(True)
staif.isconnected()
staif.connect("myssid", "mypassword")
while staif.isconnected() == False:
  pass
webrepl.start()

def calltask():
    #print("call mqtt")
    mqtt.main()

tim.init(period=5555, mode=Timer.PERIODIC, callback=lambda t:calltask())

################
https://docs.micropython.org/en/latest/esp8266/quickref.html

von Geli (Gast)


Lesenswert?

Da ist überhaupt nichts komplex, im Gegenteil das Problem ist mit dem 
esp hardware time als task scheduler sehr einfach zu lösen...

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.