ESP8266 не подключается к WiFi при перезагрузке
Предполагается, что ESP8266 запоминает учетные данные WiFi и повторно подключается к сети (если она доступна) после каждой перезагрузки. Это было темой этого вопроса: Запоминает ли ESP8266 данные доступа к Wi-Fi?
Я наблюдал за этим поведением, и что-то изменилось, я думаю, когда я обновлял через Board Manager в Arduino IDE. Теперь учетные данные теряются при каждой перезагрузке устройства. Я пытался вернуться к более ранним версиям, но мне не удалось вернуться к версии определения платы, которая восстанавливает старое поведение.
Вот пример скетча, который я собрал для тестирования:
#include <ESP8266WiFi.h>
char ssid[] = "ssid";
char pss[] = "pass";
void setup() {
Serial.begin(115200);
Serial.println("Started");
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Not connected");
WiFi.begin(ssid, pss);
digitalWrite(0, LOW);
digitalWrite(2, HIGH);
} else {
Serial.println("Connected");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
}
}
void loop() {
Serial.println("Loop");
delay(500);
}
Конечно, при первом прохождении он попадает в первый случай и печатает "Не подключено". Однако при перезагрузке я ожидал, что он столкнется со вторым случаем и напечатает «Подключено».
Я программирую через Arduino IDE. Плата представляет собой Adafruit Feather HUZZAH ESP8266. Я пробовал lwIP v1.4
и lwIP v2
в версии 2.4.1 платы. Я начал откатывать версии оттуда, получил те же результаты во время выполнения.
Итак, вопросы:
- Является ли это известной ошибкой модулей ESP8266 в последних версиях?
- Сохраняется ли какой-либо аспект конфигурации Wi-Fi на плате, когда я загружаю новый скетч? Если да, то как мне откатиться назад?
@Brick, 👍1
Обсуждение2 ответа
Лучший ответ:
Библиотеки SDK esp8266 запускают соединение STA, но оно обрабатывается другим потоком, а не скетчем Arduino. Вы можете дождаться этого подключения в настройках с помощью waitForConnectResult. Он возвращает статус().
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Not connected");
WiFi.begin(ssid, pss);
digitalWrite(0, LOW);
digitalWrite(2, HIGH);
} else {
Serial.println("Connected");
digitalWrite(0, HIGH);
digitalWrite(2, LOW);
}
для подключения с запомненным режимом STA, ssid и паролем, но со статическим IP-адресом
WiFi.setAutoConnect(false);
IPAddress ip(192, 168, 1, 8);
IPAddress gw(192, 168, 1, 1);
IPAddress sn(255, 255, 255, 0);
WiFi.config(ip, gw, sn, gw);
WiFi.begin(); // использует запомненный ssid и пароль
WiFi.waitForConnectResult();
Это устранило проблему в образце скетча, который я создал для вопроса. Для тех, кто придет позже, чтобы заставить его работать в реальном скетче, я должен был использовать это, а также согласовывать его с другими аспектами настройки WiFi, особенно с выбором режима. Мой оригинал менял режим с AP на AP+STA в ходе скетча, и мне пришлось удалить эту часть, чтобы с самого начала она находилась в режиме AP+STA. Странно, что этот же скетч раньше работал, а потом вдруг перестал, но я рад, что снова работаю сейчас., @Brick
настройки режима и точки доступа также запоминаются и запускаются параллельно скетчу, @Juraj
Во-первых, давайте прямо ответим на вопросы ОП:
Это известная ошибка?
Ответ: "[проблемы][1]" есть и будут, но Ответ @Juraj указывает, что это была не проблема, а набросок, который не ждал самого быстрого способа включить Wi-Fi + IP esp8266, подключение SDK.
Есть ли... конфигурация WiFi, которая сохраняется на плате, когда я загружаю новый скетч? Как откатиться?
Ответ: "отката" нет, только стирание & записать новые данные во флэш-память для восстановления. Во время загрузки скетча «настройки Wi-Fi» можно только стереть. Пользователь выберет в меню Arduino IDE > Инструменты > Стереть Flash: Sketch + настройки Wi-Fi. Эти «настройки Wi-Fi» обычно записываются во флэш-память при вызове
WiFi.begin(ssid,passphrase); // or,
WiFi.begin(ssid,passphrase,channel,bssid,connect); // about 2x quicker
Последний аргумент может быть ложным; нам даже не нужно подключаться к Wi-Fi, чтобы сохранить настройки, например.
begin("ssid", "passphrase", 1, {0xA4,0xB1,0xE9,0xBC,0x6A,0x28}, false);
ESP.restart();
Затем дождитесь подключения прошивки SDK.
А теперь давайте закончим «новой» информацией, связанной с изменениями в Arduino esp8266 core 3.0 примерно в середине 2020 года.
Начиная с ядра 3.0 функция подключения SDK была отключена по умолчанию. С тех пор скетчи, желающие воспользоваться преимуществами быстрого подключения SDK (около 220 мс, или в два раза быстрее, чем любой WiFi.begin), должны включить следующую строку в начале функции setup()
enableWiFiAtBootTime(); // предотвращает отключение sdk connect
- 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?
удалите оператор
if
из блокаsetup()
.... поместитеserial.println(WiFi.status())
в блокloop()
.... уменьшите задержку до 100 мс .. ... это должно показать вам, подключается ли он и сколько времени требуется для подключения, @jsotola