Go入門筆記45-在WSL2上測試串口編程


WSL2下默認不支持串口,可以用一個socat工具創建串口測試環境
一、創建串口對

socat -d -d pty,b115200 pty,b115200

image
發送數據

echo "test string" > /dev/pts/1

image

顯示數據

cat < /dev/pts/2

image

二、建立串口對與網絡之間的數據流

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數據
image

三、刪除所有串口對
/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收到數據
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM