- 引入 go-serial 库
go get github.com/jacobsa/go-serial/serial
- 编写串口读取函数
func readFromPort(port io.ReadWriteCloser) {
buf := make([]byte, 1024)
for {
n, err := port.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Print(string(buf[:n]))
}
}
- 打开串口
port, err := serial.Open(serial.OpenOptions{
PortName: "COM1",
BaudRate: 115200,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
})
if err != nil {
log.Fatal(err)
}
defer port.Close()
- 向串口写入数据
_, err = port.Write([]byte("hello"))
if err != nil {
log.Fatal(err)
}
完整代码:
package main
import (
"fmt"
"io"
"log"
"github.com/jacobsa/go-serial/serial"
)
func readFromPort(port io.ReadWriteCloser) {
buf := make([]byte, 1024)
for {
n, err := port.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Print(string(buf[:n]))
}
}
func main() {
// 打开串口
port, err := serial.Open(serial.OpenOptions{
PortName: "COM1",
BaudRate: 115200,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
})
if err != nil {
log.Fatal(err)
}
defer port.Close()
// 开启读取协程
go readFromPort(port)
// 写入数据到串口
_, err = port.Write([]byte("hello"))
if err != nil {
log.Fatal(err)
}
// 等待
select {}
}