Tốc độ phản hồi HTTP GET nhanh của ESP8266


13

Trong khi bắt đầu lập trình ESP8266 để nhận dữ liệu thay đổi liên tục (vị trí xe) từ máy chủ, tôi đã gặp phải một vấn đề: Tôi không thể nhận được ESP8266 để nhận dữ liệu từ máy chủ hơn 3 lần / giây.

Tốc độ dữ liệu tốt nhất là 15 lần / giây. Dữ liệu nhận được là một chuỗi gồm 47 phần tử.

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

Chúng tôi thực hiện một yêu cầu NHẬN từ máy chủ và chúng tôi lọc dữ liệu thô từ các tiêu đề và các phản hồi là:

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

Có vẻ như ESP không thể nhận được phản hồi GET nhanh hơn. Thời gian tính bằng ms. Tôi đã quản lý để làm cho nó hoạt động đồng đều nếu độ trễ là khoảng 400 ms.

Điều gì sẽ là cách tốt nhất để cải thiện tốc độ của thủ tục?


Trong getPagechức năng của bạn , điều gì xảy ra nếu bạn loại bỏ độ trễ hoặc giảm đáng kể?
Bence Kaulics

1
Nói chung, nó không cải thiện hiệu suất, chỉ với một số GET, nó làm cho nó nhanh hơn, nhưng sau đó bạn lại có độ trễ 900, 1000ms. Tôi đã cố gắng sao chép một máy chủ web đơn giản trên một máy nhắn tin khác và một máy khách trên máy nhắn tin khác và nó hoạt động rất tốt ở đó. Các câu trả lời là khoảng 20-50ms. Vì vậy, tôi đoán nó có một cái gì đó với mạng.
Ra viêm Bērziņš

Và giao tiếp được thực hiện trên các nơi làm việc chung wi-fi.
Ra viêm Bērziņš

2
Bạn có thực sự cần kết nối mọi lúc bạn cần một trang không? Bạn không thể kết nối một lần và giữ kết nối và kết nối lại trong trường hợp kết nối bị mất hoặc hết hạn?
Rắn Sanders

2
Bạn có phải sử dụng HTTP cho việc này không? Nó cực kỳ không hiệu quả cho trường hợp sử dụng này, và không chỉ vì vấn đề còn sống.
Dan Hulme

Câu trả lời:


5

Bạn nên tránh thiết lập lại kết nối dài hạn trên phương thức getPage () của mình bằng cách sử dụng

Connection: Keep-Alive

thay vì

Connection: Close

Điều đó có thể tiết kiệm khá nhiều.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.