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.
-
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– Shekhar06/20/2016 19:52:58Commented Jun 20, 2016 at 19:52
-
I've added images of my GSM/GPS module. Please see for yourself. Thanks.Shekhar– Shekhar06/20/2016 19:59:30Commented Jun 20, 2016 at 19:59
-
May I also ask what does pin G SDA SCL 1 2 G G 1 2 does?Shekhar– Shekhar06/20/2016 20:08:20Commented 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.SoreDakeNoKoto– SoreDakeNoKoto06/20/2016 22:25:45Commented Jun 20, 2016 at 22:25
-
No. Unfortunately I don't.Shekhar– Shekhar06/21/2016 02:39:11Commented Jun 21, 2016 at 2:39
1 Answer 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