我在 Ubuntu 22.10 上使用 gpsd 3.22
我有一个全球卫星 BU-353-S4USB GPS 接收器设备识别为
Bus 001 Device 008: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port / Mobile Action MA-8910P
它被列举为/dev/ttyUSB0
系统正确检测插入和拔出 - 我可以插入设备并ls /dev/tty*
显示 ttyUSB0,。当我拔出它时,ttyUSB0 消失了。
如果在系统关闭的情况下启动系统并插入 GPS 设备,则它可以正常工作。cgps 会在一两分钟内获得锁定。
但是,如果在系统运行时拔下并重新插入 GPS 设备,或者在 GPS 设备仍处于插入状态并通电的情况下重新启动系统,则永远不会获得锁定。cgps 在底部显示 nmea 语句,并显示 10 颗或更多卫星。在这些卫星中,可能有一个在“使用”列中以“Y”列出。其余所有卫星的 SNR 均为 0 并且未使用。我已经等了 20 分钟,但它从未获得锁定。
拔下 GPS 并重新启动计算机后,我几乎可以立即获得 GPS 锁。
在gpsd 手册页,其中提到了“热插拔脚本”,但没有示例或关于它们需要做什么或如何使用的详细信息。它们已经存在了吗,还是我需要编写它们?也许这就是让 gpsd 在没有冷启动的情况下再次运行所需要的?
有人能给我指明正确的方向吗?我有一个 GPS 接收器,我想随时插入后与 gpsd 配合使用。
答案1
下面是一些我已经测试过的代码,它们确实可以在 Ubuntu 18.04 下使用 Globalsat BU-353N5(或 S4)USB GPS 设备运行,使用的是 python 3.6
在运行 Python 代码之前,在 Linux 上运行 lsusb 以确认它能够看到 GPS 装置。我刚将它插入 PC,它就开始工作了。我把 USB 接收器放在窗台上,它似乎工作正常。
我的澳大利亚 GPS 输出似乎输出 GNGGA,我见过美国列出的 GPGGA 输出,您需要根据 GPS 装置输出的内容调整下面的代码。
圣诞快乐!
import serial
ser = serial.Serial('/dev/ttyUSB0',4800,timeout=5)
while 1:
line = ser.readline().decode()
splitline = line.split(',')
if splitline[0] == '$GNGGA':
latitude = line[18:29]
longitude =line[31:42]
print(line)
print('latitude = ',latitude)
print('longitude =',longitude)
print('How to read : 3824.3139 means 38 deg 24.3139 mins')
break