Can you figure this out? I have a project which is Vehicle Tracking System, I'm using Arduino Mega 2560 with NEO GPS6MV2 and SIM900 for my Vehicle GPS tracker. one of my specific objective is to save the GPS coordinates on an online MySQL database. The GPS is working. I successfully save the coordinates to the database by manually typing the AT commands and the parameters on the Arduino serial monitor. But my problem is I cannot save the coordinates on the database using this code. This is what I have on the Arduino serial monitor:
7 129 14.759555 120.986236 915 10/24/2017 21:55:35 92 44.40 0.00 0.19 N 10723 327.57 NNW 744 3 1
Start Send
AT+SAPBR=3,1,"Contype","GPRS"
AT+SAPBR=3,1,"APN","http.globe.com.ph123"
AT+SAPBR=1,1
AT+SAPBR=2,1
AT+HTTPINIT
AT+HTTPPARA="CID",1
AT+HTTPPARA="URL","http://crbphil-001-site1.1tempurl.com/adddata.php?"
AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded"
AT+HTTPDATA=38,10000
addlati=
14.759555&addlongti=
120.986236"
AT+HTTPACTION=1
AT+HTTPTERM
AT+SAPBR=0,1
Finish
While on the database, there's no data added. There's nothing happening on the database. There are no errors on my PHP script. It is actually working when I manually type the URL on a web browser. Here's the code:
#include <SoftwareSerial.h>
#include "SIM900.h"
#include <TinyGPS.h>
#define pinPowerSIM900 14
TinyGPS gps;
SoftwareSerial ss(10, 11);
uint16_t startAddr = 0x0000;
uint16_t lastAddr;
uint16_t TimeIsSet = 0xaa55;
int currentDay = 0;
int currentMonth = 0;
int currentYear = 0;
int currentHour = 0;
int currentMinute = 0;
float flat, flon;
float previousFlat = 0.0;
float previousFlon = 0.0;
static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
void setup()
{
pinMode (pinPowerSIM900, OUTPUT); digitalWrite (pinPowerSIM900, LOW);
powerUpOrDown();
Serial.begin(115200);
Serial.print("Testing TinyGPS library v. ");
Serial.println(TinyGPS::library_version());
Serial.println("");
Serial.println();
Serial.println("Stats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum");
Serial.println(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail");
Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");
ss.begin(9600);
}
void loop()
{
bool newData = false;
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (ss.available())
{
char c = ss.read();
//Serial.write(c); /*uncomment this line if you want to see GPS data*/
if (gps.encode(c))
newData = true;
}
}
if (newData)
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age); /*latitude, longitude, age*/
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6); /*print lat */
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6); /*print long */
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
print_date(gps); /* print date */
print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2); /* print altitude */
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);
gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();
smartdelay(3000);
if ((flat != previousFlat) || (flon != previousFlon))
{
previousFlat = flat;
previousFlon = flon;
SendSQL();
}
}
}
static void smartdelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}
static void print_float(float val, float invalid, int len, int prec)
{
if (val == invalid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i = flen; i < len; ++i)
Serial.print(' ');
}
smartdelay(0);
}
static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i = strlen(sz); i < len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len - 1] = ' ';
Serial.print(sz);
smartdelay(0);
}
static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("********** ******** ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
smartdelay(0);
}
static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i = 0; i < len; ++i)
Serial.print(i < slen ? str[i] : ' ');
smartdelay(0);
}
void powerUpOrDown()
{
digitalWrite(pinPowerSIM900, HIGH);
delay(2000);
digitalWrite(pinPowerSIM900, LOW);
delay(3000);
}
void SendSQL() //To send the GPS coordinates on the MySQL
{
Serial.println("Start Send");
Serial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
delay(500);
Serial.println("AT+SAPBR=3,1,\"APN\",\"http.globe.com.ph123\""); //APN
delay(500);
Serial.println("AT+SAPBR=1,1");
delay(3000);
Serial.println("AT+SAPBR=2,1");
delay(3000);
Serial.println("AT+HTTPINIT");
delay(500);
Serial.println("AT+HTTPPARA=\"CID\",1 ");
delay(500);
Serial.println("AT+HTTPPARA=\"URL\",\"http://crbphil-001-site1.1tempurl.com/adddata.php?\""); //URL
delay(500);
Serial.println("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\"");
delay(500);
Serial.println("AT+HTTPDATA=38,10000");
delay(500);
Serial.print("addlati="); //latitude to send
Serial.print(previousFlat, 6);
Serial.print("&addlongti="); // longitude to send
Serial.print(previousFlon, 6);
Serial.println("\"");
delay(3000);
Serial.println("AT+HTTPACTION=1"); //syntax for POST method
delay(15000);
Serial.println("AT+HTTPTERM");
delay(500);
Serial.println("AT+SAPBR=0,1");
delay(500);
Serial.println("Finish");
}