DrJarold
Member
Уважаемые ESPшнки, прошу вашей помощи... Есть код, который предназначен для обмена данными между ESP - Arduino по UART, в принципе все работает. Однако есть одно но... Если начать "флудить" запросами на адрес по которому работает ESP, то она зависает, т.е. в браузере идет загрузка и ничего не происходит пока не перезагрузишь ESP, так как все последующий запросы уже тоже не проходят. Однако если к примеру отключить Arduino и напрямую подключить ESP к Com порту, то уже "зафлудить" ее становиться тяжелее, но возможно, однако в этом случае если остановить загрузку то следующие запросы проходят нормально... Не могу понять почему это происходит!!!
Прошу прощения если задаю очевидные вопросы, которые уже обсуждались, не пинайте меня сильно я только учусь!!!!
Код:
#include <ESP8266WiFi.h>
byte ERROR_CONNECTION_TO_ACCESS_POINT = -2;
byte REQUEST_ERROR = -1;
byte REQUEST_GET_DEVICE = 0;
byte REQUEST_GET_CANAL_STATE = 1;
String ESP_REQUEST = "ESP_REQUEST_";
#define TIMEOUT 500
int waitCount = TIMEOUT;
const char* ssid = "";
const char* password = "";
WiFiServer server(80);
void setup() {
Serial.begin(9600);
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin();
Serial.println(WiFi.localIP());
Serial.flush();
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
while (!client.available()) {
delay(1);
}
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
String val = ESP_REQUEST + REQUEST_ERROR;
if (req.indexOf("/api/device") != -1)
val = ESP_REQUEST + REQUEST_GET_DEVICE;
else if (req.indexOf("/api/chanal") != -1)
val = ESP_REQUEST + REQUEST_GET_CANAL_STATE;
else {
ReturnErrorResponse(client, "Error request URL");
return;
}
Serial.println(val);
Serial.flush();
waitCount = TIMEOUT;
while (Serial.available() <= 0) {
waitCount--;
if (waitCount <= 0) {
ReturnErrorResponse(client, "Timeout");
return;
}
}
req = Serial.readStringUntil('\r\n');
ReturnSuccessResponse(client, req);
}
void ReturnErrorResponse(WiFiClient client, String message) {
String json = "{\"status\":\"error\",\"message\": " + message + ",\"data\":[]}";
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n " + json + "</html>\n";
client.print(s);
delay(1);
}
void ReturnSuccessResponse(WiFiClient client, String message) {
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n " + message + "</html>\n";
client.print(s);
delay(1);
}