Тайм-аут узла ESP8266 после подключения к сокету python
У меня есть устройство ESP8266 Node MCU, на котором работает HTTP-сервер arduino. Перед отправкой запроса на устройство я хочу убедиться, что оно прослушивает правильный порт с помощью python. Я делаю:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(.1)
result = s.connect_ex(("192.168.1.13", 8787))
if result == 0:
print("Yes, it is listening")
s.close()
Это показывает, что он работает должным образом. Однако, если я последую этому коду с этим запросом:
url = 'http://192.168.1.13:8787/RED'
r = requests.post(url)
r.close()
он зависает, ЕСЛИ Я не отключу его и не включу снова. Я обнаружил, что всякий раз, когда я пытаюсь подключиться к нему с помощью приведенного выше кода Python, мне нужно сбросить его, прежде чем он позволит мне отправлять ему какие-либо запросы.
Почему это происходит? Я неправильно отправляю запрос или он ожидает какой-то дополнительный ответ?
Вот код Arduino:
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#define RED_LED 13
bool running = false;
void RED() {
digitalWrite(RED_LED, HIGH);
}
const char* ssid = "<<<name>>>";
const char* password = "<<<password>>>";
; //
WiFiServer server(8787);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
// Подключаемся к сети Wi-Fi
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Запускаем сервер
server.begin();
}
void loop() {
// Проверяем, подключился ли клиент
WiFiClient client = server.available();
if (!client) {
return;
}
// Подождем, пока клиент отправит какие-то данные
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Читаем первую строку запроса
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Совпадение с запросом
if (request.indexOf("/RED") > 0) {
RED();
}
// Возвращаем ответ
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("Led pin is set");
client.println("</html>");
}
@JeremiahDuane, 👍0
Обсуждение0
Смотрите также:
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- Связь ESP8266 и Python
- ESP8266 Ошибка неверного запроса 400
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Проанализировать большой ответ json с помощью ESP8266
- ESP8266 не отвечает через случайные промежутки времени
- Код запроса ESP8266 GET -1
Что произойдет, если вы дважды подключитесь к серверу с помощью веб-браузера, закрыв вкладку между ними?, @romkey
он остается в
пока(!client.available()){
, @Juraj@romkey, проблема сохраняется независимо от того, закрываю ли я промежуточные вкладки или нет, @JeremiahDuane
@Juraj даже с r.close?, @JeremiahDuane
что вы ожидаете от
client.available ()
для закрытого соединения? он возвращает 0, конечно, @JurajО, так мне нужно добавить проверку для этого в коде Arduino? Я искренне доверял этой части, потому что она взята из довольно хорошего учебника., @JeremiahDuane