Wi-Fi перестал подключаться (Wemos D1 Mini)
Я в тупике. У меня есть несколько плат Wemos D1 Mini, которые вчера работали с локальным Wi-Fi, но сегодня ни одна из них не подключается. Больше удивляет то, что я могу прошить на них Tasmota, и все они подключаются к WiFi, но ни один из них не работает с этим кодом, который вчера работал. Любые советы будут оценены.
void setup_wifi() {
delay(10);
// Начнем с подключения к сети WiFi
Serial.println();
Serial.print("Connecting to ");
Serial.println(wifi_ssid);
// Подключаемся к сети WiFi, чтобы мы могли связаться с брокером MQTT и публиковать сообщения в темах.
WiFi.mode(WIFI_STA);
WiFi.begin(wifi_ssid, wifi_password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print(F("WiFi connected, "));
Serial.print(F("IP address: "));
Serial.println(WiFi.localIP());
}
@user3573562, 👍2
Обсуждение3 ответа
Лучший ответ:
Исправлено. Мой роутер старый и не поддерживает WPA. Начиная с библиотеки ESP8266WiFi версии 2.5.0, WPA является предпочтительным режимом. Решение состоит в том, чтобы получить лучший маршрутизатор или добавить WiFi.enableInsecureWEP(); перед вызовом WiFi.begin().
WiFi.enableInsecureWEP();
WiFi.begin(wifi_ssid, wifi_password);
Решено. (вроде). Это рабочий способ.
Я определил, что если я использую библиотеку ESP8266WiFi версии 2.5.0 или более поздней, все, что я получаю от WiFi.status(), это WL_NO_SSID_AVAIL.
Вернувшись к библиотеке ESP8266WiFi версии 2.4.2, я могу получить соединение с тем же скетчем.
(Комментарии Юрая подтолкнули меня к тому, чтобы попробовать старые версии библиотек.)
Предполагая, что это не что-то глупое и случайное, например изменение пароля или ssid в вашем коде, вы можете столкнуться с двумя вещами:
Функция WiFi.begin() технически не требуется более одного раза. Записанные с его помощью значения хранятся в отдельной части флэш-памяти, которая не перезаписывается никакими загрузками скетча. Поскольку он хранится постоянно, он может начать подключение до того, как будет вызван ваш код подключения. Это вызывает состояние гонки, которое вызывает ошибку в библиотеке, которая, насколько мне известно, все еще присутствует и может сломать подсистему WiFi. Если это произошло, причина того, что другая прошивка может работать, заключается в том, что она исправляет ошибку или каким-то образом использует другой метод. Вы можете обойти это, подождав несколько секунд, а затем попытавшись подключиться, если он в данный момент не подключен. Попробуйте это исправление: https://github.com/kentaylor/EraseEsp8266Flash, чтобы узнать, не в этом ли проблема. Кроме того, вы можете попробовать некоторые варианты из первой ссылки моего следующего пункта, чтобы увидеть, подходят ли они для этой цели.
Помните, я говорил, что функции сохраняют данные во флэш-памяти? У него ограниченное количество операций записи, и нет, этот раздел не имеет выравнивания износа. После стольких операций записи (и, поскольку в настройке вызывается метод begin(), он делает это каждый раз, когда устройство запускается или выходит из спящего режима!) он не сможет удерживать правильные значения. Выносливость может быть довольно низкой на некоторых более дешевых флэш-устройствах (и более дешевых платах). Но если вы хотите продолжать использовать begin() для настройки Wi-Fi (вместо того, чтобы установить его один раз обычным способом, а затем убедиться, что begin() снова не вызывается вашим кодом), удалите сохраненные параметры (Запоминает ли ESP8266 данные о доступе к Wi-Fi?), а затем отключите сохранение (esp8266 рекламирует точку доступа, даже если она прошита с помощью кастомная прошивка). Я также предлагаю запустить следующий фрагмент кода, чтобы отключить сохранение, а затем остановить его выключение (поскольку ЭТО изменение тоже сохраняется!):
если (WiFi.getPersistent()) { WiFi.persistent(false);
Известно, что последний случай нарушает работу проектов Arduino, но НЕ проектов nodeMCU Lua. Если прошивка Tazmota использует другой метод, она также может игнорировать эту проблему, но она может возникнуть в вашем коде. Чтобы проверить это, попробуйте запустить код на другой плате (может быть того же типа, только если она отличается).
SDK не записывает одно и то же значение конфигурации во флэш-память, @Juraj
Это исправили или так было всегда? У меня сложилось впечатление, что он сделал это по крайней мере в один момент., @RDragonrydr
Спасибо за полезную информацию. Отличается ли «Erase Flash: All Flash Contents» в Arduino IDE от программы Кента Тейлора? Я попробовал тот же скетч на нескольких Wemos D1 Minis и паре плат NodeMCU. При использовании библиотеки ESP8266WiFi версии 2.4.2 все они компилируются, загружаются в ESP и подключаются к WiFi. При использовании библиотеки ESP8266WiFi версии 2.5.0 или более поздней ни одна из них не подключается к WiFi. Я сильно подозреваю свой маршрутизатор, хотя я перезагрузил его, а затем сбросил его до исходных настроек. Время для нового маршрутизатора., @user3573562
@RDragonrydr, ссылка на прошивку AT Приложение «A» Уведомление, @Juraj
- Как подключиться к Arduino с помощью WiFi?
- ESP8266 не подключается к Wi-Fi
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- WebSocketsServer.h: No such file or directory
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
Вы обновили пакет плат esp8266?, @Juraj
Спасибо за ответ. Никаких обновлений — я только что включил свой компьютер, чтобы продолжить свой проект предыдущего дня, и ни одно из устройств Wemos не подключается к WiFi. Но я могу прошить их с помощью Tasmota, и они подключаются к WiFi, так что это не аппаратная проблема., @user3573562
Я думаю, что это проблема с вашим мастером Wi-Fi или с вашими рабами. Но если несколько рабов не могут подключиться к главному Wi-Fi, это не может быть проблемой с вашими рабами. Это перезагрузит компьютер. Это может быть проблема с avrdude или Arduino IDE., @TheFnafException
и какую версию пакета arduino esp8266 вы используете? он использует ту же версию SDK, что и прошивка Tasmota?, @Juraj
Похоже на версию 2.2.2 библиотеки WiFiesp. Но я ничего не изменил. Скетч мелькал и работал вчера, но не сегодня., @user3573562
2.2.2 очень старый. установить 2.5.2, @Juraj
Я подошел к ПК, который никогда не видел Arduino — установил последнюю версию IDE, последние платы esp8266 и последнюю библиотеку esp8266WiFi. Тот же результат. Это начинает выглядеть как проблема с маршрутизатором, но почему узлы esp, скомпилированные ранее, до сих пор подключаются без проблем? Почему Tasmota теперь может без проблем подключиться?, @user3573562