Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

ESP8266'de gecikme

Başlatan veliusta, 16 Haziran 2017, 02:21:55

veliusta

#include <ESP8266WiFi.h>

const char *ssid = "PICPROJE";
const char *password = "123123123";

String s;

WiFiServer server(80);

void setup(){
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);

  s = "HTTP/1.1 200 OK\r\n";
  s += "Content-Type: text/html\r\n\r\n";
  s += "<!DOCTYPE HTML>\r\n<html>\r\n";
  s += "<script>\n";
  s += "function led_on(){ var xhttp = new XMLHttpRequest(); xhttp.open(\"GET\", \"/on\", true); xhttp.send();}\n";
  s += "function led_off(){ var xhttp = new XMLHttpRequest(); xhttp.open(\"GET\", \"/off\", true); xhttp.send();}\n";
  s += "</script>\n";
  s += "<button type=\"B1\" onclick=\"led_on()\" >ON</button>\n";
  s += "<button type=\"B2\" onclick=\"led_off()\" >OFF</button>\n";
  s += "</html>\n";
  
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.begin();
}

void loop(){
WiFiClient client = server.available();    // Check if a client has connected
  if (!client){
    return;
  }

  String req = client.readStringUntil('\r');    // Read the first line of the request
  client.flush();

  if (req.indexOf("/on") != -1){
   digitalWrite(LED_BUILTIN, LOW);
  }
  else if (req.indexOf("/off") != -1){
    digitalWrite(LED_BUILTIN, HIGH);
  }

  client.flush();
  
  client.print(s);
  delay(1);
}


Normal kullanırken sorun yok ama, Anormal kullanımda gecikme oluyor.
ON Butona delicesine basıp; Saniyede 30 kez basıp ,
1 kez OFF Butonuna basınca; OFF komutu 3-4 saniye sonra tepki veriyor. Bunu nasıl çözerim?

kimlenbu

yazdığın kodların çalışma süresini "micros()" kullanarak ölç. Saniyede teorik olarak kaç kontrol yapabiliyorsun bunu görmüş olursun. Limitlerin üzerinde bir performans bekliyorsan gerekli önlemleri alman lazım, on/off butonlarını disable etmek gibi...

veliusta

Şu komutu   client.print(s);  boolean ve if ile bir kez okuttuğumda hızlı çalışıyor.
ama 1-2 dk sonra modül kendini resetliyor. Bozuluyor.

aforizma

WiFiClient client = server.available();    bu koddan daha sonra   client.setNoDelay(1); kodu yazabilirmisiniz. Bende işe yaramıştı benzer problemle bende karşılaşmıştım. Belki işinize yarayabilir. Bende işe yaramıştı.

Kolay gelsin, İyi çalışmalar

ilyas KAYA

Ddos atak yapıyorsun bir nevi kaynaklar yeterli gelmiyor :) aralık verirseniz hiçbir sıkıntı yasamaz siniz. Sürekli isteklere sık cevap verdirmeyin.

veliusta

#5
Alıntı yapılan: dogan_ugurlu - 22 Haziran 2017, 00:09:23
WiFiClient client = server.available();    bu koddan daha sonra   client.setNoDelay(1); kodu yazabilirmisiniz. Bende işe yaramıştı benzer problemle bende karşılaşmıştım. Belki işinize yarayabilir. Bende işe yaramıştı.

Kolay gelsin, İyi çalışmalar


Sağol. client.setNoDelay(1); kodu, İşe yaradı. :)
Bu kodda server.setNoDelay(true); server.begin();  kodunun altına yazdım. Buda işe yaradı. Hangisi tam doğru acaba. Sizin verdiğiniz kodu loop kısma yazdım. Kendi bulduğumu setup kısma yazdım. En doğrusu hangisi?
Bu kodun yanına türkçe açıklama ne yazılabilir?  // ?

aforizma

Hocam bu kod tam olarak şu işe yarıyor. Küçük küçük parçalar halinde giden iletileri bir araya getirip hepsini bir kerede göndererek ağ üzerinden gönderilen küçük paketlerin TCP / IP trafiğini azaltmaya yarıyor. Açıklama olarak ne yazarsın bilmem :)

mufitsozen

#7
Alıntı yapılan: veliusta - 22 Haziran 2017, 03:16:09
Bu kodun yanına türkçe açıklama ne yazılabilir?  // ?

"TCP/IP Nagle Algoritmasini kullanma" yazilabilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.