golang上封装下串口操作,使用github.com/jacobsa/go-serial/serial包,实现了打开串口,收发数据,以及关闭串口
- package myfun
-
- import (
- "errors"
- "io"
-
- "github.com/jacobsa/go-serial/serial"
- )
-
- var _port io.ReadWriteCloser = nil
- var _options = serial.OpenOptions{
- PortName: "",
- BaudRate: 19200,
- DataBits: 8,
- StopBits: 1,
- MinimumReadSize: 4,
- InterCharacterTimeout: 500,
- }
-
- func OpenPort(port_name string) error {
- if _port != nil {
- _port.Close()
- }
-
- var err error
- _options.PortName = port_name
- _port, err = serial.Open(_options)
- if err != nil {
- _port = nil
- }
- return err
- }
-
- func SendAndRecv(msg string) (string, error) {
- if _port == nil {
- return "", errors.New("请先打开串口")
- }
- bts := []byte(msg)
- _, err := _port.Write(bts)
- if err != nil {
- return "", err
- }
- buff := make([]byte, 128)
- n, err := _port.Read(buff)
- if err != nil {
- return "", err
- }
- return string(buff[:n]), nil
- }
-
- func SendAndRecv_bts(msg []byte) ([]byte, error) {
- if _port == nil {
- return nil, errors.New("请先打开串口")
- }
- _, err := _port.Write(msg)
- if err != nil {
- return nil, err
- }
- buff := make([]byte, 128)
- _, err = _port.Read(buff)
- if err != nil {
- return nil, err
- }
- return buff, nil
- }
- func ClosePort() error {
- if _port != nil {
- return _port.Close()
- }
- return nil
- }
复制代码
|