Під час розробки пристроїв на базі 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, можна примусово підключити пристрій саме до тієї точки доступу, яка забезпечує найбільш стабільний сигнал.
Порада. Якщо ESP32-C3 Super Mini постійно видає помилку Auth Expired, але звичайний Arduino-скетч успішно підключається до тієї самої мережі, спробуйте спочатку додати BSSID у конфігурацію ESPHome. У моєму випадку саме це виявилося ключем до вирішення проблеми.
Порада. Якщо ESP32-C3 Super Mini постійно видає помилку Auth Expired, але звичайний Arduino-скетч успішно підключається до тієї самої мережі, спробуйте спочатку додати BSSID у конфігурацію ESPHome. У моєму випадку саме це виявилося ключем до вирішення проблеми.


Коментарі до статті
Поки що немає коментарів. Будьте першим!
Додати коментар