Picproje Elektronik Sitesi

SERBEST BÖLGE => İnternet => Konuyu başlatan: veliusta - 16 Haziran 2017, 02:21:55

Başlık: ESP8266'de gecikme
Gönderen: veliusta - 16 Haziran 2017, 02:21:55
#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?
Başlık: Ynt: ESP8266'de gecikme
Gönderen: kimlenbu - 16 Haziran 2017, 13:19:53
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...
Başlık: Ynt: ESP8266'de gecikme
Gönderen: veliusta - 21 Haziran 2017, 22:39:54
Ş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.
Başlık: Ynt: ESP8266'de gecikme
Gönderen: aforizma - 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
Başlık: Ynt: ESP8266'de gecikme
Gönderen: ilyas KAYA - 22 Haziran 2017, 02:29:06
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.
Başlık: Ynt: ESP8266'de gecikme
Gönderen: veliusta - 22 Haziran 2017, 03:16:09
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?  // ?
Başlık: Ynt: ESP8266'de gecikme
Gönderen: aforizma - 22 Haziran 2017, 03:44:46
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 :)
Başlık: Ynt: ESP8266'de gecikme
Gönderen: mufitsozen - 22 Haziran 2017, 09:26:30
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.