ESP8266 hızlı HTTP GET yanıt oranı


13

ESP8266'mı sunucudan sürekli değişen veriler (araç konumu) almak üzere programlamaya başlarken bir sorunla karşılaştım: ESP8266'yı sunucudan 3 saniyeden fazla veri almak için alamıyorum.

Veri hızı tercihen 15 kez / saniye olacaktır. Alınan veriler 47 elemanlık bir dizedir.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

// WiFi information
const char WIFI_SSID[] = "my-wlan";
const char WIFI_PSK[] = "123qwe123qwe";

// Remote site information
const char http_site[] = "10.13.137.144";
const int http_port = 8080;

// Pin definitions
const int LED_PIN = 16;

// Global variables
WiFiClient client;
String readString, readString1 ;
int x=0;
byte led_statuss = 0;
void setup() {

  // Set up serial console to read web page
  Serial.begin(115200);
  Serial.print("Thing GET Example");

  // Set up LED for debugging
  pinMode(LED_PIN, OUTPUT);

  // Connect to WiFi
  connectWiFi();
  }
//////////////////////////loop///////////////////////////////////////
void loop() {
  int time=millis();

    getPage();

    delay(100);
    // If there are incoming bytes, print them

     int lines_received = 0;

      while(client.available()) {
      String line = client.readStringUntil('\n');
      if (lines_received == 7) { 
      String k =(line.substring(0,line.length())); // removes headers from the server response

      Serial.println(k); // prints the raw data
      int time1 = millis()-time;
      Serial.print("Time is ");
      Serial.println(time1); // shows how much time the function takes    
      }
      lines_received++;

   }

     // Do nothing
    //Serial.println("Finished Thing GET test");
}

// Attempt to connect toFi///////////////////////////////////////////////////////////
void connectWiFi() {

  byte led_status = 0;

  // Set WiFi mode to station (client)
  WiFi.mode(WIFI_STA);

  // Initiate connection with SSID and PSK
  WiFi.begin(WIFI_SSID, WIFI_PSK);

  // Blink LED while we wait for WiFi connection
  while ( WiFi.status() != WL_CONNECTED ) {
    digitalWrite(LED_PIN, led_status);
    led_status ^= 0x01;
    delay(100);
  }

  // Turn LED on when we are connected
  digitalWrite(LED_PIN, HIGH);
}

// Perform an HTTP GET request to a remote page//////////////////////////////////////////
bool getPage() {

  // Attempt to make a connection to the remote server
  if ( !client.connect(http_site, http_port) ) {
    return false;
  }

  // Make an HTTP GET request
   //client.print("GET /cars" + "HTTP/1.1 \r\n" + "Host: " + "10.13.137.154" + "\r\n" + "Connection: close\r\n\r\n");
  client.println("GET /cars HTTP/1.1");
  client.print("Host: ");
  client.println(http_site);
  client.println("Connection: Close");
  client.println();
  delay(100); //some put delay, but why and how long?
  return true;
}

Sunucudan bir GET isteği yapıyoruz ve üstbilgilerden gelen ham verileri filtreliyoruz ve yanıtlar:

Thing GET Example1;62.91;43.55;190.03;5.59;20.00;44.26;861503022
Time is 228
1;62.91;43.55;190.04;0.00;20.00;43.79;861503920
Time is 926
1;62.91;43.55;190.03;0.00;20.00;44.26;861504988
Time is 1050
1;62.91;43.55;190.08;5.76;20.00;43.83;861505980
Time is 1011
1;62.91;43.55;190.07;0.00;20.00;43.82;861506983
Time is 992
1;62.91;43.55;190.04;0.00;20.00;43.79;861508012
Time is 1036
1;62.91;43.55;190.11;0.00;20.00;43.86;861510045
Time is 2020
1;62.91;43.55;190.05;0.00;20.00;43.80;861510274
Time is 222
1;62.91;43.55;190.07;0.00;20.00;43.82;861511306
Time is 1026
1;62.91;43.55;190.07;0.00;20.00;43.82;861512410
Time is 1108
1;62.91;43.55;190.04;0.00;20.00;43.79;861512605
Time is 219
1;62.91;43.55;190.03;0.00;20.00;44.26;861512840
Time is 214
1;62.91;43.55;190.06;0.00;20.00;43.81;861513842
Time is 996

ESP, GET yanıtlarını daha hızlı alamıyor gibi görünüyor. Zaman ms cinsindendir. Gecikmeler 400 ms civarındaysa, düzgün çalışmasını sağladım.

Prosedürün hızını artırmanın en iyi yolu ne olurdu?


Senin içinde getPagesen gecikme kaldırmak veya önemli ölçüde azaltmak eğer fonksiyonu ne olur?
Bence Kaulics

1
Genel olarak, performansı iyileştirmez, sadece bazı GET'ler için daha hızlı hale getirir, ancak yine 900, 1000ms gecikme yaşarsınız. Başka bir ESP'de basit bir web sunucusunu ve diğer ESP'de bir istemciyi çoğaltmaya çalıştım ve orada harika çalıştı. Yanıtlar 20-50 ms civarındaydı. Bu yüzden ağ ile ilgili bir şey olduğunu tahmin ediyorum.
Raitis Bērziņš

Ve iletişim ortak wi-fi çalışma alanları üzerinden yapılır.
Raitis Bērziņš

2
Bir sayfaya her ihtiyaç duyduğunuzda gerçekten bağlanmanız mı gerekiyor? Bir kez bağlanıp bağlantıyı koruyamaz ve bağlantının kesilmesi veya süresinin dolması durumunda yeniden bağlanamaz mısınız?
Snake Sanders

2
Bunun için HTTP kullanmanız gerekiyor mu? Bu kullanım durumu için inanılmaz derecede verimsiz ve sadece canlı tutma sorunu nedeniyle değil.
Dan Hulme

Yanıtlar:


5

GetPage () yönteminizde bağlantı sıfırlamalarından kaçınmalısınız.

Connection: Keep-Alive

onun yerine

Connection: Close

Bu çok tasarruf sağlayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.