2024年最全Golang 串口通信_golang 串口通讯(1),2024年最新4面字节跳动拿到Offer

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

import (
“log”
“github.com/jacobsa/go-serial/serial”
)

func main() {
// 配置串口参数
options := serial.OpenOptions{
PortName: “/dev/ttyUSB0”,
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
}

// 打开串口
port, err := serial.Open(options)
if err != nil {
    log.Fatal(err)
}

// 关闭串口
defer port.Close()

}


在上述代码中,我们首先定义了一个`options`变量,用于存储串口的配置参数。然后,我们调用`serial.Open()`函数打开串口,并将返回的`port`变量存储为串口对象。如果打开串口失败,我们使用`log.Fatal()`函数输出错误信息并退出程序。最后,我们通过`defer`关键字在程序结束时关闭串口。


### 读取数据


打开串口后,我们就可以开始读取串口数据了。在Golang中,可以使用`port.Read()`函数从串口中读取数据。下面是一个读取串口数据的示例代码:



package main

import (
“log”
“github.com/jacobsa/go-serial/serial”
)

func main() {
// 配置串口参数
options := serial.OpenOptions{
PortName: “/dev/ttyUSB0”,
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
}

// 打开串口
port, err := serial.Open(options)
if err != nil {
    log.Fatal(err)
}

// 关闭串口
defer port.Close()

// 读取数据
buf := make([]byte, 128)
n, err := port.Read(buf)
if err != nil {
    log.Fatal(err)
}

// 输出读取到的数据
log.Printf("Read %d bytes: %v", n, buf[:n])

}


在上述代码中,我们首先定义了一个`buf`变量,用于存储读取到的数据。然后,我们调用`port.Read()`函数从串口中读取数据,并将读取到的数据存储到`buf`中。最后,我们使用`log.Printf()`函数输出读取到的数据。


### 写入数据


除了读取数据,我们还可以使用Golang向串口写入数据。在Golang中,可以使用`port.Write()`函数向串口写入数据。下面是一个向串口写入数据的示例代码:



package main

import (
“log”
“github.com/jacobsa/go-serial/serial”
)

func main() {
// 配置串口参数
options := serial.OpenOptions{
PortName: “/dev/ttyUSB0”,
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
}

// 打开串口
port, err := serial.Open(options)
if err != nil {
    log.Fatal(err)
}

// 关闭串口
defer port.Close()

// 写入数据
buf := []byte("Hello, Serial!")
n, err := port.Write(buf)
if err != nil {
    log.Fatal(err)
}

// 输出写入的字节数
log.Printf("Write %d bytes: %v", n, buf)

}


在上述代码中,我们首先定义了一个`buf`变量,用于存储要写入的数据。然后,我们调用`port.Write()`函数向串口写入数据,并将写入的字节数存储到`n`变量中。最后,我们使用`log.Printf()`函数输出写入的字节数和写入的数据。


### 错误处理


在进行串口通信时,可能会遇到各种错误,如串口打开失败、读写错误等。为了保证程序的稳定性和可靠性,我们需要对这些错误进行适当的处理。


在前面的示例代码中,我们使用了`log.Fatal()`函数来处理错误。该函数会输出错误信息并退出程序。除了`log.Fatal()`函数,我们还可以使用其他错误处理方式,如使用`log.Println()`函数输出错误信息而不退出程序,或使用`fmt.Errorf()`函数返回自定义的错误信息。


### 案例


#### 案例1:发送和接收数据


在这个案例中,我们将演示如何使用Golang进行串口通信来发送和接收数据。我们将通过串口向外部设备发送数据,并从外部设备接收响应。



package main

import (
“log”
“time”

"github.com/jacobsa/go-serial/serial"

)

func main() {
// 配置串口参数
options := serial.OpenOptions{
PortName: “/dev/ttyUSB0”,
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
}

// 打开串口
port, err := serial.Open(options)
if err != nil {
	log.Fatal(err)
}

// 关闭串口
defer port.Close()

// 发送数据
sendData := []byte("Hello, Serial!")
n, err := port.Write(sendData)
if err != nil {
	log.Fatal(err)
}
log.Printf("Sent %d bytes: %v", n, sendData)

// 接收数据
buf := make([]byte, 128)
n, err = port.Read(buf)
if err != nil {
	log.Fatal(err)
}
log.Printf("Received %d bytes: %v", n, buf[:n])

}


在上述代码中,我们首先通过`port.Write()`函数向串口发送数据。然后,我们使用`port.Read()`函数从串口接收响应数据。最后,我们使用`log.Printf()`函数分别输出发送和接收到的数据。


#### 案例2:设置串口超时时间


在某些场景下,我们可能需要设置串口的超时时间。如果在超时时间内没有接收到数据,我们可以选择继续等待或者中断操作。下面是一个设置串口超时时间的示例代码:



package main

import (
“log”
“time”

"github.com/jacobsa/go-serial/serial"

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

-zvkocmhB-1715399721365)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值