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.

dda
1,5951 gold badge12 silver badges17 bronze badges
asked Jun 20, 2016 at 4:25
10
  • 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. Commented Jun 20, 2016 at 19:52
  • I've added images of my GSM/GPS module. Please see for yourself. Thanks. Commented Jun 20, 2016 at 19:59
  • May I also ask what does pin G SDA SCL 1 2 G G 1 2 does? Commented Jun 20, 2016 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. Commented Jun 20, 2016 at 22:25
  • No. Unfortunately I don't. Commented Jun 21, 2016 at 2:39

1 Answer 1

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

dda
1,5951 gold badge12 silver badges17 bronze badges
answered Jun 2, 2017 at 13:00

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.