socat使用

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


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容