GO串口通信——(star很多的库)实测可以下发数据给设备

问题描述

1. 在实际项目中,我们往往是通过网口直连设备与之通信,但是作者遇到了需要通过串口连接设备,然后与设备之间进行通信

2. 本文参考的库地址为tarm/serial,截止2024/7/25,有1.6k的star,比网上其他回答的库还是要多一些的,自认为更好用,如果读者有其他更好的库,欢迎指教

准备工作

1. 需要串口通信,自然需要知道与我们的电脑连接的设备,name和波特率,我只在设备上查到了波特率,电脑上也可以看到name(希望大家有更好的方法)

2. 在控制面板/设备管理器中,如果没看到端口,那么可以点击查看,然后选择“显示隐藏的设备”,即可看到端口,点进去找到名字,比如COM3

快速自测

1. 这里直接贴上github上官方的示例代码:

package main

import (
        "log"

        "github.com/tarm/serial"
)

func main() {
        c := &serial.Config{Name: "COM45", Baud: 115200} // 刚刚查到的2个值
        s, err := serial.OpenPort(c)
        if err != nil {
                log.Fatal(err)
        }
        
        n, err := s.Write([]byte("test")) 
        if err != nil {
                log.Fatal(err)
        }
        
        buf := make([]byte, 128)
        n, err = s.Read(buf)
        if err != nil {
                log.Fatal(err)
        }
        log.Printf("%q", buf[:n])
}

如果主机连接了串口线,但是串口线没连接设备,那么也是属于已连接,openPort可以成功,并且可以往串口中下发数据

2. 而如果你要下发给设备的是字符串数据,那么直接在此处类型转换一下即可,因为Write函数必须传入[]byte类型的数据:

data := "hello"
s.Write([]byte(data))

3. 当然了,也可以弄一个字符串切片,遍历切片,不断的将切片的数据下发给设备:

	datas := []string{
		"$GNRMC,130324,,,A*71\r\n",
		"$GNVTG,22.65,\r\n",}
	for _, data := range datas {
		n, err := s.Write([]byte(data))
		if err != nil {
			log.Fatal(err)
		}
		log.Printf("Wrote %d bytes", n)
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值