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.
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.
A little more poking around with the DSO, I find the three pins needed.. 1) Gnd, 2) Data out and 3) +5V
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..!