ESP8266/ESP32 STA模式连接AP设备陷入循环问题求助
问题分析与解决
核心问题
你的代码存在两个关键问题导致连接失败:
- 静态IP设置时机错误:你在STA未完成连接时就尝试设置IP,且若AP模式ESP的默认网段与你指定的
192.168.144.x不匹配,会直接导致IP分配冲突,无法完成连接握手。 - 无超时的等待逻辑:一旦连接卡住,代码会无限循环在
while里,无法退出也无法排查问题。
具体修正步骤
- 对齐AP与STA的网段:AP模式ESP默认网段是
192.168.4.x,若你要使用192.168.144.x,需先修改AP的静态IP网段。 - 调整静态IP配置时机:推荐在STA发起连接前就配置好静态IP,避免DHCP分配IP后再修改的冲突。
- 添加连接超时机制:防止代码无限卡死,同时便于排查超时原因。
修正后的代码
import network from time import sleep def config_wifi(): # 若AP模式ESP是默认配置,网段为192.168.4.x;若已修改AP网段,这里要对应调整 ip = '192.168.4.3' subnet = '255.255.255.0' gateway = '192.168.4.1' # 必须与AP模式ESP的IP完全一致 dns = '8.8.8.8' ssid = 'MicroPython-AP' password = '123456789' # 关闭本地AP模式(避免资源冲突) ap = network.WLAN(network.AP_IF) if ap.active(): ap.active(False) sleep(1) # 初始化STA模式 sta = network.WLAN(network.STA_IF) sta.active(True) # 先配置静态IP,再发起连接 sta.ifconfig((ip, subnet, gateway, dns)) # 清除之前的残留连接 sta.disconnect() sleep(1) # 连接目标AP sta.connect(ssid, password) # 带超时的连接等待逻辑 timeout = 12 # 设置12秒超时 while timeout > 0 and not sta.isconnected(): print(f"等待连接... 剩余时间: {timeout}s") sleep(1) timeout -= 1 if sta.isconnected(): current_ip = sta.ifconfig()[0] print(f"连接成功,IP: {current_ip}") return current_ip else: print("连接超时失败") print(f"当前STA状态码: {sta.status()}") return None def run(): config_wifi() run()
额外检查项
- AP模式ESP的配置验证:若要使用
192.168.144.x网段,需在AP模式的ESP上执行以下代码修改网段:ap = network.WLAN(network.AP_IF) ap.active(True) ap.config(ssid='MicroPython-AP', password='123456789') ap.ifconfig(('192.168.144.1', '255.255.255.0', '192.168.144.1', '8.8.8.8')) - 状态码1001的含义:该状态表示STA正在发起连接请求,但尚未完成IP握手或认证,因此
isconnected()会返回False。 - 密码有效性:MicroPython AP模式要求密码至少8位,你的密码符合要求无需修改。
内容的提问来源于stack exchange,提问作者Plub
相关产品推荐
相关产品推荐

