Перейти к содержанию

Почему ESP32 не подключается к Wi-Fi на 12 или 13 канале?

Обновлено Редакция GAW

У Wi-Fi 2,4 ГГц разные страны разрешают разное число каналов. Чтобы устройство нигде не нарушило правила, ESP-IDF по умолчанию включает всемирный безопасный режим — код страны «01» с каналами с 1 по 11.

Что задано по умолчанию

ПараметрЗначение по esp_wifi.hЧто это значит
Код страны«01»world safe mode
Первый канал, schan12412 МГц
Число каналов, nchan11каналы 1–11
ПолитикаAUTO, 802.11d включёнканалы 1–11 — активное сканирование, 12–14 — пассивное; после подключения — страна из маяка точки

ESP32 аппаратно работает в полосе 2412–2484 МГц, а какой её частью пользоваться, по даташиту определяет программа под требования региона. При политике AUTO на 12–14 каналах станция не передаёт запросы, а только слушает маяки точек доступа. Видимую сеть на 12 или 13 канале она так находит, а сеть со скрытым SSID не передаёт имя в маяках и при пассивном сканировании может не найтись — тогда станция получает событие отключения с причиной «точка доступа не найдена» (как обрабатывать такие события — в ответе «Как сделать автопереподключение ESP32 к Wi-Fi»).

Как решить

  1. Перевести роутер на канал 1–11 или сделать SSID видимым. Это работает с любым устройством и не требует менять прошивку.
  2. Задать страну с политикой MANUAL. Если каналы 12–13 разрешены там, где работает устройство, задают код страны с выключенным 802.11d — тогда настройка страны действует всегда:
// ESP-IDF v6.1: fixed country info, 802.11d off = always use it (esp_wifi.h)
ESP_ERROR_CHECK(esp_wifi_set_country_code("XX", false));  // XX: your country code from the list

Вместо XX подставляют код из списка, поддерживаемого ESP-IDF, — по правилам страны, где работает устройство, а не по списку каналов. Пятигигагерцовые сети ESP32 не видит вовсе — это другой случай, он разобран в ответе «Почему ESP32 не видит Wi-Fi 5 ГГц». Как каналы перекрываются по частоте, описано в термине «Шаг каналов», сравнение радиоинтерфейсов — в обзоре беспроводных интерфейсов, выводы модуля — на странице ESP32.

Похожие вопросы

Можно ли просто выбрать страну, где разрешён 13 канал?

Технически да, но Espressif прямо возлагает на пользователя обязанность выбирать настройки по местным правилам. Код страны меняет не только список каналов: по esp_wifi.h при этом переключаются и данные инициализации радиочасти PHY. Указывать чужую страну ради каналов неправильно; надёжнее перевести роутер на канал 1–11.

Почему с одним роутером на 13 канале ESP32 работает, а с другим нет?

Если сеть видимая, станция находит её пассивным сканированием 12–14 каналов и после подключения берёт сведения о стране из маяка точки, если роутер передаёт элемент Country. Если же у роутера включён скрытый SSID, пассивное сканирование его не обнаружит — по руководству ESP-IDF для этого нужна политика MANUAL.

Сохраняется ли настройка страны после перезагрузки?

Да: по описанию в esp_wifi.h настройка страны записывается во флеш-память. Если код страны меняли в одной прошивке, а потом залили другую, старая настройка может остаться — задайте её явно при запуске.

Источники

  1. Espressif Systems. ESP-IDF v6.1, components/esp_wifi/include/esp_wifi.h — esp_wifi_set_country: страна по умолчанию «01» (world safe mode) — schan = 1, nchan = 11, политика WIFI_COUNTRY_POLICY_AUTO; при AUTO станция берёт сведения о стране от точки доступа, к которой подключена, и возвращается к своим после отключения; функция не проверяет правила страны — заполнять поля по местным правилам обязан пользователь, рекомендуется esp_wifi_set_country_code; настройка сохраняется во флеш-памяти; esp_wifi_set_country_code(country, ieee80211d_enabled): по умолчанию «01» и 802.11d включён; список поддерживаемых кодов: «01», AT, AU, BE, BG, BR, CA, CH, CN, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HK, HR, HU, IE, IN, IS, IT, JP, KR, LI, LT, LU, LV, MT, MX, NL, NO, NZ, PL, PT, RO, SE, SI, SK, TW, US
  2. Espressif Systems. ESP-IDF v6.1 Programming Guide, Wi-Fi Driver — Overview (docs/en/api-guides/wifi-driver/overview.rst) — разд. Wi-Fi Country/Region Code, таблица политик: станция с WIFI_COUNTRY_POLICY_AUTO берёт сведения о стране из маяка подключённой точки, если там есть элемент Country, иначе — настройку по умолчанию; при сканировании — активное сканирование на каналах 1–11 и пассивное на 12–14; точку со скрытым SSID на канале пассивного сканирования сканирование может не найти — для поиска скрытых сетей на всех каналах нужна WIFI_COUNTRY_POLICY_MANUAL; ssid_hidden = 1 — точка доступа не передаёт SSID
  3. Espressif Systems. ESP32 Series Datasheet, Version 5.3 — табл. 5-6: рабочий диапазон частот Wi-Fi 2412–2484 МГц; примечание 1: устройство должно работать в полосе, выделенной региональными органами, рабочий диапазон настраивается программно

Нашли ошибку?