GpsBee and Seeeduino Stalker v2


Since I have received a few days before my first Gps module (GpsBee) I was really curious how it works and how easily will be to monitor the GPS position of the device. The simplest way to connect the GpsBee was using a Seeeduino Stalker v2, which I have available nearby.

I considered to save the recorded information on a microSD card. For easy developing of the necessary Arduino application I used an existent dedicated library: TinyGPS (http://arduiniana.org/libraries/tinygps/), which help us to parse all the packets received on the serial port from the GpsBee module. Ok, so I take the information from the GPS module and save it into a text file (log mechanism which will be improved these days). The format of the log file is like bellow:

rtc_date_time;battery;fix_age_coordinates;latitude;longitude;altitude;course;speed_mps;fix_age_date_time;year;month;day;hour;minute;second;hundredths;chars;sentences;failed_checksum
09/19/2011 19:48:16;386;244; 45.668919; 25.609921;10000000.000000;343.750000; 2.443611;258;2011;9;19;16;48;20;0;211;1;2
09/19/2011 19:48:29;386;203; 45.668789; 25.610001;10000000.000000; 0.000000; 0.622478;203;2011;9;19;16;48;32;0;91;1;2

There is also a problem with the altitude parameter value but everything will be corrected as soon as possible.

The log file, containing all useful information, have been uploaded on the GPS Visualizer web application (www.gpsvisualizer.com) and I got the result as presented below.

The GpsBee module consume quite much energy power (102 mA current consumption during acquisition). It is recommended to have also an auxiliary energy source for being able to use the device for longer periods of time.

GpsBee not attached to the Bee Socket on Seeeduino

This is the case when the developer wants also to use the default serial port for other purposes (e.g. communicate with the computer to store the recorded coordinates). The GpsBee could not be put into the Bee socket from Seeeduino. When it is pun in the Bee socket the GpsBee will send packages to the default serial port.

The solution is to connect the RX and TX pins of the GpsBee to some digital pins available on the Seeeduino board. In the case presented below they are conencted to pins 2 and 3 from Seeeduino. For pins 2 and 3 should be defined a virtual serial port (using a library like NewSoftSerial) . I haven’t tested yet this design but from my point of view it should work. I would do some tests when I will have some more time available (and eventually upload also some code).

 

Advertisements
  1. Edouard Martin
    October 20, 2011 at 12:02 pm

    HI there,

    I think I need a little help. I have a seeeduino stalker 2.1 and a gps bee module. I use the Tinygps library but I am unable to receive/recognize correct sentences. The code I use is the following:

    #include
    #include

    int RXpin = 1;
    int TXpin = 2;

    TinyGPS gps;
    NewSoftSerial nss(RXpin, TXpin);

    void gpsdump(TinyGPS &gps);
    bool feedgps();
    void printFloat(double f, int digits = 2);

    void setup()
    {
    Serial.begin(115200);
    nss.begin(4800);
    pinMode(8, OUTPUT);

    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();
    }

    void loop()
    {

    bool newdata = false;
    unsigned long start = millis();

    // Every 5 seconds we print an update
    while (millis() – start < 5000)
    {
    if (feedgps())
    {
    digitalWrite(8, HIGH);
    newdata = true;
    }
    }
    Serial.print ( nss.read(), BYTE );
    if (newdata)
    {
    Serial.println("Acquired Data");
    Serial.println("————-");
    gpsdump(gps);
    Serial.println("————-");
    Serial.println();
    }

    }

    void printFloat(double number, int digits)
    {
    // Handle negative numbers
    if (number < 0.0)
    {
    Serial.print('-');
    number = -number;
    }

    // Round correctly so that print(1.999, 2) prints as "2.00"
    double rounding = 0.5;
    for (uint8_t i=0; i 0)
    Serial.print(“.”);

    // Extract digits from the remainder one at a time
    while (digits– > 0)
    {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
    }
    }

    void gpsdump(TinyGPS &gps)
    {
    long lat, lon;
    float flat, flon;
    unsigned long age, date, time, chars;
    int year;
    byte month, day, hour, minute, second, hundredths;
    unsigned short sentences, failed;

    gps.get_position(&lat, &lon, &age);
    Serial.print(“Lat/Long(10^-5 deg): “); Serial.print(lat); Serial.print(“, “); Serial.print(lon);
    Serial.print(” Fix age: “); Serial.print(age); Serial.println(“ms.”);

    feedgps(); // If we don’t feed the gps during this long routine, we may drop characters and get checksum errors

    gps.f_get_position(&flat, &flon, &age);
    Serial.print(“Lat/Long(float): “); printFloat(flat, 5); Serial.print(“, “); printFloat(flon, 5);
    Serial.print(” Fix age: “); Serial.print(age); Serial.println(“ms.”);

    feedgps();

    gps.get_datetime(&date, &time, &age);
    Serial.print(“Date(ddmmyy): “); Serial.print(date); Serial.print(” Time(hhmmsscc): “); Serial.print(time);
    Serial.print(” Fix age: “); Serial.print(age); Serial.println(“ms.”);

    feedgps();

    gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
    Serial.print(“Date: “); Serial.print(static_cast(month)); Serial.print(“/”); Serial.print(static_cast(day)); Serial.print(“/”); Serial.print(year);
    Serial.print(” Time: “); Serial.print(static_cast(hour)); Serial.print(“:”); Serial.print(static_cast(minute)); Serial.print(“:”); Serial.print(static_cast(second)); Serial.print(“.”); Serial.print(static_cast(hundredths));
    Serial.print(” Fix age: “); Serial.print(age); Serial.println(“ms.”);

    feedgps();

    Serial.print(“Alt(cm): “); Serial.print(gps.altitude()); Serial.print(” Course(10^-2 deg): “); Serial.print(gps.course()); Serial.print(” Speed(10^-2 knots): “); Serial.println(gps.speed());
    Serial.print(“Alt(float): “); printFloat(gps.f_altitude()); Serial.print(” Course(float): “); printFloat(gps.f_course()); Serial.println();
    Serial.print(“Speed(knots): “); printFloat(gps.f_speed_knots()); Serial.print(” (mph): “); printFloat(gps.f_speed_mph());
    Serial.print(” (mps): “); printFloat(gps.f_speed_mps()); Serial.print(” (kmph): “); printFloat(gps.f_speed_kmph()); Serial.println();

    feedgps();

    gps.stats(&chars, &sentences, &failed);
    Serial.print(“Stats: characters: “); Serial.print(chars); Serial.print(” sentences: “); Serial.print(sentences); Serial.print(” failed checksum: “); Serial.println(failed);
    }

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

    Thanks for your help,

    Edouard.

    • October 20, 2011 at 1:37 pm

      Hi Eduard,

      first of all I see that you use the pins 1 and 2 for defining the NewSoftSerial object (a kind of virtual serial port) but pin 1 is already in use by the default Serial communication (with the computer). I think you have firstly to change these pins and when come back with more details. In my case I haven’t use the NewSoftSerial library since I didn’t do the communication with the computer and was more easily just to use the default serial communication. When you use NewSoftSerial the GpsBee pins RX, TX should be connected to the proper pins from Seeeduino board (eg. RXpin, TXPin).

      Regards,
      Catalin

  2. Edouard Martin
    October 23, 2011 at 11:49 pm

    Hi Catalin,

    thank you for your answer. I changed the pins for defining the NewSoftSerial object and there was no communication with the gps. And yet I pluged the gps bee on the bee serial socket and on the schematic the pins 2 & 3 are the TX and Rx ones. I thought that the connection was done, do I need to established another physical connection between the gps bee and the board ?

    Regards,

    Edouard

    • October 24, 2011 at 11:22 am

      The bee socket has already the serial pins connected to the pins 0 and 1 from the Seeeduino Stalker v2 board. So, the GpsBee module (if it is put into the bee socket) is connected to the default serial port of the Seeeduino. If you want to use other pins for serial communication with GpsBee you can’t use the bee socket (it will interfere with the default serial port, the one you use for sending the information to the computer). For this reason I consider that the easiest solution was to use the default serial connected to GpsBee, and on computer read the information received on serial (information which come directly from GpsBee module) and process this information for obtain useful data (in this case when you do Serial.read() into your Arduino application it will read the information sent by the GpsBee module). If you want to continue with the existing solution I could draw you how the connection between Seeeduino and GpsBee should be done. Just tell me which solution you consider now more adequate for your needs.

      Regards, Catalin

  3. Edouard Martin
    October 30, 2011 at 6:41 pm

    Hi Catalin,

    First of all, thanks a lot for your help and time.
    If it doesn’t bother you, I would like to know how the connection Seeeduino and GpsBee should be done,

    Regards,

    Edouard.

    • November 5, 2011 at 1:03 am

      Hi,

      I put a connection design in the page, but not tested yet with code.

      Regards, Catalin

  4. January 7, 2012 at 2:38 pm

    Hi! Did I get right: socket on seeeduino stalker uses pin 0, 1 for communication? And when I connect communicate Stalker with PC, Bee socket is not available? In that case you connected GPS Bee externally to pin 2 and 3?

  5. January 7, 2012 at 2:39 pm

    can you please upload your working Data logger code when GPS bee is connected to the Bee socket?
    Thanks!

    • January 9, 2012 at 3:57 pm

      The code is not so simple just to upload it all into a web page. I will send an email to you with the code.

      • applethree
        January 13, 2012 at 3:51 pm

        Hello,

        Could you please send me this code too? I haven’t been able to get my GPS bee working, maybe your code can help me.

        Thanks ahead!

      • March 19, 2013 at 12:28 pm

        Hello,

        I am also stuck on the same thing. Can you please send me a copy of the code as well?

  6. Ezza
    January 24, 2012 at 5:07 am

    Hi Catalin, if it’s not too much trouble, could I see a copy of the code too? With much thanks.

  7. jLevring
    February 15, 2012 at 9:25 pm

    Hi.. I would like a bit of help with my GPS project. Could you send me your code aswell ?

  8. April 16, 2013 at 9:50 pm

    Hi Catalinbuj,
    Could I see a copy of the code too?
    Thanks a lot.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: