Pi Pico H搭配Wiznet以太网帽使用Adafruit MiniMQTT连接失败求助
问题描述
我在运行CircuitPython的Pi Pico H上使用Adafruit MiniMQTT库,按照Wiznet官方教程操作,通过以太网直连Wiznet帽,尝试连接Windows 10笔记本上的Mosquitto Broker。对示例代码做了以下修改:
- 将第22行的Broker IP改为Windows机器的IP;
- 取消第68、70行注释,注释第73行以禁用DHCP(已有用户反馈DHCP失效),同时删除第70行的多余空格。
运行后抛出错误:
Traceback (most recent call last): File "<stdin>", line 84, in <module> File "/lib/adafruit_minimqtt/adafruit_minimqtt.py", line 441, in connect File "/lib/adafruit_minimqtt/adafruit_minimqtt.py", line 266, in _get_connect_socket File "/lib/adafruit_wiznet5k/adafruit_wiznet5k_socket.py", line 246, in connect File "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", line 570, in socket_connect RuntimeError: Failed to establish connection.
已排查事项
- 运行代码前半部分(到第68行)后,笔记本与Pico能互ping成功,排除硬件连接问题;
- 确认Mosquitto Broker未限制本地访问,配置文件内容:
启动Broker时显示已在IPv4/IPv6的1883端口监听;listener 1883 allow_anonymous true - Windows笔记本已在防火墙开放TCP和UDP的1883端口。
可能的排查方向与解决方案
补全静态IP配置参数
禁用DHCP后,需确保给Pico配置完整的网络参数:同网段的静态IP、子网掩码、网关(直连场景下网关填笔记本IP)、DNS服务器。比如笔记本IP为192.168.1.100,子网掩码255.255.255.0,则Pico可设为192.168.1.101,网关设为192.168.1.100。强制Mosquitto监听所有网卡
即使配置了listener 1883,默认可能仅监听回环地址127.0.0.1,修改配置文件明确监听所有网卡:listener 1883 0.0.0.0 allow_anonymous true重启Mosquitto后,用
netstat -ano | findstr :1883确认是否存在0.0.0.0:1883的监听条目。检查MiniMQTT连接参数
确保代码中客户端ID唯一,端口号为默认的1883,可手动指定禁用SSL、优先IPv4连接:mqtt_client = MQTT( broker="你的Windows IP", port=1883, client_id="pico_mqtt_client_01", is_ssl=False, )验证MQTT通路可用性
在Windows上用MQTT客户端工具(如MQTTX)连接本地Broker,确认Broker正常工作;同时用该工具从Pico所在网段的其他设备连接,验证网络层面的MQTT通路是否畅通。核对库与CircuitPython版本兼容性
确认Adafruit MiniMQTT库、Wiznet5k库版本与当前CircuitPython版本匹配,避免版本不兼容导致的逻辑错误,可尝试更新到最新稳定版库文件。
内容的提问来源于stack exchange,提问作者Matt Tipuric

