BeagleBone and GPS

Tonight brings us to GPS’s and how to get the BeagleBone to know where it is in the world.

I had a request during the week for a unit that would track and monitor a refrigerated truck.  So first thing that sprung to mind was a BeagleBone, I’ve already looked into the 1-wire network and setting up a DS18B20.. That is the temperature monitoring out of the way.

Now on to position… I know I could just get an off the shelf USB GSP module, but I’ll need the Bone’s one USB port to hook up a GSM modem, and sure I could put a USB hub in and connect both to the one port. But there has to be a nicer solution that can make use of one of the other UARTS on the Bone.  A dig around in my parts box and I found this old skool GPS receiver. Back in the day when I have a Palm Treo “Smart” phone.This unit has bluetooth (yepee!), but without a USB dongle won’t be much use… unless there is an internal serial line I can hack into.  Time to crack this bad boy open and see what is inside.  Turns out it is a re-badged Holux GPS receiver called the GPSlim236.

The GPSlim236 GPS module (with bluetooth)

What are the connectors on the left? Looks like these might be worth a poke at with the scope, see what is going on.

Cool.. Pin 3 (up from the bottom left pin) we see some serial data, and it even sweeter, it looks like it’s at 3.3V levels too.

The GPS serial data on the DSO (measured on pin 3)

A little more poking around with the DSO, I find the three pins needed.. 1) Gnd, 2) Data out and 3) +5V

The pinouts for the GPSlim263 module

So now I can hook up the GPS module to the BeagleBone on a spare UART and get the GPS data in that way.  Much easier that trying to get Bluetooth working!  I was already testing my RFID module out on UART1, so time to config UART2. UART2 Rx comes in on header P9, pin 22 [MUX pin spi0_sclk] and needs to be set up (along with TX).

echo 1 > /sys/kernel/debug/omap_mux/spi0_d0
echo 21 > /sys/kernel/debug/omap_mux/spi0_sclk

With a dig around I found the default serial config for the GPS data is 38400,n81.  Drop into Minicom and config the port (/dev/ttyO2), and bingo:

$GPGGA,220514.000,5311.xxxx,N,00607.xxxx,W,1,06,1.3,28.7,M,54.7,M,,0000*70
$GPRMC,220514.000,A,5311.xxxx,N,00607.xxxx,W,0.00,163.13,151112,,,A*7C
$GPVTG,163.13,T,,M,0.00,N,0.0,K,A*0B
$GPGGA,220515.000,5311.xxxx,N,00607.xxxx,W,1,06,1.3,28.7,M,54.7,M,,0000*71
$GPRMC,220515.000,A,5311.xxxx,N,00607.xxxx,W,0.00,163.13,151112,,,A*7D
$GPVTG,163.13,T,,M,0.00,N,0.0,K,A*0B
$GPGGA,220516.000,5311.xxxx,N,00607.xxxx,W,1,06,1.3,28.7,M,54.7,M,,0000*72
$GPGSA,A,3,05,26,07,08,15,10,,,,,,,2.2,1.3,1.7*3D
$GPGSV,3,1,11,05,70,211,23,08,67,082,15,26,61,275,34,07,32,054,30*7D
$GPGSV,3,2,11,28,24,132,,15,24,274,27,10,24,147,18,21,15,322,*7A
$GPGSV,3,3,11,02,07,206,,03,04,024,,06,03,007,*4B

We have position data now… cool..!