ESP32 S3连接WiFi AP失败:无法获取IP/DNS且四次握手超时
ESP32 S3 WiFi连接4WAY_HANDSHAKE_TIMEOUT(原因码15)问题排查方案
问题现象
ESP32 S3尝试连接SSID为TheScientist的WiFi AP时,触发四次握手超时,无法获取IP与DNS,串口输出如下:
Connecting to TheScientist [ 1064][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 0 - WIFI_READY [ 1098][V][WiFiGeneric.cpp:338] _arduino_event_cb(): STA Started [ 1099][V][WiFiGeneric.cpp:97] set_esp_interface_ip(): Configuring Station static IP: 0.0.0.0, MASK: 0.0.0.0, GW: 0.0.0.0 [ 1099][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 2 - STA_START .......[ 4750][V][WiFiGeneric.cpp:360] _arduino_event_cb(): STA Disconnected: SSID: TheScientist, BSSID: 3c:cd:5d:a7:f1:13, Reason: 15 [ 4750][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED [ 4758][W][WiFiGeneric.cpp:950] _eventCallback(): Reason: 15 - 4WAY_HANDSHAKE_TIMEOUT
排查与解决步骤
- 验证加密模式与密码一致性:原因码15最常见诱因是密码错误或加密模式不匹配。确认AP的加密类型(如WPA2-PSK/WPA3)与代码中
WiFi.begin()指定参数一致,同时检查密码的大小写、特殊字符是否完全正确。 - 切换WiFi信道:部分信道(如国内12/13信道)可能存在设备兼容性问题,将AP信道调整为1-11区间内的常用信道(如6、11),减少信号干扰。
- 降低ESP32发射功率:过高的发射功率可能导致握手阶段信号异常,在
WiFi.begin()前添加代码:WiFi.setTxPower(WIFI_POWER_11dBm);(可选值参考ESP32官方文档)。 - 检查AP MAC过滤设置:若AP开启MAC地址白名单,需将ESP32的MAC地址添加至允许列表,否则会被拒绝握手。
- 清除WiFi缓存:ESP32可能留存旧的WiFi配置,在连接前执行
WiFi.disconnect(true);清除缓存,再重新发起连接。 - 排查AP负载与状态:AP连接设备过多或带宽占用过高时,会导致握手超时。尝试重启AP,或暂时减少连接的设备数量。
- 更新Arduino-ESP32库:旧版本库可能存在WiFi握手兼容性bug,更新到最新稳定版的Arduino-ESP32核心库。
内容的提问来源于stack exchange,提问作者Miguel Tomás
相关产品推荐
相关产品推荐

