大数据

Go语言学习-串口通讯程序Serial

2020-09-10  本文已影响0人  阿巴砝特

一个简单的串口读写程序!

  1. 用到的库"github.com/tarm/serial",可通过如下命令获取。
go get -u "github.com/tarm/serial"
  1. 本程序实现了串口的双向通信。数据循环发送开启一个协程。数据无限循环接收保证了程序的持续运行。

  2. 目前有一个弊端。测试发现无法串口自动成帧。串口Read的数据可能会多包打印出来。尝试过在serial.Config配置里面加入ReadTimeout时间限制,也无法稳定的得到整帧buf。希望看到的朋友们能帮我解决这个问题。

  3. 代码如下:

package main

import (
    "github.com/tarm/serial"
    "log"
    "time"
)

func main() {

    //设置串口编号
    ser := &serial.Config{Name: "COM2", Baud: 9600}

    //打开串口
    conn, err := serial.OpenPort(ser)
    if err != nil {
        log.Fatal(err)
    }

    //启动一个协程循环发送
    go func() {
        for {
            revData := []byte("123456")
            _, err := conn.Write(revData)
            if err != nil {
                log.Println(err)
                continue
            }
            log.Printf("Tx:%X \n", revData)
            time.Sleep(time.Second)
        }
    }()

    //保持数据持续接收
    for {
        buf := make([]byte, 1024)
        lens, err := conn.Read(buf)
        if err != nil {
            log.Println(err)
            continue
        }
        revData := buf[:lens]
        log.Printf("Rx:%X \n", revData)
    }

}
上一篇 下一篇

猜你喜欢

热点阅读