ESP8266 Webserver reagiert manchmal nicht.

OP #7225505
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.
OP #7225599
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".
Gast #7227991
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
Gast #7230925
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren