Electron 使用虛擬串口進行調(diào)試
? 一、目標:創(chuàng)建兩個虛擬串口并連接調(diào)試
例如創(chuàng)建
/dev/ttys000 <--> /dev/ttys001,一端由 Electron 打開,另一端用終端或串口工具發(fā)數(shù)據(jù)。
? 二、安裝并使用虛擬串口驅(qū)動工具
macOS 本身不支持虛擬串口對口(loopback)功能,需要使用 第三方工具 來模擬虛擬串口對。
推薦工具:socat
安裝 socat(如未安裝):
brew install socat
? 三、使用 socat 創(chuàng)建虛擬串口對
運行以下命令(新開終端窗口):
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
特點:它們互相連通,你從一端發(fā)出的數(shù)據(jù)會在另一端收到。
? 四、Electron 中使用 serialport 打開其中一個端口
const { SerialPort } = require('serialport')
const port = new SerialPort({
path: '/dev/ttys007', // 你根據(jù)上面輸出選擇一個
baudRate: 9600
})
port.on('open', () => {
console.log('Port open')
})
port.on('data', data => {
console.log('Received:', data.toString())
})
? 五、另一端用 screen 或終端發(fā)送測試數(shù)據(jù)
你可以在另一個終端中運行:
screen /dev/ttys008 9600
然后輸入文字,Electron 端就會收到!
你也可以反過來,Electron 寫
/dev/ttys008,screen讀/dev/ttys007。
? 六、注意事項
| 問題 | 解決方案 |
|---|---|
| Electron 無法打開串口 | 權(quán)限不足,請運行時加 sudo(或?qū)斍坝脩艏尤?tty 組) |
Resource busy |
確保你只在一個程序里打開每個端口 |
| 多次創(chuàng)建 socat | 每次執(zhí)行 socat 都會新建一對端口,使用前先關(guān)閉舊進程(或用 PID 殺掉) |
? 七、進階模擬方式
寫入虛擬串口進行測試
echo "Hello from virtual device" > /dev/ttys008