Веб-сервер ESP8266 не отвечает
Я пытаюсь связаться с веб-сервером, работающим на моей мини-совместимой плате Wemos D1.
Я пробую один пример esp8266, используя приведенный ниже код Arduino examples "WifiManualServer". Я заменил SSI и пароль для своей сети Wi Fi в линиях
#define STASSID "my wifi ssid"
#define STAPSK "my secret"
/*
Этот скетч демонстрирует, как настроить простой HTTP-сервер.
Сервер установит PIN GPIO в зависимости от запроса
http://server_ip/gpio/0 установит GPIO2 на низком уровне,
http://server_ip/gpio/1 установит максимум GPIO2
server_ip-это IP-адрес модуля ESP8266, который будет
напечатан в последовательный порт при подключении модуля.
*/
#include <ESP8266WiFi.h>
#ifndef STASSID
#define STASSID "my wifi ssid"
#define STAPSK "my secret"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(115200);
// prepare LED
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print(F("Connecting to "));
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println();
Serial.println(F("WiFi connected"));
// Start the server
server.begin();
Serial.println(F("Server started"));
// Print the IP address
Serial.println(WiFi.localIP());
server = WiFiServer(80);
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println(F("new client"));
client.setTimeout(5000); // default is 1000
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(F("request: "));
Serial.println(req);
// Match the request
int val;
if (req.indexOf(F("/gpio/0")) != -1) {
val = 0;
} else if (req.indexOf(F("/gpio/1")) != -1) {
val = 1;
} else {
Serial.println(F("invalid request"));
val = digitalRead(LED_BUILTIN);
}
// Set LED according to the request
digitalWrite(LED_BUILTIN, val);
// read/ignore the rest of the request
// do not client.flush(): it is for output only, see below
while (client.available()) {
// byte by byte is not very efficient
client.read();
}
// Send the response to the client
// it is OK for multiple small client.print/write,
// because nagle algorithm will group them into one single packet
client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "));
client.print((val) ? F("high") : F("low"));
client.print(F("<br><br>Click <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/1'>here</a> to switch LED GPIO on, or <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/0'>here</a> to switch LED GPIO off.</html>"));
// The client will actually be *flushed* then disconnected
// when the function returns and 'client' object is destroyed (out-of-scope)
// flush = ensure written data are received by the other side
Serial.println(F("Disconnecting from client"));
}
Как только я скомпилирую и загружу скетч, он сможет подключиться к моей сети Wi-Fi. Ниже приведен вывод на последовательном мониторе.
20:45:12.633 -> Connecting to <text replaced xxxxxxx>
20:45:13.247 -> ........
20:45:17.551 -> WiFi connected
20:45:17.551 -> Server started
20:45:17.551 -> 192.168.0.39
Я могу проверить клиентское соединение в моем пользовательском интерфейсе управления сетью Wi-Fi маршрутизаторов.
Espboard подключается и назначается IP-адрес, как на выходе (192.168.0.39
).
Когда я запускаю браузер и пытаюсь получить http://192.168.0.39/gpio/0
, время запроса истекло.
с моего пк с Windows 10 попробовал пинговать 192.168.0.39
, но время ожидания запроса истекло.
Из скетча я вижу следующие строки в функции loop ()
:
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println(F("new client"));
Выполнение никогда не достигало строки Serial.println(F("новый клиент"));
.
Я попытался вставить линейный сервер = WiFiServer(80);
после того, как соединение Wi-Fi установлено.
Пожалуйста, поделитесь своими мыслями о том, почему сервер.available()
не удался?
@Joshua Francis, 👍3
Обсуждение0
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
- Создать один сервер в режиме точки доступа, а другой - в режиме станции.
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Веб-сервер ESP8266 отображает только текст, даже если тип контента — текст/HTML.
- Ошибка при компиляции скетча для Arduino Uno (ld return 1)
- Wemos D1 mini зависает через несколько минут
Находится ли ваш компьютер с Windows 10 в той же подсети? Накладывает ли ваш Wi-Fi-маршрутизатор изоляцию Wi-Fi?, @Majenko
удалите строку " сервер = WiFiServer(80)";, @Juraj
Я думаю, вам нужно где-то вызвать " server.on ()", чтобы сервер действительно обслуживал URL-адрес. Какую библиотеку вы используете, кстати (для меня за "#include " ничего нет)?, @Sim Son
@SimSon, это не библиотека веб-сервера esp8266, @Juraj
@Juraj, спасибо за предложение. Теперь я удалил линейный сервер = WiFiServer(80). Вопрос решен. Теперь сервер доступен. Спасибо за помощь., @Joshua Francis