0

My project is a vehicle tracking system. I'm using a NEO-6M for GPS and a SIM900 for GPRS. I want to send the GPS coordinates to a MySQL database. I've tested the GPS and it's working well. I've succeeded to send the data to the online MySQL database by manually typing the AT commands on the Arduino Serial Monitor. Now, I would like to put the sending of coordinates in a loop for Arduino to send the coordinates on the database every 3 seconds. But there's no data entering the database. What do you think is the problem here? Here's my code (by the way it has no errors reported):

sendlatlng.ino:

#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(); //Function to send the coordinates
 }
 }
}
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() {
 Serial.println("Start Send");
 gsm.SimpleWriteln("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
 delay(500);
 gsm.SimpleWriteln("AT+SAPBR=3,1,\"APN\",\"my.apn.com\""); //APN
 delay(500);
 gsm.SimpleWriteln("AT+SAPBR=1,1");
 delay(3000);
 gsm.SimpleWriteln("AT+SAPBR=2,1");
 delay(3000);
 gsm.SimpleWriteln("AT+HTTPINIT");
 delay(500);
 gsm.SimpleWriteln("AT+HTTPPARA=\"CID\",1 ");
 delay(500);
 gsm.SimpleWriteln("AT+HTTPPARA=\"URL\",\"http://crbphil-001-site1.1tempurl.com/adddata.php\""); //URL
 delay(500);
 gsm.SimpleWriteln("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\"");
 delay(500);
 gsm.SimpleWriteln("AT+HTTPDATA=38,10000");
 delay(500);
 gsm.SimpleWriteln("addlati=");
 Serial.print(previousFlat, 6);
 gsm.SimpleWriteln("&addlongti=");
 Serial.print(previousFlon, 6);
 gsm.SimpleWriteln("\"");
 delay(3000);
 gsm.SimpleWriteln("AT+HTTPACTION=1");
 delay(15000);
 gsm.SimpleWriteln("AT+HTTPTERM");
 delay(500);
 gsm.SimpleWriteln("AT+SAPBR=0,1");
 delay(500);
 Serial.println("Finish");
}

And this is my PHP script to save data in the MySQL database:

adddata.php:

<?php 
//Connect to MySQL
include("config.php");
// Perform a query, check for error
if (!mysqli_query($connect,"INSERT INTO track (tr_date, tr_time, latitude, longitude) VALUES ('".$_POST["addday"]."','".$_POST["addhour"]."','".$_POST["addlati"]."','".$_POST["addlongti"]."')")) {
 echo("Error description: " . mysqli_error($connect));
}
?>
dda
1,5951 gold badge12 silver badges17 bronze badges
asked Oct 4, 2017 at 19:23
2
  • 2
    What is the response from the gsm module after each AT command? The responses should give a clue to what is happening. Commented Oct 4, 2017 at 19:40
  • @MikaelFalkvidd there is no response. Just the set of commands in the serial monitor Commented Oct 4, 2017 at 19:58

1 Answer 1

1

Can you see a slight discrepancy in these lines?

gsm.SimpleWriteln("addlati=");
Serial.print(previousFlat, 6);
gsm.SimpleWriteln("&addlongti=");
Serial.print(previousFlon, 6);

I can.

answered Oct 4, 2017 at 22:02
1
  • I tried to fix that discrepancy but nothing happens, I mean there's no error or something. Commented Oct 24, 2017 at 19:47

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.