Тайм-аут запроса клиента wifiserver arduino esp8266

Я пытаюсь выполнить запрос GET из PHP-скрипта на Wifiserver esp8266, чтобы включить или выключить светодиод и вернуть JSON-объект, например так:{led:'off'} из {led:'on'} в зависимости от состояния светодиода.

URL выглядит примерно так:http://[IP-NUMBER]/LED=ON&access_token=x

Когда я делаю запрос к URL через браузер, все работает нормально, за исключением того, что индикатор загрузки браузера показывает бесконечное состояние загрузки. (Я возвращаю JSON-объект обратно, и светодиод de включается или выключается).

Так же, когда я пытаюсь позвонить $result = file_get_contents($url); в сценарии PHP, file_get_contents возвращает ошибку тайм-аута соединения через некоторое время. То же самое происходит при выполнении запроса get для PHP curl.

Таким образом, проблема в том, что каждый запрос GET к esp8266 никогда не заканчивается и поэтому загружается бесконечно.

Кто-нибудь знает, почему запрос GET к веб-серверу esp8266 разрешается в тайм-аут?

Это код на esp8266:

#include <ESP8266WiFi.h>

const char* ssid = "xx";
const char* password = "xx";

WiFiServer server(80);

void setup() {
Serial.begin(9600);
delay(10);WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
}

server.begin();
}

void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Wait until the client sends some data
while(!client.available()){
delay(1);
}

// Read the first line of the request
String request = client.readStringUntil('\r');
client.flush();

// Match the request
if (request.indexOf("&access_token=x") != -1) {int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
value = HIGH;
Serial.print('1');
}
if (request.indexOf("/LED=OFF") != -1){
value = LOW;
Serial.print('0');
}

// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json");
client.println(""); //closing header

client.print("{led:'");

if(value == HIGH) {
client.print("on");
} else {
client.print("off");
}
client.println("'}");
} else {
client.println("HTTP/1.0 403 Forbidden");
client.println("Content-Type: text/html");
client.println(""); //closing header
client.println("No Access");
}
client.stop();
delay(1);
}

постскриптум esp8266 отправляет 1 или 0 через последовательный порт к Arduino, который управляет включением или выключением светодиода.

—- редактировать —-

Я добавил Content-Length атрибут заголовка, который остановил состояние бесконечной загрузки при нацеливании на URL через веб-браузер, но file_get_contents($url); запрос или PHP-запрос curl до сих пор разрешается за время ожидания.

—- edit2 —-

Я заменил запрос PHP curl на Javascript AJAX-запрос и установил разрешенный заголовок CORS на веб-сервере esp8266, который, кажется, работает довольно хорошо!

Но все еще не знаю, почему запросы PHP приводят к тайм-ауту, поэтому проблема решена, но вопрос остается без ответа.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]