ESP8266 Wi-Fi не подключается к интернету без статического IP
Я наблюдаю очень странное поведение с моим ESP8266. Когда я подключаю его к Wi-Fi в первые пару раз, я не вижу никаких проблем, и ESP8266 подключается просто отлично.
Но после произвольного количества раз (например, когда я перезапускаю устройство) он пытается подключиться в течение многих лет (например, несколько минут). В конце концов он говорит "Подключен", но IP-адрес полностью неверен, и он не подключен к Интернету (запрос GET не выполняется).
Вот странные вещи:
- Если я назначаю статический IP-адрес, он ВСЕГДА работает и подключается в течение нескольких секунд
- Если я сброшу свой маршрутизатор с завода, он снова будет работать несколько раз
- Я не видел этого ни с каким другим устройством (например, ноутбуками или мобильными телефонами)
Это почти как если бы DHCP не смог назначить IP-адрес, а затем возвращает случайное значение по умолчанию.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
// Replace these with your WiFi network settings
const char* ssid = "MYSSID"; //replace this with your WiFi network name
const char* password = "MYPASSWORD"; //replace this with your WiFi network password
void setup() {
Serial.begin(115200);
delay(1000);
IPAddress ip(192,168,1,77);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
// If I uncomment this line then it works fine
// WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, password);
Serial.println();
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("success!");
Serial.print("IP Address is: ");
Serial.println(WiFi.localIP());
}
void loop() {
HTTPClient http;
String serverPath = "http://www.google.com";
http.begin(serverPath.c_str());
// Send HTTP GET request
int httpResponseCode = http.GET();
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println(payload);
// Free resources
http.end();
delay(1000);
}
Когда DHCP волшебным образом работает, он назначает: 192.168.1.159
Когда DHCP не работает, я получаю: 169.254.104.241
Когда я использую статический IP, то статический IP назначается.
Таким образом, вопрос заключается в следующем: Видел ли кто-нибудь такое поведение и, возможно, дал некоторые советы о том, как я могу обеспечить согласованность подключения к Интернету без необходимости статического IP-адреса?
Обновление:
Если я выполню пинг до 169.254.104.241,
я получу ответ. Но если я попытаюсь получить что-либо из Интернета, я получу код ответа HTTP = -1.
@Armand Maree, 👍6
Обсуждение3 ответа
Лучший ответ:
Наконец-то я нашел решение. Я понизил версию платы ESP8266 в Arduino Studio до версии 2.5.2, и это сработало.
Это интересно. Есть ли какая-то особая причина, по которой вы перешли на версию 2.5.2 (текущая версия 2.7.4)? Какая версия была причиной проблемы? Вы пробовали другие версии?, @StarCat
Это нормальное поведение. ну, не совсем так, этот адрес называется адресом apipa.
Это нормальное поведение для многих операционных систем-указывать себе адрес в диапазоне 169.254.x.x, когда они не получают ответы DHCP.
Я предполагаю, что ваша библиотека делает это за вас.
Это похоже на специальную адресацию: если все устройства не получат ответ dhcp, все они будут назначены в одну и ту же подсеть и смогут взаимодействовать с этими адресами apipa.
Я подозреваю, что это может быть ваш маршрутизатор. Вы можете убедиться в этом, загрузив бесплатное приложение DHCP-сервера для вашей операционной системы. Подключитесь через Ethernet к компьютеру, на котором запущено приложение DHCP, отключите DHCP в маршрутизаторе. Если это перестанет происходить, вы будете знать, что это маршрутизатор.
Редактировать: Кроме того, это может быть оговорка в прошивке маршрутизатора. Проверьте веб-сайт производителя маршрутизатора и посмотрите, доступны ли какие-либо обновления встроенного ПО. если он зависает с DHCP, скорее всего, у каждого клиента с этой версией прошивки была эта проблема. Такие вещи обычно исправляются очень быстро.
Это была очень полезная информация. Спасибо! После вашего комментария я просто оставил ESP, чтобы продолжать пытаться получить страницу из Интернета, и в конце концов, как и через 10 минут, она успешно подключилась. Я до сих пор понятия не имею, почему это происходит, но ради того, что мне нужно, я готов оставить все как есть. Я протестирую тот инструмент DHCP, о котором вы упомянули, когда у меня будет перерыв в работе, и посмотрю, что произойдет., @Armand Maree
Спасибо за публикацию вопроса и решения. Я провел несколько часов в Google и читал форумы, прежде чем наткнулся на это. Я не уверен, что моя первопричина была той же самой, но для меня "странный" IP для моего ESP8266 (nodemcu) произошел от их подключения через Гостевую сеть моего маршрутизатора Asus. Это привело к идентичной проблеме с OP с полным случайным подключением и длительным отсутствием подключений к Wi-Fi, Интернету и Blynk
Возврат обратно к ESP8266 2.5.2 в студии Arduino, похоже, волшебным образом решил проблему. Кто - то должен предупредить создателей библиотеки.
Рад, что я не единственный, кто видел эту проблему! Потратил на это так много часов. Я думал, что я один. Хаха., @Armand Maree
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
- ESP8266 Аналоговое чтение мешает Wi-Fi?
Подключается ли esp к Wi-Fi в любом случае? Этот ip `169.254.104.241", я полагаю, недействителен, но действительно ли он получает этот ip (в этом случае вы сканировали сеть)?, @Sim Son
@SimSon Я только что отправил запрос на этот IP-адрес, и он отвечает, и если я выполняю "arp-a", то появляется IP-адрес. Я провел еще один тест, и кажется, что устройство не имеет подключения к Интернету (я думаю... Я получаю код ответа HTTP -1). Я обновил вопрос., @Armand Maree