You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CircuitPython的Pico W socketpool简易服务器无法连接求助

问题诊断与修复方案

核心错误点

1. 绑定地址不匹配

代码里服务器绑定的是AP模式IP(wifi.radio.ipv4_address_ap),但你是通过wifi.radio.connect()将Pico W作为客户端接入现有WiFi(Station模式),此时应该绑定Station模式的真实局域网IP,也就是wifi.radio.ipv4_address。AP模式是Pico自身作为热点时的地址,和当前接入路由器的场景完全不匹配,导致外部设备无法找到服务器监听的地址。

2. 函数调用拼写错误

你调用的simple_http_srever()少了一个字母e,正确的函数名是simple_http_server()——虽然你说控制台有输出,可能实际运行时临时修正了,但这个错误会直接导致函数无法执行,必须确认。

3. Socket发送数据格式错误

CircuitPython的socket.send()要求传入字节类型数据,你直接传字符串会导致发送失败或客户端无法解析响应。

修复后的完整代码

import wifi
import socketpool

wifi.radio.connect("你的WiFi名称", "你的WiFi密码")
print(f"已连接WiFi,IP地址: {wifi.radio.ipv4_address}")

pool = socketpool.SocketPool(wifi.radio)

def simple_http_server():
    server_socket = pool.socket()
    # 开启端口复用,避免重启时端口占用问题
    server_socket.setsockopt(pool.SOL_SOCKET, pool.SO_REUSEADDR, 1)
    # 绑定到当前设备的局域网IP和80端口
    server_socket.bind((str(wifi.radio.ipv4_address), 80))
    server_socket.listen(1)

    print(f"服务器监听地址: {wifi.radio.ipv4_address}:80")

    while True:
        print("等待连接...")
        client_socket, client_address = server_socket.accept()
        print(f"接受来自 {client_address} 的连接")

        # 将字符串转为字节类型发送
        response_header = b"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"
        response_body = b"<html><body><h1>Hello, World!</h1></body></html>\r\n"
        client_socket.send(response_header)
        client_socket.send(response_body)
        client_socket.close()

# 正确调用服务函数
simple_http_server()

额外排查步骤

  • 验证IP可达性:用同一网络的设备ping控制台输出的IP,如果ping不通,检查路由器是否开启了设备隔离,或者Pico的WiFi连接是否真的稳定。
  • 更换端口测试:如果80端口被路由器限制,换成8080这类非标准端口尝试。
  • 刷新固件:如果之前能运行现在失效,重新刷入最新版CircuitPython固件,避免版本bug。
  • 检查客户端防火墙:确认访问设备的防火墙没有阻止对目标端口的请求。

内容的提问来源于stack exchange,提问作者Fondues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:23:17