Electron 使用虚拟串口进行调试
✅ 一、目标:创建两个虚拟串口并连接调试
例如创建
/dev/ttys000 <--> /dev/ttys001
,一端由 Electron 打开,另一端用终端或串口工具发数据。
✅ 二、安装并使用虚拟串口驱动工具
macOS 本身不支持虚拟串口对口(loopback)功能,需要使用 第三方工具 来模拟虚拟串口对。
推荐工具:socat
安装 socat(如未安装):
brew install socat
✅ 三、使用 socat 创建虚拟串口对
运行以下命令(新开终端窗口):
socat -d -d pty,raw,echo=0 pty,raw,echo=0
输出示例:
2025/07/08 11:36:00 socat[12345] N PTY is /dev/ttys007
2025/07/08 11:36:00 socat[12345] N PTY is /dev/ttys008
2025/07/08 11:36:00 socat[12345] N starting data transfer loop
/dev/ttys007
/dev/ttys008
特点:它们互相连通,你从一端发出的数据会在另一端收到。
✅ 四、Electron 中使用 serialport
打开其中一个端口
const { SerialPort } = require('serialport')
const port = new SerialPort({
path: '/dev/ttys007', // 你根据上面输出选择一个
baudRate: 9600
})
port.on('open', () => {
console.log('Port open')
})
port.on('data', data => {
console.log('Received:', data.toString())
})
✅ 五、另一端用 screen
或终端发送测试数据
你可以在另一个终端中运行:
screen /dev/ttys008 9600
然后输入文字,Electron 端就会收到!
你也可以反过来,Electron 写
/dev/ttys008
,screen
读/dev/ttys007
。
✅ 六、注意事项
问题 | 解决方案 |
---|---|
Electron 无法打开串口 | 权限不足,请运行时加 sudo (或将当前用户加入 tty 组) |
Resource busy |
确保你只在一个程序里打开每个端口 |
多次创建 socat | 每次执行 socat 都会新建一对端口,使用前先关闭旧进程(或用 PID 杀掉) |
✅ 七、进阶模拟方式
写入虚拟串口进行测试
echo "Hello from virtual device" > /dev/ttys008