GPS Module NEO-M8N - (GPS / Galileo / Beidou / GLONASS Signal)

  • Was  RM75.00 
  • RM60.00

  • Product Code: GPS Module NEO-M8N U-blox
  • Availability: In Stock

 

Features

  • Concurrent reception of up to 3 GNSS (GPS, Galileo, GLONASS, BeiDou)
  • Output Baud Rate: 9600bps (can be modified by U-CENTER)
  • Output Frequency: 1Hz (can be modified by U-CENTER)
  • Output Protocol: NMEA-0183
  • Output Level: serial communication TTL level
  • With IPEX and SMA convenient for connecting with the external active antenna, stronger satellite search ability
  • Rechargeable backup battery
  • Compatible with 5V / 3.3V, applicable for various MCUs
  • Compact and excellent performance
  • EEprom to save configuration settings

 

 

* PPS should be connected to the clock pulse output (CPOUT) of a MCU. This pin is unconnected if GPS module is connected to a computer.

 

 

Connect to an Arduino

/* Connection to UNO
VCC - Arduino 5v
GND - Arduino GND
TXD - Arduino D0
RXD - No connect
PPS - No connect

If want to use this on Leonardo, have to rename all the "Serial" to "Serial1"
*/

char nmeaSentence[68];
String latitude;		//Latitude
String longitude;		//Longitude
String lndSpeed;		//Speed
String gpsTime;		//UTC time, Kuala Lumpur is 8
String klTime;		//KL Time

#define GPSSerial Serial

void setup()
{
  GPSSerial.begin(9600);
  GPSSerial.println("ILoveMCU.taobao.com");
  GPSSerial.println("Wating...");
}

void loop()
{

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)	//Scan for GPS each second
  {
    while (GPSSerial.available())	//Serial reading
    {
      char c = GPSSerial.read();	//Serial reading

      switch(c)					//
      {
      case '$':					//data divided by $
        GPSSerial.readBytesUntil('*', nmeaSentence, 67);		//Store data in nmeaSentence
        //Serial.println(nmeaSentence);
        latitude = parseGprmcLat(nmeaSentence);	//Get Latitude
        longitude = parseGprmcLon(nmeaSentence); //Get Longitude
        lndSpeed = parseGprmcSpeed(nmeaSentence); //Get Speed
        gpsTime = parseGprmcTime(nmeaSentence); //Get GPS time


        if(latitude > "")		//Print if not null
        {
          GPSSerial.println("------------------------------------");
          GPSSerial.println("latitude: " + latitude);
        }

        if(longitude > "")		//Print if not null
        {
          GPSSerial.println("longitude: " + longitude);
        }  

        if(lndSpeed > "")		//Print if not null
        {
          GPSSerial.println("Speed (knots): " + lndSpeed);
        }

        if(gpsTime > "")		//Print if not null
        {
          GPSSerial.println("gpsTime: " + gpsTime);
          klTime = getklTime(gpsTime);	//KL Time
          GPSSerial.println("klTime: " + klTime);        
        }		
      }
    }
  }
}

String getklTime(String s)
{
  int hour = s.substring(0,2).toInt();
  int minute = s.substring(2,4).toInt();
  int second = s.substring(4,6).toInt();

  hour += 8;

  if(hour > 24)
    hour -= 24;
  s = String(hour) +":"+String(minute) +":"+ String(second);
  return s;
}

//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Latitude
String parseGprmcLat(String s)
{
  int pLoc = 0; //paramater location pointer
  int lEndLoc = 0; //lat parameter end location
  int dEndLoc = 0; //direction parameter end location
  String lat;
  /*make sure that we are parsing the GPRMC string. 
   Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
   There seemed to be a 0x0D and 0x00 character at the end. */
  if(s.substring(0,4) == "GPRM")
  {
    //Serial.println(s);
    for(int i = 0; i < 5; i++)
    {
      if(i < 3) 
      {
        pLoc = s.indexOf(',', pLoc+1);
        /*Serial.print("i < 3, pLoc: ");
         Serial.print(pLoc);
         Serial.print(", ");
         Serial.println(i);*/
      }
      if(i == 3)
      {
        lEndLoc = s.indexOf(',', pLoc+1);
        lat = s.substring(pLoc+1, lEndLoc);
        /*Serial.print("i = 3, pLoc: ");
         Serial.println(pLoc);
         Serial.print("lEndLoc: ");
         Serial.println(lEndLoc);*/
      }
      else
      {
        dEndLoc = s.indexOf(',', lEndLoc+1);
        lat = lat + " " + s.substring(lEndLoc+1, dEndLoc);
        /*Serial.print("i = 4, lEndLoc: ");
         Serial.println(lEndLoc);
         Serial.print("dEndLoc: ");
         Serial.println(dEndLoc);*/
      }
    }
    return lat; 
  }
  //}
  //}
}

//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Longitude
String parseGprmcLon(String s)
{
  int pLoc = 0; //paramater location pointer
  int lEndLoc = 0; //lat parameter end location
  int dEndLoc = 0; //direction parameter end location
  String lon;

  /*make sure that we are parsing the GPRMC string. 
   Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
   There seemed to be a 0x0D and 0x00 character at the end. */
  if(s.substring(0,4) == "GPRM")
  {
    //Serial.println(s);
    for(int i = 0; i < 7; i++)
    {
      if(i < 5) 
      {
        pLoc = s.indexOf(',', pLoc+1);
        /*Serial.print("i < 3, pLoc: ");
         Serial.print(pLoc);
         Serial.print(", ");
         Serial.println(i);*/
      }
      if(i == 5)
      {
        lEndLoc = s.indexOf(',', pLoc+1);
        lon = s.substring(pLoc+1, lEndLoc);
        /*Serial.print("i = 3, pLoc: ");
         Serial.println(pLoc);
         Serial.print("lEndLoc: ");
         Serial.println(lEndLoc);*/
      }
      else
      {
        dEndLoc = s.indexOf(',', lEndLoc+1);
        lon = lon + " " + s.substring(lEndLoc+1, dEndLoc);
        /*Serial.print("i = 4, lEndLoc: ");
         Serial.println(lEndLoc);
         Serial.print("dEndLoc: ");
         Serial.println(dEndLoc);*/
      }
    }
    return lon; 
  }
}

//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Longitude
String parseGprmcSpeed(String s)
{
  int pLoc = 0; //paramater location pointer
  int lEndLoc = 0; //lat parameter end location
  int dEndLoc = 0; //direction parameter end location
  String lndSpeed;

  /*make sure that we are parsing the GPRMC string. 
   Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
   There seemed to be a 0x0D and 0x00 character at the end. */
  if(s.substring(0,4) == "GPRM")
  {
    //Serial.println(s);
    for(int i = 0; i < 8; i++)
    {
      if(i < 7) 
      {
        pLoc = s.indexOf(',', pLoc+1);
        /*Serial.print("i < 8, pLoc: ");
         Serial.print(pLoc);
         Serial.print(", ");
         Serial.println(i);*/
      }
      else
      {
        lEndLoc = s.indexOf(',', pLoc+1);
        lndSpeed = s.substring(pLoc+1, lEndLoc);
        /*Serial.print("i = 8, pLoc: ");
         Serial.println(pLoc);
         Serial.print("lEndLoc: ");
         Serial.println(lEndLoc);*/
      }
    }
    return lndSpeed; 
  }
}


//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Longitude
String parseGprmcTime(String s)
{
  int pLoc = 0; //paramater location pointer
  int lEndLoc = 0; //lat parameter end location
  int dEndLoc = 0; //direction parameter end location
  String gpsTime;

  /*make sure that we are parsing the GPRMC string. 
   Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
   There seemed to be a 0x0D and 0x00 character at the end. */
  if(s.substring(0,4) == "GPRM")
  {
    //Serial.println(s);
    for(int i = 0; i < 2; i++)
    {
      if(i < 1) 
      {
        pLoc = s.indexOf(',', pLoc+1);
        /*Serial.print("i < 8, pLoc: ");
         Serial.print(pLoc);
         Serial.print(", ");
         Serial.println(i);*/
      }
      else
      {
        lEndLoc = s.indexOf(',', pLoc+1);
        gpsTime = s.substring(pLoc+1, lEndLoc);
        /*Serial.print("i = 8, pLoc: ");
         Serial.println(pLoc);
         Serial.print("lEndLoc: ");
         Serial.println(lEndLoc);*/
      }
    }
    return gpsTime; 
  }
}

// Turn char[] array into String object
String charToString(char *c)
{

  String val = "";

  for(int i = 0; i <= sizeof(c); i++) 
  {
    val = val + c[i];
  }

  return val;
}


More tutorial  

Write a review

Note: HTML is not translated!
    Bad           Good