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 платы. Я начал откатывать версии оттуда, получил те же результаты во время выполнения.

Итак, вопросы:

  1. Является ли это известной ошибкой модулей ESP8266 в последних версиях?
  2. Сохраняется ли какой-либо аспект конфигурации Wi-Fi на плате, когда я загружаю новый скетч? Если да, то как мне откатиться назад?

, 👍1

Обсуждение

удалите оператор if из блока setup() .... поместите serial.println(WiFi.status()) в блок loop().... уменьшите задержку до 100 мс .. ... это должно показать вам, подключается ли он и сколько времени требуется для подключения, @jsotola


2 ответа


Лучший ответ:

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


2

Во-первых, давайте прямо ответим на вопросы ОП:

  1. Это известная ошибка?

    Ответ: "[проблемы][1]" есть и будут, но Ответ @Juraj указывает, что это была не проблема, а набросок, который не ждал самого быстрого способа включить Wi-Fi + IP esp8266, подключение SDK.

  2. Есть ли... конфигурация 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
,