При разработке устройств на базе 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. В моём случае именно это оказалось ключом к решению проблемы.


Комментарии к статье
Пока нет комментариев. Будьте первым!
Добавить комментарий