本文记录如何用 python 接收串口 gps 数据并解析。
需求
- GPS 北天 PL2303G Chip
- 驱动安装完成,后需要用 Python 连接获取串口 GPS 信号数据
设备准备
接入设备
将 GPS 模块插入 USB 等接口中,并正确配置驱动程序
获取设备信息
在 Ubuntu 中,插入 USB 的设备会出现在 /dev/tty*
中,首先需要确认该 GPS 设备的设备名称
可以使用几种不同的方法来确定接入的GPS模块是哪个设备:
列出所有串口: 使用lsusb
命令可以列出所有连接到电脑的USB设备,但可能不会直接显示GPS模块的详细信息。如果您知道GPS模块是通过USB连接的,这个命令可以作为一个起点。
bash
复制
1 | lsusb |
---|
使用**dmesg
**: dmesg
命令可以显示内核相关的日志信息,包括新插入的USB设备。当您插入GPS模块时,运行这个命令可以帮助您找到设备的信息。
bash
复制
1 | dmesg | grep tty |
---|
使用**usb-devices
**: usb-devices
命令可以提供关于USB设备的详细信息,包括设备的名字、制造商、型号和串行号。
bash
复制
1 | usb-devices |
---|
查看**/dev
**目录: 在Linux系统中,串口设备通常位于/dev
目录下。您可以列出这个目录下的文件,看看是否有新出现的串口设备。
bash
复制
1 | ls -l /dev/tty* |
---|
经过一番确认,我的 gps 设备是 /dev/ttyUSB0
开放设备权限
访问设备有时需要较高的权限,为了方便 python 读取,这里做一些权限开放:
1 | chmod 666 /dev/ttyUSB0 |
---|
Python 实现
安装库:
12 | pip install serialpip install pynmea2 |
---|
源码:
123456789101112131415161718192021222324252627282930313233 | import serialimport pynmea2# 配置串口参数ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) # 请根据您的设备修改串口路径和波特率# 检查串口是否已打开if not ser.is_open: ser.open()try: while True: # 读取串口数据 line = ser.readline().decode('utf-8') if line.startswith('$GPGGA'): # 解析NMEA 0183数据 msg = pynmea2.parse(line) # 提取经纬度 lat = msg.latitude lon = msg.longitude # 打印解析后的数据 print(f"经度:{lon}, 纬度:{lat}")except KeyboardInterrupt: # 按Ctrl C时退出程序 print("程序已中断")finally: # 关闭串口 ser.close() |
---|
msg.latitude 和 msg.longitude 已经包含度分秒信息。
参考资料
- https://blog.csdn.net/dz221100/article/details/125447518
文章链接: https://cloud.tencent.com/developer/article/2418522