ESP8266 tingkat respons GET HTTP cepat

13

Saat memulai pemrograman ESP8266 saya untuk terus mengubah data (posisi mobil) dari server, saya mengalami masalah: Saya tidak bisa mendapatkan ESP8266 untuk menerima data dari server lebih dari 3 kali / detik.

Kecepatan data akan lebih disukai 15 kali / detik. Data yang diterima adalah serangkaian 47 elemen.

#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;
}

Kami melakukan permintaan GET dari server dan kami memfilter data mentah dari header dan jawabannya adalah:

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

Tampaknya ESP tidak bisa mendapatkan respons GET lebih cepat. Waktu dalam ms. Saya berhasil membuatnya bekerja secara merata jika penundaan sekitar 400 ms.

Apa cara terbaik untuk meningkatkan kecepatan prosedur?

Raitis Bērziņš
sumber
Dalam getPagefungsi Anda , apa yang terjadi jika Anda menghapus penundaan atau menguranginya secara signifikan?
Bence Kaulics
1
Secara umum, itu tidak meningkatkan kinerja, hanya untuk beberapa GET itu membuatnya lebih cepat, tetapi sekali lagi Anda memiliki 900, keterlambatan 1000 ms. Saya mencoba mereplikasi server web sederhana pada ESP lain dan klien pada ESP lain, dan itu bekerja sangat baik di sana. Responsnya sekitar 20-50ms. Jadi saya kira itu ada hubungannya dengan jaringan.
Raitis Bērziņš
Dan komunikasi dilakukan melalui wi-fi tempat kerja umum.
Raitis Bērziņš
2
Apakah Anda benar-benar perlu terhubung setiap kali Anda membutuhkan halaman? Tidak bisakah Anda terhubung sekali dan menjaga koneksi, dan menghubungkan kembali jika koneksi hilang atau kedaluwarsa?
Snake Sanders
2
Apakah Anda harus menggunakan HTTP untuk ini? Ini sangat tidak efisien untuk kasus penggunaan ini, dan bukan hanya karena masalah tetap hidup.
Dan Hulme

Jawaban:

5

Anda harus menghindari koneksi yang diatur ulang pada metode getPage () Anda dengan menggunakan

Connection: Keep-Alive

dari pada

Connection: Close

Itu mungkin menghemat banyak.

mico
sumber