Golang Go语言操作串口
Golang Go语言操作串口
最近在用 go 语言操作串口,遇到个问题。 在串口初始化时需要传入一个 COM 口值,例如: cfg := &serial.Config{Name: “COM43”, Baud: 115200, ReadTimeout: 3 /毫秒/} 其中的 COM43 是我人工读取后敲进去的。 现在想让 go 程序自动获取电脑所有的 COM 口,选数值最大的那个作为目标口完成初始化,这个在 windows 和 linux 下分别怎么实现呀?
linux 的话,直接 cd 进 /dev 看有几个 tty ?
Win:
参考 .NET SerialPort
https://referencesource.microsoft.com/#System/sys/system/io/ports/SerialPort.cs,6e8f9abfa6f4bdef
读注册表
Linux:
列 /dev/目录,找所有文件名 tty 开头的,大概可能有 ttyS*,ttyGS*,ttyUSB*等。找到你需要的类型的文件,拿到 fd。
剩下的参考:
https://github.com/tarm/serial
编辑器自动加的链接有问题 应该包括逗号后面的文字
串口这种东西又不是啥高深概念,一搜就有,阁下看帖就想水有点无聊吧
linux 下 /dev/ttyS 多少或者 ttyUSB 多少,你只要关注一下就知道了( linux 开发板对吧,使用说明书会有的,没有的话去客服要一个,都会写明白的
我想问问楼主对应需要 ack 应答这些如何处理的,比如收到串口查询,应答结果给仪器,我用单纯的 if 有时候会卡住,时效性比较低!
ack 应答这些倒不用,go 语言的的串口目前接收的话只有个 read 方法。
linux 中,go 语言可以调用 shell 语句吗?
还有 USB HID 驱动呢
搭车问一下:Windows 里面 COMx 和 \.\COMx 是什么情况,同一个串口,前者需提权才能访问,后者不需提权
没玩过单片机?
file io api,不需要 shell,当然 也支持 shell.
https://stackoverflow.com/questions/34229486/how-to-execute-a-shell-built-in-command
多动手 google 全都有的。
你可以看看 gobot 的官网,有个 g 开头的 cli 你能扫描串口
在Go语言中操作串口,通常我们会使用第三方库来简化与硬件设备的通信。一个比较流行的选择是 github.com/tarm/serial
这个库,它提供了丰富的API来配置和控制串口通信。
首先,你需要在你的Go项目中引入这个库。可以使用 go get
命令来安装:
go get github.com/tarm/serial
安装完成后,你可以在你的Go代码中导入并使用这个库。以下是一个基本的示例,展示了如何打开串口、配置参数(如波特率、数据位、停止位等),以及读写数据:
package main
import (
"fmt"
"log"
"github.com/tarm/serial"
)
func main() {
c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 9600}
s, err := serial.OpenPort(c)
if err != nil {
log.Fatal(err)
}
defer s.Close()
// 写数据到串口
_, err = s.Write([]byte("Hello, Serial Port!"))
if err != nil {
log.Fatal(err)
}
// 从串口读取数据
buf := make([]byte, 1024)
n, err := s.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Read %d bytes: %s\n", n, string(buf[:n]))
}
这个示例代码展示了如何配置串口、发送数据以及接收数据。根据你的具体需求,你可能需要调整串口配置参数或处理数据的方式。