ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
Рейтинг: 69.4% · 29 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
Столкнулся с проблемой: ESP32 работает нормально, но после выхода из deep sleep перестаёт подключаться к роутеру. Скетч простой — считываю данные с DHT22, отправляю на MQTT-брокер, ухожу в сон на 5 минут. Первые 2-3 цикла всё ок, потом зависает на этапе WiFi.begin(). Жду 30 секунд, ничего. Приходится вручную перезагружать. Кто сталкивался?
Кто не бэкапит — тот плачет.
✔ Лучший ответ сформирован автоматически — Farkle
Ещё один момент которого здесь не коснулись: если ESP32 уходит в deep sleep и роутер за это время успевает удалить запись ARP — при пробуждении устройство пытается подключиться с тем же IP (если DHCP lease ещё действует), но роутер уже не знает этот MAC в ARP-таблице и нужен новый ARP handshake. На некоторых дешёвых роутерах это приводит к зависанию именно на этапе получения IP. Статический IP…
- rtrowsdell
- Сообщения: 33
- Зарегистрирован: 11 май 2026, 21:50
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
Классика жанра. Попробуй перед подключением явно вызывать WiFi.disconnect(true) и WiFi.mode(WIFI_OFF), а потом снова WiFi.mode(WIFI_STA). Ещё важный момент — задержка после WiFi.begin(), у меня помогало добавить delay(100) перед циклом ожидания подключения. Без этого стек иногда не успевает инициализироваться.
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
У меня была похожая история. Оказалось дело в роутере — он не сразу отдаёт IP устройству, которое уже было подключено. Решил проблему через статический IP: WiFi.config(ip, gateway, subnet). Скорость подключения выросла с 3-4 секунд до менее чем секунды, и зависания пропали полностью.
- coder_anton
- Сообщения: 32
- Зарегистрирован: 11 май 2026, 16:50
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
Не забывай про esp_wifi_set_ps(WIFI_PS_NONE) — отключает power saving на уровне Wi-Fi стека. По умолчанию включён режим экономии, который иногда конфликтует с логикой переподключения после сна. Особенно актуально для роутеров на старых прошивках.
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
Проверь ещё одну вещь: сколько у тебя устройств в сети? Если роутер дешёвый и таблица ARP переполняется, он начинает игнорировать новые DHCP-запросы от уже известных MAC-адресов. Статический IP решает это на корню. Ну и watchdog timer не помешает — на случай если всё равно зависнет, хотя бы сам перезагрузится.
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
Самое полное решение которое я нашёл после месяца мучений: использовать RTC_DATA_ATTR для хранения BSSID и канала роутера между циклами сна. Тогда ESP32 не сканирует все каналы, а сразу подключается к нужной точке. Вот суть: сохраняй WiFi.BSSID() и WiFi.channel() перед уходом в сон, а при пробуждении передавай их в WiFi.begin(ssid, pass, channel, bssid). Время подключения падает до 200-400 мс вместо 3-5 секунд, и зависания исчезают — потому что основная причина глюков это как раз долгий процесс сканирования/ассоциации.
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
@markcack, RTC_DATA_ATTR с BSSID и каналом — лучший совет в треде. Добавлю детали: при сохранении BSSID нужно копировать массив байт явно, потому что WiFi.BSSID() возвращает указатель на внутренний буфер, который после WiFi.disconnect() может стать невалидным. То есть: `uint8_t bssid[6]; memcpy(bssid, WiFi.BSSID(), 6);` — и вот этот массив уже в RTC_DATA_ATTR. Иначе после нескольких циклов получишь мусор вместо адреса точки.
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
@rojo7509, версия arduino-esp32 — это вообще первое что надо проверять при странных Wi-Fi глюках. На 2.0.x был известный баг с тем что Wi-Fi стек не полностью сбрасывался при deep sleep, и накопленное состояние через несколько циклов давало именно такую картину: первые 2-3 цикла работает, потом висит. В 3.x это починили, плюс там новый Wi-Fi драйвер с улучшенным обходом проблем reconnect.
Re: ESP32 не подключается к Wi-Fi после глубокого сна deep sleep
✔ Лучший ответ — сформирован автоматически
Ещё один момент которого здесь не коснулись: если ESP32 уходит в deep sleep и роутер за это время успевает удалить запись ARP — при пробуждении устройство пытается подключиться с тем же IP (если DHCP lease ещё действует), но роутер уже не знает этот MAC в ARP-таблице и нужен новый ARP handshake. На некоторых дешёвых роутерах это приводит к зависанию именно на этапе получения IP. Статический IP решает проблему полностью, как уже написал matvey5884, но если хочется DHCP — увеличьте lease time до нескольких часов в настройках роутера.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Pixel 9 Pro после мартовского Pixel Drop жрёт батарею в простое — у кого так же?
21 ответов · 1534 просмотров
-
- Банк-клиент отвалился после прошивки LineageOS — Play Integrity снова закрутили гайки
16 ответов · 1328 просмотров
-
- Claude Code после compaction забывает решения по схеме БД и переделывает заново
8 ответов · 1294 просмотров
-
-
-
- Свалил с Unity на Godot 4.4 после истории с runtime fee — спустя полгода честно делюсь
17 ответов · 920 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость