Позвонить Telegram Viber
График работы: пн–пт 9:00–18:00

ESP32-C3 Super Mini не подключается к Wi-Fi в ESPHome. Ошибка Auth Expired и её решение

RizneVdim

Время сборки: 30 мин

Сложность: низкая

Компоненты

  • esp32 c3 super mini

 При разработке устройств на базе ESP32-C3 Super Mini с использованием ESPHome иногда можно столкнуться с весьма неприятной проблемой. Плата успешно прошивается, видит домашнюю сеть Wi-Fi, но категорически отказывается подключаться к ней. В журнале постоянно повторяется ошибка Auth Expired, а IP-адрес устройство так и не получает.

 Именно с такой ситуацией я столкнулся во время разработки собственного инфракрасного хаба RVD IR Hub для Home Assistant. Самое странное заключалось в том, что обычный тестовый скетч Arduino подключался к той же сети практически мгновенно, а ESPHome бесконечно пытался пройти авторизацию и снова завершал подключение ошибкой.

После нескольких часов диагностики удалось найти рабочее решение. В этой статье я покажу весь процесс поиска причины, расскажу, какие способы оказались бесполезными, и приведу конфигурацию ESPHome, которая полностью решила проблему.

Как проявляется проблема

В большинстве случаев симптомы выглядят одинаково:

  • ESP32-C3 Super Mini успешно прошивается через ESPHome;
  • устройство обнаруживает домашнюю сеть Wi-Fi;
  • уровень сигнала может быть отличным (например, -45...-65 dBm);
  • SSID и пароль указаны правильно;
  • другие устройства подключаются к этой же сети без каких-либо проблем;
  • ESP32-C3 не получает IP-адрес;
  • в журнале постоянно появляется ошибка Auth Expired.

Типичный фрагмент журнала выглядит следующим образом:

[I][wifi:1097]: Connecting to 'Co-vid'...
[W][wifi_esp32:852]: Disconnected reason='Auth Expired'
[W][wifi:1678]: Connecting to network failed

На первый взгляд кажется, что указан неправильный пароль. Однако в моём случае пароль был абсолютно верным, поскольку обычный скетч Arduino подключался к той же самой сети буквально за несколько секунд.

Что было проверено

Прежде чем удалось найти решение, были проверены практически все наиболее очевидные варианты.

  • несколько USB-кабелей;
  • разные USB-порты компьютера;
  • полная очистка Flash-памяти ESP32;
  • повторная прошивка ESPHome;
  • отключение шифрования API;
  • статический IP-адрес;
  • режим fast_connect;
  • различные версии Framework (ESP-IDF и Arduino);
  • смена версии ESPHome;
  • проверка роутера и параметров безопасности сети;
  • проверка правильности SSID и пароля.

Ни один из перечисленных способов не устранил ошибку. ESPHome продолжал завершать подключение сообщением Auth Expired.

Почему обычный Arduino подключался, а ESPHome нет?

Наиболее странным моментом во всей этой истории стало то, что проблема наблюдалась исключительно при использовании ESPHome.

Для проверки был написан самый простой тестовый скетч Arduino с использованием стандартной библиотеки WiFi.h.

const char* ssid = "SETKA";
const char* password = "ВАШ_ПАРОЛЬ";
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("CONNECTED!");
  Serial.println(WiFi.localIP());
}
void loop() {
}

После загрузки этого скетча ESP32-C3 Super Mini практически мгновенно подключалась к домашней сети и получала IP-адрес.

Это означало только одно — проблема заключалась не в оборудовании, не в роутере и не в неправильном пароле. Сам Wi-Fi модуль работал полностью исправно.

Именно это позволило сосредоточиться на поиске причины уже внутри конфигурации ESPHome.

Что в итоге помогло

После анализа большого количества логов и нескольких часов диагностики решение оказалось неожиданно простым.

Вместо подключения только по имени сети (SSID) устройство было привязано к конкретной точке доступа по её BSSID. Дополнительно были включены параметры fast_connect, отключён режим энергосбережения и немного уменьшена мощность передатчика Wi-Fi.

Рабочая конфигурация выглядела следующим образом:

wifi:
  networks:
    - ssid: "SETKA"
      password: "ВАШ_ПАРОЛЬ"
      bssid: B4:B0:24:C6:67:17
  fast_connect: true
  output_power: 8.5dB
  power_save_mode: none
  ap:
    ssid: "ESPHome Fallback"
    password: "fallback-password"

Что означают эти параметры

  • ssid — имя вашей беспроводной сети.
  • password — пароль от Wi-Fi.
  • bssid — MAC-адрес конкретной точки доступа, к которой должна подключаться ESP32.
  • fast_connect: true — отключает дополнительное сканирование сети и сразу начинает подключение к указанной точке доступа.
  • power_save_mode: none — полностью отключает энергосбережение Wi-Fi во время работы.
  • output_power: 8.5dB — устанавливает умеренную мощность передатчика. В моём случае именно это значение работало наиболее стабильно.

После прошивки с такой конфигурацией устройство успешно подключилось к домашней сети уже с первой попытки.

[I][wifi:1575]: Connected
[C][wifi]: IP Address: 192.168.8.2
[C][wifi]: SSID: 'SETKA'
[C][wifi]: BSSID: B4:B0:24:C6:67:17
[D][wifi]: Saved fast_connect settings

После появления строки Connected Home Assistant практически сразу обнаружил новое устройство ESPHome автоматически. Достаточно было нажать кнопку «Добавить устройство», после чего плата появилась в системе и стала готова к дальнейшей настройке.

Как узнать BSSID своей сети Wi-Fi

Если вы никогда раньше не сталкивались с понятием BSSID, ничего страшного. Это не что иное, как уникальный MAC-адрес радиомодуля вашей точки доступа Wi-Fi.

Не стоит путать его с названием сети (SSID). Например, сеть может называться SETKA, а её BSSID выглядеть следующим образом:

B4:B0:24:C6:67:17

Именно этот адрес позволяет ESPHome подключаться к конкретной точке доступа, а не искать сеть по её имени при каждом подключении.

Способ 1. Посмотреть в журнале ESPHome

Самый простой способ — открыть журнал (Logs) устройства в ESPHome.

Во время сканирования окружающих сетей ESPHome выводит примерно такую информацию:

[I][wifi:1434]: - 'SETKA' (B4:B0:24:C6:67:17) ▂▄▆█ Ch:9 -51dB

В данном примере:

  • SETKA — имя вашей сети (SSID);
  • B4:B0:24:C6:67:17 — её BSSID;
  • Ch:9 — номер Wi-Fi канала;
  • -51 dB — уровень принимаемого сигнала.

Именно значение BSSID необходимо добавить в конфигурацию ESPHome.

Способ 2. Через настройки роутера

Практически любой современный роутер отображает MAC-адрес каждого Wi-Fi радиомодуля.

Обычно он находится в одном из разделов:

  • Wireless
  • Wi-Fi
  • Беспроводная сеть
  • Информация о точке доступа
  • Статус Wi-Fi

Название раздела зависит от производителя роутера, однако рядом с параметрами сети практически всегда отображается её BSSID или MAC-адрес.

Способ 3. С помощью смартфона

Многие приложения для анализа Wi-Fi отображают не только название сети, но и её BSSID, канал и уровень сигнала.

Например:

  • WiFiman;
  • WiFi Analyzer;
  • Ubiquiti WiFiman;
  • другие анализаторы беспроводных сетей.

Такие приложения особенно удобны, если у вас несколько точек доступа с одинаковым названием сети (Mesh-система или несколько роутеров).

Если в доме несколько точек доступа

Если используется Mesh-система или несколько точек доступа с одинаковым SSID, каждая из них имеет собственный уникальный BSSID.

Указав нужный BSSID в настройках ESPHome, можно принудительно подключить устройство именно к той точке доступа, которая обеспечивает наиболее стабильный сигнал.

Как узнать BSSID своей сети Wi-Fi

Если вы никогда раньше не сталкивались с понятием BSSID, ничего страшного. Это не что иное, как уникальный MAC-адрес радиомодуля вашей точки доступа Wi-Fi.

Не стоит путать его с названием сети (SSID). Например, сеть может называться SETKA, а её BSSID выглядеть следующим образом:

B4:B0:24:C6:67:17

Именно этот адрес позволяет ESPHome подключаться к конкретной точке доступа, а не искать сеть по её имени при каждом подключении.

Способ 1. Посмотреть в журнале ESPHome

Самый простой способ — открыть журнал (Logs) устройства в ESPHome.

Во время сканирования окружающих сетей ESPHome выводит примерно такую информацию:

[I][wifi:1434]: - 'SETKA' (B4:B0:24:C6:67:17) ▂▄▆█ Ch:9 -51dB

В данном примере:

  • SETKA — имя вашей сети (SSID);
  • B4:B0:24:C6:67:17 — её BSSID;
  • Ch:9 — номер Wi-Fi канала;
  • -51 dB — уровень принимаемого сигнала.

Именно значение BSSID необходимо добавить в конфигурацию ESPHome.

Способ 2. Через настройки роутера

Практически любой современный роутер отображает MAC-адрес каждого Wi-Fi радиомодуля.

Обычно он находится в одном из разделов:

  • Wireless
  • Wi-Fi
  • Беспроводная сеть
  • Информация о точке доступа
  • Статус Wi-Fi

Название раздела зависит от производителя роутера, однако рядом с параметрами сети практически всегда отображается её BSSID или MAC-адрес.

Способ 3. С помощью смартфона

Многие приложения для анализа Wi-Fi отображают не только название сети, но и её BSSID, канал и уровень сигнала.

Например:

  • WiFiman;
  • WiFi Analyzer;
  • Ubiquiti WiFiman;
  • другие анализаторы беспроводных сетей.

Такие приложения особенно удобны, если у вас несколько точек доступа с одинаковым названием сети (Mesh-система или несколько роутеров).

Если в доме несколько точек доступа

Если используется Mesh-система или несколько точек доступа с одинаковым SSID, каждая из них имеет собственный уникальный BSSID.

Указав нужный BSSID в настройках ESPHome, можно принудительно подключить устройство именно к той точке доступа, которая обеспечивает наиболее стабильный сигнал.

Совет. Если ESP32-C3 Super Mini постоянно выдаёт ошибку Auth Expired, но обычный Arduino-скетч успешно подключается к той же сети, попробуйте сначала добавить BSSID в конфигурацию ESPHome. В моём случае именно это оказалось ключом к решению проблемы.

Совет. Если ESP32-C3 Super Mini постоянно выдаёт ошибку Auth Expired, но обычный Arduino-скетч успешно подключается к той же сети, попробуйте сначала добавить BSSID в конфигурацию ESPHome. В моём случае именно это оказалось ключом к решению проблемы.

Code for ESPHome Device Builder
esphome:
  name: rvdir
  friendly_name: RVDIR

esp32:
  variant: esp32c3
  flash_size: 4MB
  framework:
    type: esp-idf

logger:
  level: DEBUG

api:

ota:
  - platform: esphome

wifi:
  networks:
    - ssid: "SETKA"
      password: "PASSWORD"
      bssid: B4:B0:24:C6:67:17

  fast_connect: true
  power_save_mode: none
  output_power: 8.5dB

  ap:
    ssid: "RVDIR Fallback"
    password: "12345678"

captive_portal:

С этим покупают:

  • ESP32 C3 Super Mini — компактная плата разработки с USB-C для Arduino и IoT проектов

    ESP32-C3 SuperMini — компактная плата разработки с USB-C для Arduino и IoT проектов
    160 грн
    ПОДРОБНЕЙ
  • Магнитный корпус для GC9A01 и ESP32-C3 Super Mini (без винтов)

    Корпус для дисплея GC9A01 и ESP32-C3 Super Mini с магнитным креплением
    100 грн
    ПОДРОБНЕЙ

Комментарии к статье

Пока нет комментариев. Будьте первым!

Добавить комментарий