How can I get the GPS receiver BU-353 working on Ubuntu?

I have a GPS receiver BU-353 with USB interface and I'm trying to get it working under Ubuntu.

I ran gpsd -n -N -D 2 /dev/ttyUSB0, and got this output:

gpsd: launching (Version 2.94)
gpsd: listening on port gpsd
gpsd: running with effective group ID 1000
gpsd: running with effective user ID 1000
gpsd: opening GPS data source type 3 at '/dev/ttyUSB0'
gpsd: speed 38400, 8N1
gpsd: Garmin: garmin_gps Linux USB module not active.
gpsd: speed 9600, 8O1
gpsd: speed 38400, 8N1
gpsd: gpsd_activate(): opened GPS (fd 6)
gpsd: speed 4800, 8N1
gpsd: NTPD ntpd_link_activate: 0
gpsd: /dev/ttyUSB0 identified as type SiRF binary (2.687608 sec @ 4800bps)
gpsd: detaching 127.0.0.1 (sub 1, fd 8) in detach_client
gpsd: detaching 127.0.0.1 (sub 1, fd 8) in detach_client

After this I started tangoGPS, which said no GPS and no GPSD found.


Solution 1:

BU-353 is known to work with gpsd.

  1. Try the -b flag (for example, gpsd -b /dev/ttyUSB0)

  2. Open a separate terminal window and run gpsmon (included in the 'gpsd-clients' package) to check gpsd output. Restart gpsmon each time you restart gpsd.

    Could tango be starting too soon? The dongle requires a few seconds to sort out the signals, identify satellites, and calculate a fix; udev requires a few seconds to start gpsd, which in turn requires a few seconds to probe the dongle (which may not be ready yet) and begin broadcasting useful information when the data stream finally begins. gpsmon can help diagnose that problem, too.

  3. If there's no gpsd output, then do a more detailed check. Do the following steps in order to test the dongle, the kernel module, the mount, the device node, and gpsd:

    • Unplug the USB dongle and kill gpsd (sudo pkill gpsd). Wait 10 seconds for /dev/ttyUSB0 to be freed.
    • Plug the USB dongle back in and wait 10 seconds.
    • Check dmesg | tail -n 5 to verify the dongle was really mounted to /dev/ttyUSB0. If it doesn't mount, then you're missing a kernel module (from your description, that's unlikely). Sometimes it gets mounted to /dev/ttyUSB1 if 0 isn't free!
    • See if udev recognized the dongle and started gpsd (ps -e | grep gpsd). If not, then you have a udev rules issue, and you must start gpsd manually with gpsd /dev/ttyUSB0
    • Once gpsd is running, check for dongle output (dongle output = gpsd input). Try cat /dev/ttyUSB0 (stop it with CTRL+c). If that fails, then try resetting the baud rate to 4800:

      pkill gpsd
      stty 4800 > /dev/ttyUSB0
      gpsd -b /dev/ttyUSB0
      cat /dev/ttyUSB0     # CTRL+c to stop
      
    • If you have have good dongle output (=gpsd input), open a second terminal window and try either gpsmon or cgps to test gpsd output.
    • Finally, now that you have good dongle output and good gpsd output, try tangoGPS.

Solution 2:

I was having a similar problem. I did everything here and still couldn't get it to work in openCPN. I stumbled on to another forum that said to try changing the default settings for gpsd at /etc/default/gpsd to this.

# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time
START_DAEMON="false"

# Use USB hotplugging to add new USB devices automatically to the daemon
USBAUTO="true"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyUSB0"

# Other options you want to pass to gpsd
GPSD_OPTIONS="-n -G -b"
GPSD_SOCKET="/var/run/gpsd.sock"
#end of file gpsd

to my surprise it worked.