• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP32 - долгое подключение к Wi-Fi

pkolt

New member
Всем доброго времени суток!

Довольно плотно работал с ESP-8266 и вот решил перейти к ESP-32.
Уже пару раз споткнулся об ужасные несовместимости при переносе кода с ESP-8266, на ESP-32 (использую https://github.com/espressif/arduino-esp32).
Не могу понять почему ESP-32 так медленно подключается к Wi-Fi при повторном подключении (когда настройки подключения читаются из flash)?

ESP-8266
Первое подключение - 2-3 секунды
Второе подключение (настройки из flash) - 0.3 секунды

ESP-32
Первое подключение - 4 секунды
Второе подключение (настройки из flash) - 4 секунды

Я проверил что ESP-32 точно читает настройки из flash, т.к. без ошибок выполняется WiFi.begin() .
Даже нашел тикет, что в версии 2 если не указывать channel при подключении то выполняется полное сканирование каналов. Из-за чего якобы время подключения может увеличиться. Но даже если указать канал, то ничего не меняется. Все равно повторное подключение длиться несколько секунд.

В моем понимании (как это уже проверено на ESP-8266) повторное подключение к Wi-Fi должно быть мгновенным, меньше 1 секунды.

P.S. немного добавлю от себя первое впечатление... сам чип ESP-32 выглядит очень интересным и богатым, но софт написан так криво что нужно перед каждым вызовом гадать сработает оно или нет, и проверять по десять раз. API ужасное, написанное чужими для хищников. В Arduino-совместимых проектах обычно упор делают на простоту, а тут как будто специально все сделано так чтобы отбить желание использовать эту платформу.
 

pvvx

Активный участник сообщества
В WiFi существует период beacon. По умолчанию он составляет 102.4 мс. Через этот интервал все AP объявляют об своем присутствии в радио-эфире. Соответственно в пассивном режиме сканирования требуется прослушивать каждый канал чуть более этого периода.

В активном режиме сканирования устройство посылает запрос в эфир и AP, находящиеся на этом канале отвечают. И делается сразу пачка запросов. На это уходит несколько мс.

В итоге, если нет сверх-помех и каналы не перегружены, нахождение AP и её канала занимает не более пары сотен мс.

Далее идет соединение и согласование. Тут в зависимость вступает скорость обработки шифрации AP и ST, а так-же скорость выдачи IP и скорость обработки различных сетевых сервисов. Для тупого древнего роутера это время исчисляется от 0.1 до 0.7 секунды.

Все остальные задержки – это качество алгоритмов и тормознутость устройства подключаемого к AP.
 

pvvx

Активный участник сообщества
ESP8266 использует Flash и интерфейс к ней, аналогичный как у ESP32. Скорость считывания кода и данных одинакова (если вы не ограничили в установках). А т.к. у ESP32 размер кода раздут до предела и не помещается в кэш память, а при соединении используются части кода которые не загружены в кэш, тем более что это происходит после старта и в ПО имеется множество сбросов кэш памяти при записи и чтении установок во Flash, то скорость работы ESP8266 и ESP32 падает до уровня процессора работающего на 10..16 МГц. И тут у ESP32 ещё сам код раздут, да два конкурирующих ядра, не говоря уже о примененных алгоритмах и украшений созданных для Arduino…
 

pvvx

Активный участник сообщества
На современном этапе, если вы используете современный WiFi роутер, то ESP8266 и ESP32 могут вообще не подключиться никогда. Это связано с новыми введенными стандартами в WiFi, которые ESP не поддерживают. Переключите роутер в режим максимального тормоза и отключите все современные навороты, введенные для получения большей скорости и минимизации “пинга”. Т.е. превратите свой роутер в устаревший. Тогда, возможно, ESP будет подключаться более-менее.
 

pvvx

Активный участник сообщества
На современном роутере особое внимание надо уделить отключению “короткой преамбулы” введенной для минимизации длительности фреймов приема-передачи, т.е. для возможности обслуживания большего числа устройств и сокращению так называемого времени “пинга” – для общего ускорения всей радиосвязи AP. Если эта опция включена, тогда ESP вообще не принимает большинство фреймов и не может найти AP. Находит только если кто-то другой запрашивает AP, т.е. случайно в эфире появляются нужные данные :) Но соединиться всё равно не может.
 

pvvx

Активный участник сообщества
Видимо тут срабатывает “эксклюзивный алгоритм от Espressif Systems” рекламировавшийся как ноу-хау и указанный как причина закрытых кодов драйвера WiFi. Очень похоже что RF ESP подстраивает частоту передатчика по преамбуле, а тут она “короткая” :)
 

pvvx

Активный участник сообщества
Если у вас старый роутер и возникают проблемы с соединением после включения питания или перезагрузки ESP32 – смотрите используемый блок питания. Он должен гарантированно выдавать 1A особенно в импульсе, т.к. иначе возникают проблемы в инициализации именно RF части ESP32.
 

pvvx

Активный участник сообщества
Если хотите получить самое минимальное время соединения, тогда используйте две ESP8266 в безпарольном режиме соединения. Их алгоритмы заточены друг на друга, а не на другие WiFi. И т.к. тормоза и временные характеристики совпадают, то соединение происходит в пару периодов beacon. Т.е. их производительность и прочие факторы согласованы и нет ресинхронизации на beacon. А с чужой AP WiFi пропуск beacon дает отложение действий до следующего beacon. В WiFi beacon от AP - это как синхронизация действий и если не успел – жди следующего, в котором AP распределит тайм-слоты для участников. В WiFi6 уже другие алгоритмы и ESP туда не вписывается, а только рушит общую согласованность. По этому вам необходимо в роутере с WiFi6 отключить всё на старый стандарт и пусть все остальные тормозят ради ESP.
 

Evgeniy932

New member
В WiFi существует период beacon. По умолчанию он составляет 102.4 мс. Через этот интервал все AP объявляют об своем присутствии в радио-эфире.
Подскажите, возможно ли после подключения STA к SoftAP на ESP32 отключить отправку beacon для обнаружения?
 

pvvx

Активный участник сообщества
Подскажите, возможно ли после подключения STA к SoftAP на ESP32 отключить отправку beacon для обнаружения?
Beacon передает AP. Передача имени - это отдельная часть и не обязательна. Обнаружение связано с запросом имени или вставкой его в beacon. MAC там всё равно обязательно будет - без beacon WiFi не работает.
 
Сверху Снизу