Golang操作串口接收单片机数据
//project main.go
package main
import (
"fmt"
"github.com/tarm/goserial"
"io"
"time"
)
//全局Channel
func main() {
receiveMessage := make(chan string)
cfg := &serial.Config{Name: "/dev/cu.usbmodem142201", Baud: 9600, ReadTimeout: time.Microsecond * 900}
iorwc, err := serial.OpenPort(cfg)
if err != nil {
return
}
go receiveMessageGoroutines(receiveMessage)
go writeMessageGoroutines(iorwc)
go httpServer(iorwc)
tempString := ""
//保持数据持续接收
for {
buf := make([]byte, 1024)
lens, err := iorwc.Read(buf)
if err != nil {
if tempString != "" {
receiveMessage <- tempString
tempString = ""
}
//log.Println(err)
continue
}
revData := buf[:lens]
if lens > 0 {
tempString += fmt.Sprintf("%s", string(revData))
}
}
return
}
func receiveMessageGoroutines(message chan string) {
for {
select {
case data := <-message:
//fmt.Println("接收到消息")
fmt.Println(time.Now().String() + data)
}
}
}
//协程写入数据,每两秒写入一次
func writeMessageGoroutines(iorwc io.ReadWriteCloser) {
//for {
// data, err := GenerateMessage("这是一条消息")
// if err != nil {
// return
// }
// num, err := iorwc.Write(data)
// if err != nil {
// fmt.Println(err)
// return
// }
// fmt.Println("写入数据的量:" + string(num))
// time.Sleep(time.Second * 2)
//}
}