如何判断ESP32 MicroPython WiFi热点是否就绪以获取IP地址?
解决ESP32 MicroPython AP模式下
wlan.ifconfig()触发重启的问题 问题根源
你观察的结论完全正确:wlan.active(True)调用后,wlan.active()会立刻返回True,但这仅仅表示WiFi AP接口被启用,而非热点完成底层初始化、网络栈就绪。此时直接调用wlan.ifconfig()会因系统资源未准备好触发重启。
可靠的就绪检测方案
在ESP32的MicroPython 1.19.1实现中,AP模式下可以通过循环检测wlan.ifconfig()的返回值是否有效来判断热点是否就绪——AP完全启动后会自动分配默认IP(通常是192.168.4.1),在此之前ifconfig()可能返回无效值甚至触发异常,所以我们需要用安全的方式等待:
修改后的代码示例
from network import WLAN, AP_IF from config import AP_NAME, AP_PASS import time print('Starting in wifi access point mode...') wlan = WLAN(AP_IF) wlan.config(authmode=3, essid=AP_NAME, password=AP_PASS) wlan.active(True) # 循环等待AP就绪,直到获取到有效IP while True: try: ip_info = wlan.ifconfig() # 检查IP是否为非空有效地址(默认AP IP不是0.0.0.0) if ip_info[0] != '0.0.0.0': break except: # 捕获未就绪时的异常,避免触发重启 pass print('.') time.sleep(0.5) print(f'SSID: {AP_NAME}') print(f'Password: {AP_PASS}') print(f'IP Info: {wlan.ifconfig()}')
额外说明
wlan.isconnected()仅适用于Station模式(连接外部热点),AP模式下始终返回False,无需参考。wlan.status()在ESP32 MicroPython的AP模式下未实现,返回None是正常现象。- 上述代码通过
try-except包裹ifconfig()调用,避免未就绪时的异常导致重启,同时通过IP有效性判断替代不可靠的active()检查,比固定延迟更稳定。
内容的提问来源于stack exchange,提问作者Dave H.
相关产品推荐
相关产品推荐

