You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:如何用Golang读取树莓派串口GPS设备

嘿,我来帮你实现用Golang读取树莓派上GPS串口数据的功能!你已经能用Shell命令拿到规范的NMEA输出了,用Go来实现其实很直观。

使用Golang读取树莓派GPS串口数据

首先,你需要用到Go生态里最常用的串口操作库github.com/tarm/serial,先通过下面的命令安装它:

go get github.com/tarm/serial

完整代码示例

下面的代码完全对应你Shell命令里的串口配置(/dev/ttyAMA0、9600波特率、raw模式、8位数据位等),可以直接运行读取GPS输出:

package main

import (
	"bufio"
	"fmt"
	"log"

	"github.com/tarm/serial"
)

func main() {
	// 配置串口参数,和你Shell命令里的stty设置一一对应
	serialConfig := &serial.Config{
		Name:        "/dev/ttyAMA0",
		Baud:        9600,
		Size:        8,        // 对应cs8(8位数据位)
		Parity:      serial.ParityNone, // 无校验位
		StopBits:    serial.Stop1,      // 对应-cstopb(1位停止位)
		ReadTimeout: 0,        // 持续读取,不设置超时
	}

	// 打开串口连接
	port, err := serial.OpenPort(serialConfig)
	if err != nil {
		log.Fatalf("打开串口失败: %v", err)
	}
	defer port.Close() // 程序退出前自动关闭串口

	// 用bufio.Scanner逐行读取NMEA数据(GPS输出是每行一条标准NMEA语句)
	scanner := bufio.NewScanner(port)
	for scanner.Scan() {
		nmeaLine := scanner.Text()
		fmt.Println(nmeaLine)
		// 这里可以添加你自己的业务逻辑,比如解析NMEA语句里的经纬度、时间等信息
	}

	// 检查读取过程中是否出现错误
	if err := scanner.Err(); err != nil {
		log.Fatalf("读取串口数据出错: %v", err)
	}
}

关键参数说明

  • Name: "/dev/ttyAMA0":指定GPS设备连接的串口路径,和你Shell命令里的目标设备一致
  • Baud: 9600:串口波特率,匹配GPS模块的默认输出速率
  • Size: 8:对应stty命令里的cs8,表示8位数据位
  • StopBits: serial.Stop1:对应stty命令里的-cstopb,表示使用1位停止位(清除2位停止位的设置)
  • ReadTimeout: 0:设置为0表示持续监听串口数据,不会因为超时停止读取,适合GPS这种持续输出的设备

额外实用提示

  1. 权限问题处理:如果运行时提示无法访问/dev/ttyAMA0,可以把当前用户加入dialout组获取串口访问权限:
sudo usermod -aG dialout $USER

修改后重新登录系统即可生效。

  1. NMEA数据解析:如果需要把原始的NMEA字符串转换成结构化的经纬度、时间等数据,可以使用专门的解析库github.com/adrianmo/go-nmea,示例代码如下:
import "github.com/adrianmo/go-nmea"

// 在读取到nmeaLine之后添加解析逻辑
msg, err := nmea.Parse(nmeaLine)
if err != nil {
	log.Printf("解析NMEA语句失败: %v", err)
	return
}
// 解析$GNRMC语句示例
if rmcMsg, ok := msg.(nmea.RMC); ok {
	fmt.Printf("当前纬度: %v, 经度: %v, 时间: %v\n", rmcMsg.Latitude, rmcMsg.Longitude, rmcMsg.Time)
}

内容的提问来源于stack exchange,提问作者joedborg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:18