新闻详情

新闻详情

首页 / 资讯中心 / 详情

SerialHub:把串口变成 WebSocket 字节管道,浏览器和脚本直接读写(开源工具 SerialHub 实战)

发布时间:2026/9/16 7:25:08来源:尧图网络
SerialHub:把串口变成 WebSocket 字节管道,浏览器和脚本直接读写(开源工具 SerialHub 实战)
一、这些场景你大概率遇到过写嵌入式固件的朋友这三件事应该没少折腾串口被一个程序独占。串口助手开着收数据上位机脚本就打不开同一个 COM 口想两边同时看只能开一对虚拟串口或者来回关开关开。设备热拔插就要全部重连。USB 线一碰、设备重新枚举所有程序集体断线。更坑的是有的工具断线后窗口还开着、数据早不来了你盯着空屏排查十分钟其实是旧句柄在设备抖动后已经失效了。想在浏览器或脚本里摸串口。无头浏览器拿不到 Web Serial 授权网页上位机连不上设备自动化测试想用脚本假装一台设备跟被测系统对发字节也缺一条顺手的管道。SerialHub 就是为这些场景做的Apache-2.0 开源、完全免费Rust 写的跨平台单文件管理台网页直接内嵌在二进制里下载解压就能用。它把串口变成一条 WebSocket 字节管道浏览器和脚本直接读写原始字节所有数据全程留在本机。二、它是什么一句话每块串口对应一座桥桥的另一头是一个 WebSocket 数据网址所有桥由一个固定的网页管理台统一管理。COM1 ══ 桥1 ══ ws://127.0.0.1:8101/ws ══ 网页上位机自带协议栈 COM3 ══ 桥2 ══ ws://127.0.0.1:8102/ws ══ Python 测试脚本 │ 管理台 http://127.0.0.1:8080 建桥 / 启停 / 改配 / 删除 / 速率统计重启自动恢复数据端口由程序自动分配默认从 8101 起桥的生命周期内不变。两个网址记住一句话就够管理台网址管程序数据网址管字节程序接入永远连数据网址。动手做这个工具之前我把现成方案用了一圈有的在桥里做 Modbus、对外只吐 JSON有的用 JSONbase64 包帧页面侧协议栈得推倒重来有的明确单客户端、没有广播还有的停更好几年了。SerialHub 的取舍是反过来的桥里不做任何协议语义只搬运字节。为什么这么选第五部分细说。三、快速上手从 GitHub Releases 下载对应平台的压缩包解压就是全部Windows x86_64 的 zip 只有约 1.6 MB不用装运行时、不用注册账号双击就能跑。想从源码编译仓库里cargo install --path .一条命令的事。命令行三步旧单桥参数 自动建一座桥并启动命令与注释原样来自 README# 列出本机串口serialhub --list-ports# 一行起桥: 串口 COM1, 115200, 8N2; 管理台地址 127.0.0.1:8080serialhub--portCOM1--baud115200--config8N2--addr127.0.0.1:8080# 浏览器打开 http://127.0.0.1:8080 —— 管理台即用# 程序接入: ws://127.0.0.1:8081/ws (本桥数据端点, 纯二进制; 裸地址 ws://127.0.0.1:8081 亦可)它有两种形态桌面客户端Windows 双击serialhub.exe就是原生窗口 系统托盘关窗退到后台桥继续收发纯命令行脚本和 CI 场景加--headless无窗口无托盘serialhub--headless--portCOM1# 纯命令行模式 (脚本/CI)串口参数是全覆盖的波特率 110~2,000,000数据位 7/8校验 N/E/O停止位 1/2流控 none/rtscts/xonxoff。CLI 和管理台完全对等界面上每个配置项在命令行都有对应物管理台里还能一键复制与当前配置等价的启动命令。四、多桥管理台所有桥一个网页管完多桥并存每行一座桥状态徽章运行中 / 连接中 / 重连中 / 已停止、连接数、运行时长、最近错误一眼看完可视化每桥一张流程图串口 ⇄ 桥 ⇄ 数据网址有数据流动线路就点亮RX/TX 速率火花线和累计字节数每秒刷新新建桥零门槛选串口、设波特率就能跑数据端口自动预填下一个空闲端口表单记住上次的串口和波特率连建多座桥很快只读旁看点桥名打开抽屉「串口数据」页签只读查看串口原始流ASCII / HEX 随时切换最多保留 5000 行重启自动恢复所有桥的配置持久化在 fleet.json 里程序重启自动恢复全部桥不用每天早上重新建一遍自动重连可开关每座桥独立控制默认开运行中改开关即时生效主题插件内置浅色 / 深色 / 示例·奥利奥 / Windows 95 四套主题exe 旁 themes/ 文件夹放一个 .css 就是一套新主题切换不刷新页面托盘常驻图标颜色跟着桥状态变绿运行中 / 琥珀重连中 / 灰已停止。命令行形态也有截图可看五、关键实现思路讲三个设计决策素材来自仓库里的架构决策记录ADR想看原文的去仓库翻 decisions.md。1. 数据面只做管道纯原始二进制帧串口桥最容易做偏的地方是顺手帮你解析协议。我调研时见过的反例就是 JSONbase64 包帧、桥内做 Modbus桥一旦做语义页面侧协议栈就得跟着它的帧格式重写接入那天就是推翻自家代码的一天。SerialHub 把定位钉死在管道/ws数据通道只传原始二进制帧双向组帧、解析、校验全部留给页面和脚本自己的协议栈。配置与状态走/api/*JSON控制面与数据面彻底分离管理台页面挂了也不影响字节流动。这个设计换来两条使用前必须心里有数的规则手册「程序接入」章原文要点WebSocket 消息边界 ≠ 串口帧边界设备一次 write 可能被拆成多条消息到达多次 write 也可能合并成一条请按自己的协议组帧别依赖消息边界慢客户端丢旧帧下行缓冲 1024 条消费跟不上时丢最旧帧保连接不反压、不踢人。高波特率加慢消费端的组合请确保消费端跟得上。2. 多客户端下行广播上行 FIFO 单写者串口本质是单用户设备多个客户端同时写就是灾难。SerialHub 的仲裁很朴素下行串口 → 客户端用广播通道收到的字节推给所有客户端测试脚本和网页可以同时围观同一条设备流上行客户端 → 串口单写者所有客户端的帧进一个 mpsc 队列由唯一写者按 FIFO 顺序写入串口先到先发文档明示不做客户端优先级。对比有的实现让每个会话各自轮询同一端口、互相抢字节这条路至少保证了三件事不抢字节、不乱序、不 panic。3. 自动重连独立监督任务重试全程可见这个功能来自真实的教训CH340 抖动一次旧串口句柄可能永久失效桥活着却不转发是极难排查的静默故障。所以 SerialHub 没有把重开写成 try-catch 兜底而是做成一等公民一个独立于数据面的监督任务按 1 秒节奏重试永不阻塞数据转发状态机Closed → Opening → Open → Retry全程在状态接口可见管理台明示「串口已断开正在自动重连 (第 n 次)…」第几次都数给你看。对你的脚本来说什么都没发生期间 WebSocket 连接保持着设备插回来数秒内恢复数据自动续传客户端零动作。每座桥也可以独立关掉这个开关关了掉线就直接转「已停止」。顺带一组仓库更新日志里记录的自测基线v1.0.0仅供参考双向吞吐 7.3 / 10.4 Mbps串口收到字节到 WebSocket 客户端收到的延迟 p95 约 0.61 ms。工程侧仓库里有 83 条 Rust 单元测试和 63 条跑在 COM1↔COM2 虚拟串口对上的集成测试回归是有保障的。六、客户端接入示例Python摘自 examples/python-client.py先pip install websocketsDATA_URLws://127.0.0.1:8090/ws# 改成你的桥数据网址asyncdefmain():asyncwithwebsockets.connect(DATA_URL)asws:asyncdefrx():# 下行: 串口收到的原始字节, 打 HEXasyncfordatainws:print(收,data.hex( ))asyncdeftx():# 上行: 每秒一行 ping (UTF-8 原始字节)whileTrue:awaitasyncio.sleep(1)awaitws.send(bping\n)awaitasyncio.gather(rx(),tx())浏览器摘自 examples/web-client.html零依赖单文件双击即用wsnewWebSocket($(url).value);// 数据端点: ws://桥网址/wsws.binaryTypearraybuffer;// 铁律 1: 拿到的就是原始字节ws.onmessageelog(收,newUint8Array(e.data));// 铁律 2: 只展示, 不组帧发送侧ws.send(newTextEncoder().encode(s));// 二进制帧 → 桥串行写入串口两个示例都在仓库 examples/ 目录拿来改改就能用。注意管理台端口 ≠ 数据端口真实数据网址以桥卡片或启动输出为准。七、限制与诚实声明无 TLS、无鉴权v1.x 现状任何连得上管理台或数据网址的人都能读写字节、改配置。只在本机或可信内网使用勿暴露公网需要远程访问请自己套 SSH 隧道。macOS 安装包未签名首次打开若被系统拦下右键点文件选「打开」再点一次「打开」即可放行。Linux/macOS 桌面形态需要 webkit2gtk / WKWebView 运行库服务器脚本场景直接用--headless纯命令行。Windows 发布版没有控制台黑窗双击即用代价是--headless模式 stdout 不回显到终端——脚本判活请轮询/api/status。它不是串口终端仿真器不做 VT100/xterm 终端管理台「串口数据」只能看不能发发数据是客户端程序网页/脚本的职责。八、链接官网下载 三步上手https://misakamikoto128.github.io/serialhub/GitHub 仓库源码 Releases 手册https://github.com/MisakaMikoto128/serialhubSerialHub 按 Apache-2.0 完全开源没有付费墙也没有功能锁定。如果你也被一个串口全家排队折磨过下载试一试顺手去仓库点个 Star就是对它最好的支持用得不顺手欢迎直接提 issue。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

LDA主题模型实战:从原理到Python实现与调参 2026/9/16 8:01:11

LDA主题模型实战:从原理到Python实现与调参

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Windows PowerShell 2026/9/16 8:01:11

Windows PowerShell

“Win R” 输入 “PowerShell” 打开的窗口只能单标签,需要多页面同时查看必须打开多个窗口。Microsoft Store 中安装 “Windows Terminal”,启动后会以 PowerShell 为默认配置文件打开标签页,能实现多标签页和分屏窗格功能。多标签页&#…

阅读更多 →
LNMP环境下Nginx与PHP-FPM协作原理及动静分离配置实战 2026/9/16 8:01:11

LNMP环境下Nginx与PHP-FPM协作原理及动静分离配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
基于STM32构建城市路灯节能控制系统 2026/9/16 8:01:11

基于STM32构建城市路灯节能控制系统

城市路灯节能控制系统 绪论系统方案设计 系统总体架构系统功能主要模块选型 硬件设计 主控与电源传感器接口路灯驱动系统接线总表 软件设计 主程序流程调光策略太阳能追光平台运维 系统实现与测试 测试场景测试结果 总结 城市路灯节能控制系统 绪论 城市道路照明在传统定时控…

阅读更多 →
跨国调研的样本质量怎么控?2026六家全球样本服务质控对比 2026/9/16 8:01:11

跨国调研的样本质量怎么控?2026六家全球样本服务质控对比

测评说明:本文为调研从业者实测记录,记录问卷星样本服务、问卷网样本服务、51 调查、云调查、集思网等2026年六家线上样本渠道公开质控相关功能参数,面向跨国调研场景,记录各渠道可支持能力。仅陈述客观功能与规则,不作…

阅读更多 →
Python模块基础与高级应用指南 2026/9/16 7:58:10

Python模块基础与高级应用指南

1. Python模块基础概念Python模块是Python程序组织的基本单元,它允许你将相关的代码组织到一个文件中,以便在其他程序或模块中重复使用。模块可以包含函数、类、变量以及可执行的代码。理解模块的工作原理是掌握Python编程的重要一步。模块的主要作用包括…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞