Wi-Fi-подключения теряются при сбросе подключения
Посмотрите на трюк в последних нескольких строках этого кода:
#include <ESP8266WiFi.h>
const char* ssid = "xxxxx";
const char* password = "yyyyyyy";
// Создаем экземпляр сервера
// укажите порт для прослушивания в качестве аргумента
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// Подключиться к сети WiFi
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();
Serial.println("Server started");
// Распечатать IP-адрес
Serial.println(WiFi.localIP());
}
void loop() {
// Проверяем, подключился ли клиент
WiFiClient client = server.available();
if (!client) {
return;
}
int delays = 0;
// Подождите, пока клиент отправит какие-нибудь данные
Serial.println("new client");
while(!client.available()){
delay(1);
delays++; // Первая строка трюка.
if (delays > 10) {
return;
} // Трюк заканчивается.
}
...// Обработка некоторых событий.
}
Код работает нормально и без этого трюка (только delay(1);
внутри цикла), но проблема в том, что он там застревает, если из браузера запрашиваются какие-то ответы, из-за чего вкладка закрывается между запросами.
Один ответ для favicon:
if (req.indexOf("favicon.ico") != -1) {
String s = "HTTP/1.1 404 WTF Favicon !!\r\n";
client.print(s);
client.flush();
return;
}
У меня также был один похожий ответ, начинающийся с 200 OK для определенных URL-адресов, а затем ответ в виде простого текста JSON.
Я хотел бы знать, почему мой сервер зависает на этой delay(1);
? Кроме того, когда требуется этот трюк, какое правильное значение delays
?
Также я добавил client.flush();
после каждого client.print();
. Может ли это на что-то повлиять?
@mico, 👍0
0
Смотрите также:
- Обнаружение ESP8266 в сети
- Невозможно установить связь между модулем ESP-12E и мобильным устройством через маршрутизатор ESP-12E.
- ESP8266 Одноранговая сеть с AP и STA — кэширование клиентов AP, очистка их запросов?
- ESP8266 загружает данные на облачную платформу Google
- Мобильная точка доступа с wemos d1 mini
- Каков наилучший способ инициализации Wi-Fi-связи между двумя устройствами (получить IP-адрес)?
- Зачем нужно время отклика в AT-командах esp8266?
- Что вызывает повторную инициализацию моей функции настройки esp8266?