物理串口一分为二:com0com + hub4com 组合拳,让AI MCP工具接管串口调试

23 阅读5分钟

在进行硬件开发或设备调试时,经常会遇到一个棘手的问题:串口是被系统独占的资源。 一旦串口工具(如 WindTerm,Xshell,Putty等)连接了设备的物理串口,其他任何程序就无法再对它进行访问。

但在古法编程绝迹甚至这篇文章都是由AI完成的今天,我们往往需要将串口暴露给MCP工具,或者一些调用串口的SKILL,让 AI 能够直接读取设备日志和下发控制指令。如果我们把串口交给了 AI,自己就无法查看实时日志了,这怎么行?

解决方案: 使用 com0comhub4com 组合,将一个物理串口“一分为二”。这样,串口MCP 工具就可以同时连接、同时收发数据。

系统架构与数据流向

通过虚拟串口技术,我们可以构建如下的结构:

flowchart TD
    Dev[物理设备 COM7] <--> Hub{{"hub4com<br/>(Route: all:all)"}}

    subgraph Pair1 [虚拟串口对 A]
        COM9 <--> COM10
    end

    subgraph Pair2 [虚拟串口对 B]
        COM11 <--> COM12
    end

    Hub <--> COM9
    Hub <--> COM11

    COM10 <--> User[串口工具]
    COM12 <--> AI[MCP 服务]

    %% 注释说明
    linkStyle 0 stroke:#ff0000,stroke-width:2px,color:red;
    linkStyle 1 stroke:#00ff00,stroke-width:2px,color:green;
    linkStyle 2 stroke:#00ff00,stroke-width:2px,color:green;
  • 物理设备的数据 → COM7 → hub4com → 广播给 COM9 + COM11 → 你和 AI 都能看到日志。
  • 你发送的数据 → COM10 → COM9 → hub4com → 发给设备 (同时 AI 也能监听到你的操作)。
  • AI 发送的指令 → COM12 → COM11 → hub4com → 发给设备 (同时你也能监听到 AI 的操作)。

1. 下载与安装

我们需要用到两个核心工具:虚拟串口驱动 com0com 和串口数据分发工具 hub4com

1.1 安装 com0com

com0com 运行在内核层,负责在 Windows 中“凭空”捏造出成对的虚拟串口。

  • 下载地址: SourceForge com0com 3.0.0.0 (x86/x64 signed)

  • 安装步骤:

    1. 解压下载的 ZIP 文件。
    2. 运行 setupg.exe (图形界面) 即可完成安装。
    3. 安装后,设备管理器中会出现一些预设好的串口对。

1.2 配置 hub4com

hub4com 运行在应用层,负责在物理串口和多个虚拟串口之间搬运数据。

2. 创建虚拟串口对

我们需要创建两对虚拟串口,一对给人工用(COM9 <-> COM10),一对给 AI 用(COM11 <-> COM12)。

这里的串口号以实际情况为准

可以直接使用命令行工具来创建

# 创建第一对虚拟串口 (COM9 与 COM10 互通)
./setupc.exe install PortName=COM9 PortName=COM10

# 创建第二对虚拟串口 (COM11 与 COM12 互通)
./setupc.exe install PortName=COM11 PortName=COM12

也可以直接使用配置工具来创建

setupVCOM.png

验证是否创建成功:

  • 打开 PowerShell 运行以下命令,你应该能看到创建好的几个模拟串口:
Get-PnpDevice -PresentOnly | Where-Object { $_.Class -eq "Ports" }

VCOM_result.png

  • 也可以直接在设备管理器中查看

VCOM_result1.png

3. 配置与启动 hub4com

3.1 启动数据转发服务

通过命令直接启动虚拟串口,双击运行即可开启服务(假设物理串口配置为COM7,115200,8N1):

& './hub4com.exe' --baud=115200 --data=8 --parity=no --stop=1 --octs=off --route=all:all //./COM7 //./COM9 //./COM11

也可以让它在后台运行

Start-Process -FilePath "./hub4com.exe" -ArgumentList "--baud=115200 --data=8 --parity=no --stop=1 --octs=off --route=all:all //./COM7 //./COM9 //./COM11" -WindowStyle Hidden

停止服务的方法: 在PowerShell中执行 taskkill /F /IM hub4com.exe 即可杀掉转发进程,释放物理串口。


4. 接入与测试

  1. 常规调试接入: 打开串口工具,新建串口连接,目标选择 COM10,波特率设置为 115200(必须与 hub4com 启动参数一致)。
  2. MCP接入: 指定 COM12,波特率同样设置为 115200

ai1.png

terminal1.png

5. 使用的 MCP 工具

在将虚拟串口分配给 AI 使用时,我们推荐基于 Model Context Protocol 的桥接工具 putty-mcp

  • 原版开源项目: wgthomas/putty-mcp

    原版工具主要针对类 Unix 系统设计,在 Windows 环境下对串口的支持并不友好,直接连接可能会出现无法连接的问题。

  • 优化版: sypw233/putty-mcp

    为了解决上述问题,我 Fork 了原项目并修正了 Windows 下的串口连接机制。具体的代码修复细节(路径规范化等)可以直接查看 GitHub 仓库的提交记录。

6. 已知问题:回显字符重复现象

在实际使用中,如果连接的是带有**本地回显(Local Echo)**功能的可交互式终端设备,可能会观察到以下现象:

当你通过人工调试端(例如在 COM10 的 WindTerm 中)输入命令 ls 时,在分配给MCP的监听端(COM12)控制台上,字符可能会重复显示为 llss

原因分析: 这是由于 hub4com--route=all:all 全双工广播机制与设备本身的终端回显叠加造成的。你发送的字符 l 被 hub4com 广播到了 COM12,同时物理设备收到 l 后触发的回显又被 hub4com 转发了一次到 COM12,从而导致了视觉上的字符翻倍。

影响评估: 虽然人类用肉眼看 llss 会觉得排版错乱,但如果 COM12 是专门作为 MCP 串口交由 AI 调用的,此现象完全没有负面影响。AI 模型和 MCP 工具在解析串口数据流时,是直接发送整行数据,并且主要依赖命令执行完毕后的标准输出结果(stdout),这种在输入阶段由于广播机制产生的回显重复,并不会干扰 AI 抓取日志或下发控制指令的逻辑。