golang操作串口数据并通过TCP发送时间:2022-09-22    作者:panda    访问:1538

打开串口、连接服务器、读取串口数据、发送数据

package main

import (
    "fmt"
    "net"
    "time"
    "encoding/hex"
    "github.com/tarm/goserial"
)
var tcpcon  = false//TCP连接状态
var cfg = &serial.Config{Name: "COM4", Baud: 4800, ReadTimeout: 3 /*毫秒*/}//默认打开COM4
var tcpconn, tcperr = net.Dial("tcp", "192.168.2.100:3303") //TCP服务器192.168.2.100:3303
var iorwc, err = serial.OpenPort(cfg)//打开串口
const MAXRWLEN = 7//串口数据长度
func main() {
    if tcperr == nil {
        tcpcon = true
        fmt.Println("成功连接到服务器")
    }else{
        fmt.Println("连接服务器失败")
    }
    fmt.Println("数据转发中,请勿关闭此窗口")
    var com = [6]string{"COM3","COM4","COM5","COM6","COM7","COM8",};
    fmt.Println("打开串口"+string(content))
    if err != nil {
        fmt.Println("打开串口"+string(content)+"失败")
        for i := 0; i < len(com); i++  {
            fmt.Println("尝试打开串口" + com[i])
            cfg = &serial.Config{Name: com[i], Baud: 4800, ReadTimeout: 3000 /*毫秒*/}
            iorwc, err = serial.OpenPort(cfg)
            if err == nil {
                fmt.Println("打开串口" + com[i] + "成功")
                i = 9
            } else {
                fmt.Println("打开串口" + com[i] + "失败")
            }
        }
    }
    for {
    defer iorwc.Close()
    buffer := make([]byte, MAXRWLEN)
    for true {
     num, err := iorwc.Read(buffer)
     if err != nil {
         fmt.Println("串口数据读取错误")
        iorwc.Close()//关闭串口
        iorwc, err = serial.OpenPort(cfg)//重新打开串口
        if err != nil{
            fmt.Println(err)
        }
     }
                num, err = iorwc.Read(buffer)
                if num > 0 {
                    data :=hex.EncodeToString(buffer)//数据读取
                    if tcpcon {
                        tcpconn.Write([]byte(data+"\n"))//TCP发送数据,通过"\n"防止数据粘连
                    }
                }
                }
    }
}


最新作品

机电设备控制app开发

物料编码及进出库管理系统开发

微信扫码自助物品租赁系统开发

微信答题系统开发

嵌入式程序OTA升级平台开发

重庆乐乐环保官网开发

电动葫芦产品_厂家直销_重庆沪工集团_网站开发

黑马婚纱摄影网站优化案例

重庆婚纱摄影_【婚纱照排名前十】_黑马婚纱摄影工作室_网站开发

推广产品