GPS how to

Hi I recently bought a GP-635T (GPS Receiver - GP-735 (56 Channel) - GPS-13670 - SparkFun Electronics) and installed the TinyGps library. I was wondering if any one could supply me with a simple code to test to see if it works and how to hook it up to my arduino.

Thank you!

Look page 8-9 of the datasheet http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/GPS/GP-635T-121130.pdf

If you've bought the UART version, then :

gps ------ Arduino

pin 1 - > GND ( Arduino GND)
pin 2 -> VCC (Arduino +5V )
pin 3 (Tx)-> D0 (Arduino Rx)
pin 4 (Rx)-> D1 (Arduino Tx)
and you're done
if you want to control the power from arduino, you can connect pin 6 (gps) to an digital output of arduino, and put it to LOW when you want to power off the gps.
I don't use the tinygps library, but I'm sure you'll easily find code examples :wink:

To start with, use softserial and just echo anything the GPS sends you to the hardware serial port so you can view it in the IDE terminal.

TinyGPS comes with 3 tutorials when you install the library. In the menu, Click on File, Examples, Tiny GPS, you will find them there. The sketch called "simple_test" will get you going.

Dave

GunnerCAF:
TinyGPS comes with 3 tutorials when you install the library. In the menu, Click on File, Examples, Tiny GPS, you will find them there. The sketch called "simple_test" will get you going.

Dave

Unless you are using 1.5.2 then you get more errors than I can be bothered to try to fix....

EDIT: 1.5.2 is not the problem apparently. Target board = DUE is the problem.

:roll_eyes:

//#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
 It requires the use of SoftwareSerial, and assumes that you have a
 4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).
 */

TinyGPS gps;
//SoftwareSerial nss(3, 4);

static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
  Serial.begin(115200);
  while(!Serial) {
  }
  Serial1.begin(4800);

  Serial.print("Testing TinyGPS library v. "); 
  Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); 
  Serial.println(sizeof(TinyGPS));
  Serial.println();
  Serial.println("Sats HDOP Latitude Longitude Fix  Date       Time       Date Alt     Course Speed Card  Distance Course Card  Chars Sentences Checksum");
  Serial.println("          (deg)    (deg)     Age                        Age  (m)     --- from GPS ----  ---- to London  ----  RX    RX        Fail");
  Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();

  // Every second we print an update
  while (millis() - start < 1000)
  {
    if (feedgps())
      newdata = true;
  }

  gpsdump(gps);
}

static void gpsdump(TinyGPS &gps)
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
  gps.f_get_position(&flat, &flon, &age);
  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

  print_date(gps);

  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

  gps.stats(&chars, &sentences, &failed);
  print_int(chars, 0xFFFFFFFF, 6);
  print_int(sentences, 0xFFFFFFFF, 10);
  print_int(failed, 0xFFFFFFFF, 9);
  Serial.println();
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  feedgps();
}

static void print_float(float val, float invalid, int len, int prec)
{
  char sz[32];
  if (val == invalid)
  {
    strcpy(sz, "*******");
    sz[len] = 0;
    if (len > 0) 
      sz[len-1] = ' ';
    for (int i=7; i<len; ++i)
      sz[i] = ' ';
    Serial.print(sz);
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1);
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(" ");
  }
  feedgps();
}

static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned long age;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  if (age == TinyGPS::GPS_INVALID_AGE)
    Serial.print("*******    *******    ");
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d   ",
    month, day, year, hour, minute, second);
    Serial.print(sz);
  }
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  feedgps();
}

static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  feedgps();
}

static bool feedgps()
{
  while (Serial1.available())
  {
    if (gps.encode(Serial1.read()))
      return true;
  }
  return false;
}

Code listed handles incoming GPS on pins 18 & 19 ( Serial 1, 18 TX, 19 RX) with DUE as target board.. Hopefully helps other noobs...

Now getting some of this :- :smiley: :stuck_out_tongue: Yeay!!

4    630  53.12169 -1.26565  731  08/14/2013 18:55:49   754  170.50  0.00   0.00  N     195      156.23 SSE   86334 580       0        
4    640  53.12169 -1.26564  762  08/14/2013 18:55:50   784  170.40  0.00   0.00  N     195      156.23 SSE   86630 582       0        
4    640  53.12169 -1.26564  759  08/14/2013 18:55:51   782  170.10  0.00   0.00  N     195      156.23 SSE   86926 584       0        
4    640  53.12169 -1.26563  780  08/14/2013 18:55:52   802  169.80  0.00   0.00  N     195      156.23 SSE   87222 586       0        
4    640  53.12169 -1.26563  797  08/14/2013 18:55:53   820  169.60  0.00   0.00  N     195      156.23 SSE   87518 588       0        
4    640  53.12170 -1.26562  805  08/14/2013 18:55:54   827  169.50  0.00   0.00  N     195      156.23 SSE   87818 590       0

I must admit it does get a bit irksome that you need to spend 2/3 of your time fixing stuff BEFORE you can do what you set out to do in the first place.....

Regards,

Graham

Hello everyone!

I am using GP-635T gps module and arduino uno to get the GPS data. The NMEA sentences that I get are as follows.

$GPGGA,,,,,,0,00,99.99,,,,,,*48

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

$GPGSV,1,1,00*79

$GPGLL,,,,,,V,N*64

$GPTXT,01,01,02,ANTSTATUS=INIT*25

$GPRMC,,V,,,,,,,,,,N*53

$GPVTG,,,,,,,,,N*30

$GPGGA,,,,,,0,00,99.99,,,,,,*48

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

What are these commas??? What do they mean??? These commas should actually separate different parameters like latitude, longitude, time in NMEA sentences to the best of my knowledge. Is there something that I am missing?

Hi,
It looks like the GPS is working, but cannot find any satellites.
I have a GPS with built in antenna as well, and you need to go outside to get satellite reception.
My room is under a corrugated iron roof and only late at night can I see any satellites there, and only 3 or 4.

Which library are you using, look in the examples for the library, there should be a sketch that displays on the monitor, all the GPS data, long, lat , satellites etc, in an ordered table.

Tom... :slight_smile:

Get a copy of the NMEA reference manual.
Read through it.
Decide which sentences provide the data that you need.
Ignore the rest.....