0

I'm trying to get GPS coordinates using my SIM808 module by connecting it with Arduino. When I use this code,

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "gps.h"

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to start a connection as client.

GPSGSM gps;

char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

char stat;
char inSerial[20];
int i = 0;
boolean started = false;

void setup() {
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses it is recommended to use 4800 or slower.
  if (gsm.begin(2400)) {
    Serial.println("\nstatus=READY");
    gsm.forceON(); //To ensure that SIM908 is not only in charge mode
    started = true;
  } else Serial.println("\nstatus=IDLE");
  if (started) {
    //GPS attach
    if (gps.attachGPS())
      Serial.println("status=GPSREADY");
    else Serial.println("status=ERROR");
    delay(20000); //Time for fixing
    stat = gps.getStat();
    if (stat == 1)
      Serial.println("NOT FIXED");
    else if (stat == 0)
      Serial.println("GPS OFF");
    else if (stat == 2)
      Serial.println("2D FIXED");
    else if (stat == 3)
      Serial.println("3D FIXED");
    delay(5000);
    //Get data from GPS
    gps.getPar(lon, lat, alt, time, vel);
    Serial.println(lon);
    Serial.println(lat);
    Serial.println(alt);
    Serial.println(time);
    Serial.println(vel);
  }
};

void loop() {
  //Read for new byte on serial hardware, and write them on NewSoftSerial.
  serialhwread();
  //Read for new byte on NewSoftSerial.
  serialswread();
};

void serialhwread() {
  i = 0;
  if (Serial.available() > 0) {
    while (Serial.available() > 0) {
      inSerial[i] = (Serial.read());
      delay(10);
      i++;
    }
    inSerial[i] = '\0';
    if (!strcmp(inSerial, "/END")) {
      Serial.println("_");
      inSerial[0] = 0x1a;
      inSerial[1] = '\0';
      gsm.SimpleWriteln(inSerial);
    }
    //Send a saved AT command using serial port.
    if (!strcmp(inSerial, "TEST")) {
      stat = gps.getStat();
      if (stat == 1)
        Serial.println("NOT FIXED");
      else if (stat == 0)
        Serial.println("GPS OFF");
      else if (stat == 2)
        Serial.println("2D FIXED");
      else if (stat == 3)
        Serial.println("3D FIXED");
    }
    //Read last message saved.
    if (!strcmp(inSerial, "MSG")) {
      Serial.println(msg1);
    } else {
      Serial.println(inSerial);
      gsm.SimpleWriteln(inSerial);
    }
    inSerial[0] = '\0';
  }
}

void serialswread() {
  gsm.SimpleRead();
}

After some time, I get this error on the Serial Monitor of Arduino:

status=ERROR

The connections are as follows:

  • TX of Module = Pin 2 of Arduino
  • RX of Module = Pin 3 of Arduino
  • GND of Module = GND of Arduino
  • 5V of Module = 5V of Arduino

The Arduino is powered by USB connected to my PC.

Here is a pic of my connections

This is SIM808 module.

SIM808 module.

  • Yes. SMS and Call functionalities are working fine. I can send messages to my mobile phone. And what pins are you talking about? I connected GPS antenna only and nothing else. – Shekhar Jun 20 '16 at 19:52
  • I've added images of my GSM/GPS module. Please see for yourself. Thanks. – Shekhar Jun 20 '16 at 19:59
  • May I also ask what does pin G SDA SCL 1 2 G G 1 2 does? – Shekhar Jun 20 '16 at 20:08
  • Those are just breakout pins for the SIM808's I2C peripheral. Not needed here. Do you have a USB-TTL adapter? You can try communicating with the module directly with the serial monitor, to see if it responds to the GPS commands. – TisteAndii Jun 20 '16 at 22:25
  • No. Unfortunately I don't. – Shekhar Jun 21 '16 at 2:39
1

Your problem looks similar to mine. It is possible that your module is a GNSS module and therefore doesn't work with standard AT commands, which are used in "gps.h".

First check that the GPS Module receives enough current, at least 5V -- 2A from an external source like a battery.

Then try sending AT commands in the serial monitor to check if your GPS module works properly:

#include <SoftwareSerial.h>
SoftwareSerial SIM808(2,3); //(RX-Pin,TX-Pin)

void setup() {
  Serial.begin(19200);
  SIM808.begin(19200);
}

void loop() {
  if (SIM808.available())
    Serial.write(SIM808.read());
  if (Serial.available())
    SIM808.write(Serial.read());
}

Upload this to the board an then open the serial monitor and send these commands:

AT+CGNSPWR=1

This should return OK.

After that input:

 AT+CGNSINF

This should return OK and your GPS Location in this format:

1,0,<time>,<your latitude>,<your longitude>,.......... 

If you get the following output:

1,0,19800106001337.000,,,,0.00,0.0,0,,,,,,0,0,,,,, 

It means your GPS is not set. Try to put GPS antenna outside your room, on open space.

For more information about GNSS modules go to http://www.elecrow.com/wiki/images/0/05/SIM800_Series_GNSS_Application_Note_V1.00.pdf

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.