서버에서 데이터를 지속적으로 변경하기 위해 ESP8266 프로그래밍을 시작하는 동안 문제가 발생했습니다. ESP8266이 초당 3 회 이상 서버에서 데이터를 수신 할 수 없습니다.
데이터 속도는 바람직하게는 15 회 / 초이다. 수신 된 데이터는 47 개의 요소로 구성된 문자열입니다.
#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;
}
서버에서 GET 요청을 수행하고 헤더에서 원시 데이터를 필터링하고 응답은 다음과 같습니다.
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 응답을 더 빨리 얻을 수없는 것 같습니다. 시간은 ms입니다. 지연이 약 400ms이면 고르게 작동하도록했습니다.
절차 속도를 향상시키는 가장 좋은 방법은 무엇입니까?
일반적으로 성능을 향상 시키지는 않지만 일부 GET의 경우 속도가 빨라지지만 다시 900, 1000ms 지연됩니다. 다른 ESP에서 간단한 웹 서버와 다른 ESP에서 클라이언트를 복제하려고 시도했지만 훌륭하게 작동했습니다. 응답은 약 20-50ms였습니다. 그래서 그것은 네트워크와 관련이 있다고 생각합니다.
—
Raitis Bērziņš
그리고 커뮤니케이션은 직장의 일반적인 Wi-Fi를 통해 이루어집니다.
—
Raitis Bērziņš
페이지가 필요할 때마다 연결해야합니까? 연결이 끊어 지거나 만료 된 경우 한 번 연결하여 연결을 유지하고 다시 연결할 수 없습니까?
—
뱀 샌더스
이를 위해 HTTP를 사용해야합니까? keep-alive 문제로 인한 것이 아니라이 사용 사례에서는 엄청나게 비효율적입니다.
—
Dan Hulme
getPage
당신이 지연을 제거하거나 상당히을 줄이면 기능, 무슨 일이?