WSL2下默认不支持串口,可以用一个socat工具创建串口测试环境 一、创建串口对
socat -d -d pty,b115200 pty,b115200
发送数据
echo "test string" > /dev/pts/1
显示数据
cat < /dev/pts/2
二、建立串口对与网络之间的数据流
sudo socat -d -d /dev/pts/2,raw,nonblock,ignoreeof,cr,echo=0 tcp-listen:5555,reuseaddr
开启一个tcpclient工具连接5555端口,再次执行echo "test string" > /dev/pts/1 可以在tcpclient工具上看到test string数据
三、删除所有串口对
/dev/pts# ls
列出socat所有串口
fuser -k /dev/pts/xx
此处xx替换要删除的串口名称
1> tty(终端设备的统称): tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。
2> pty(虚拟终端): 但是如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)
3> pts/ptmx(pts/ptmx结合使用,进而实现pty): pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。 四、Go代码
package datahandle
import (
"fmt"
"log"
"time"
serial "github.com/tarm/goserial"
)
func TestCom() {
//设置串口编号
c := &serial.Config{Name: "/dev/pts/1", Baud: 115200}
//打开串口
s, err := serial.OpenPort(c)
if err != nil {
log.Fatal(err)
}
// 写入字符串“012345”
n, err := s.Write([]byte("012345"))
if err != nil {
log.Fatal(err)
}
//延时100
time.Sleep(100)
buf := make([]byte, 128)
n, err = s.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Read %d Bytes\r\n", n)
for i := 0; i < n; i++ {
fmt.Printf("buf[%d]=%c\r\n", i, buf[i])
}
}
五、启动测试,TcpClient收到数据