系统启动后插入 USB GPS 设备时,gpsd 如何正确检测?

系统启动后插入 USB GPS 设备时,gpsd 如何正确检测?

我在 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

相关内容