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

Windows 11下使用PySerial连接USB设备时无法找到正确端口

Windows 11下USB设备通信问题(PySerial不适用时的解决方案)

为什么PySerial无法直接使用?

PySerial是专门用于**串口设备(含USB转串口芯片的设备)**的通信库,你的设备未被识别为COM端口,说明它属于纯USB设备而非串口类设备,因此PySerial无法直接适配。

解决步骤

1. 先排查驱动问题

  • 打开设备管理器,查看是否有带黄色感叹号的设备(通常在「其他设备」或「通用串行总线控制器」分类下)。
  • 如果有,右键选择「更新驱动程序」,手动指定设备厂商提供的驱动文件。部分USB设备需要安装厂商驱动后才会被识别为COM端口(如CH340、PL2303等USB转串口芯片)。

2. 确认设备类型与替代库

如果驱动安装后仍未出现COM端口,说明是纯USB设备,需根据设备类别选择对应库:

情况A:自定义USB协议设备 → 使用pyusb

pyusb可以直接与USB设备底层通信,需要配合libusb后端:

  • 安装依赖:
    pip install pyusb
    
  • 下载libusb的Windows二进制文件,将其中的libusb-1.0.dll放到系统路径(如C:\Windows\System32)或项目目录中。
  • 示例代码(需替换设备的VID和PID,从USB Device Tree Viewer中获取):
    import usb.core
    import usb.util
    
    # 替换为你的设备VID和PID(十六进制)
    VENDOR_ID = 0xXXXX
    PRODUCT_ID = 0xXXXX
    
    # 查找设备
    dev = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
    if not dev:
        raise Exception("未找到目标USB设备")
    
    # 释放内核驱动(若设备被系统占用)
    if dev.is_kernel_driver_active(0):
        dev.detach_kernel_driver(0)
    
    # 激活设备配置
    dev.set_configuration()
    
    # 获取通信端点(需根据设备协议调整)
    cfg = dev.get_active_configuration()
    interface = cfg[(0, 0)]
    # 找到输出端点(发送数据到设备)
    out_ep = usb.util.find_descriptor(
        interface,
        custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT
    )
    # 找到输入端点(从设备读取数据)
    in_ep = usb.util.find_descriptor(
        interface,
        custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN
    )
    
    # 发送数据
    out_ep.write(b"your_command_here")
    # 读取数据(参数为端点地址和读取长度,需调整)
    received_data = dev.read(in_ep.bEndpointAddress, 64)
    print(received_data)
    

情况B:HID类设备 → 使用hidapi

如果设备属于人机接口设备(如键盘、鼠标类自定义设备),hidapi更易用:

  • 安装依赖:
    pip install hidapi
    
  • 示例代码(替换VID和PID):
    import hid
    
    # 替换为你的设备VID和PID
    VENDOR_ID = 0xXXXX
    PRODUCT_ID = 0xXXXX
    
    # 打开设备并通信
    with hid.Device(vid=VENDOR_ID, pid=PRODUCT_ID) as device:
        # 发送数据:第一个字节通常为报告ID(无报告ID则填0),后续为数据
        device.write([0x00] + list(b"your_command"))
        # 读取数据(参数为读取长度)
        received_data = device.read(64)
        print(received_data)
    

3. 关键信息获取

从USB Device Tree Viewer中提取设备的VID(厂商ID)和PID(产品ID),这是所有USB通信库识别设备的核心参数。同时需参考设备厂商提供的通信协议文档,确保发送/接收的数据格式符合设备要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:52:39