Am using Arduino uno
The wiring are:
MOSI-> 11
MISO-> 12
SCK-> 13
CS-10
main.cpp file code
#include <Arduino.h>
#include<TinyGPS.h>
#include<SoftwareSerial.h>
#include <Adafruit_FONA.h>
#include "sd_card.h"
#define FONA_RX A5
#define FONA_TX A4
#define FONA_RST A3
#define GPS_TX 8
#define GPS_RX 9
#define D_STATUS 4
String deviceID ="199DHH34";
char http_cmd[128];
boolean gprs_on = false;
boolean tcp_on = false;
int net_status;
uint16_t statuscode;
int16_t length;
String response = "";
char buffer[512];
SoftwareSerial SIM800ss = SoftwareSerial(FONA_TX, FONA_RX);
Adafruit_FONA SIM800 = Adafruit_FONA(&SIM800ss, FONA_RST);
//SoftwareSerial mGsm(2 ,3);
SoftwareSerial mGps(GPS_RX, GPS_TX);
String mDEVICE_= "AX-88FUEJ90-JE";
float tmpSpd,tmpLat,tmpLng=0;
#define MAX_DISTANCE_COVERED 0
float flon,flat,spd,dstBtw;
boolean newdata=false;
boolean isStart;
TinyGPS mGps_lib;
unsigned long age, date, time, chars = 0;
void blink_status()
{
digitalWrite(D_STATUS,HIGH);
delay(1000);
digitalWrite(D_STATUS,LOW);
delay(1000);
}
void __status()
{
digitalWrite(D_STATUS,LOW);
delay(500);
digitalWrite(D_STATUS,HIGH);
}
static bool feedgps(long timeOut)
{
unsigned long timeout = millis();
mGps.listen();
while(!mGps.available())
if (millis() - timeout > timeOut)
{
Serial.println("Gps read time out");
return false;
}
mGps.listen();
while (mGps.available())
{
char rx=mGps.read();
// Serial.print(rx);
if (mGps_lib.encode(rx))
{
blink_status();
return true ;
}
}
__status();
return false;
}
void printSerialData()
{
unsigned long timeout = millis();
while(!SIM800ss.available())
if (millis() - timeout > 50000)return;
String cnt="";
while(SIM800ss.available())
{
char rx=SIM800ss.read();
cnt=cnt + rx;
Serial.write(rx);
}
}
void sync_data_to_server(String latitude,String longitude,String spd)
{
SIM800ss.listen();
SIM800ss.println("ATE0");
delay(3000);
SIM800ss.println("AT+CGATT=1");
printSerialData();
delay(3000);
SIM800ss.println("AT+SAPBR=3,1,"CONTYPE","GPRS"");//setting the SAPBR,connection type is GPRS
printSerialData();
delay(5000);
SIM800ss.println("AT+SAPBR=3,1,"APN",""");//setting the APN,2nd parameter empty works for all networks
printSerialData();
delay(3000);
SIM800ss.println("AT+SAPBR=1,1");
printSerialData();
delay(1000);
SIM800ss.println("AT+HTTPINIT"); //init the HTTP request
printSerialData();
delay(10000);
String url="AT+HTTPPARA="URL","http://kapichet-edu.com/track/index.php?tractorid="+deviceID+"&latitude="+latitude+"&longitude="+longitude+"&speed="+spd+"\"";
SIM800ss.println(url);// setting the httppara,
Serial.println(url ) ;
//the second parameter is the website from where you want to access data
printSerialData();
delay(3000);
SIM800ss.println();
SIM800ss.println("AT+HTTPACTION=0");//submit the GET request
printSerialData();
delay(10000);
SIM800ss.println("AT+HTTPREAD");// read the data from the website you access
printSerialData();
delay(2000);
SIM800ss.println("AT+HTTPTERM");// terminate HTTP service
printSerialData();
}
void no_gps_network()
{ int latitude=1; int longitude=0; int spd=0;
SIM800ss.listen();
SIM800ss.println("ATE0");
delay(3000);
SIM800ss.println("AT+CGATT=1");
printSerialData();
delay(3000);
SIM800ss.println("AT+SAPBR=3,1,"CONTYPE","GPRS"");//setting the SAPBR,connection type is GPRS
printSerialData();
delay(5000);
SIM800ss.println("AT+SAPBR=3,1,"APN",""");//setting the APN,2nd parameter empty works for all networks
printSerialData();
delay(3000);
SIM800ss.println("AT+SAPBR=1,1");
printSerialData();
delay(1000);
SIM800ss.println("AT+HTTPINIT"); //init the HTTP request
printSerialData();
delay(10000);
String url="AT+HTTPPARA="URL","http://kapichet-edu.com/track/no_gps_network.php?tractorid="+deviceID+"&latitude="+latitude+"&longitude="+longitude+"&speed="+spd+"\"";
SIM800ss.println(url);// setting the httppara,
Serial.println(url) ;
//the second parameter is the website from where you want to access data
//printSerialData();
printSerialData();
delay(3000);
SIM800ss.println();
SIM800ss.println("AT+HTTPACTION=0");//submit the GET request
printSerialData();
delay(10000);
SIM800ss.println("AT+HTTPREAD");// read the data from the website you access
printSerialData();
delay(2000);
SIM800ss.println("AT+HTTPTERM");// terminate HTTP service
printSerialData();
}
float latitude, longitude;
uint16_t res_code,max_len=64;
sd_cardcon sd_cardcon(true); // Constructor
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mGps.begin(9600);
pinMode(D_STATUS,OUTPUT);
if (! SIM800.begin(4800)) {
Serial.println("Couldn't find SIM800L");
while (1);
}
Serial.println("SIM800L is OK");
delay(1000);
Serial.println("Registering to home network!");
net_status = SIM800.getNetworkStatus();
while(net_status != 1){
net_status = SIM800.getNetworkStatus();
delay(2000);
}
char ccid;
Serial.println("Registered to home network!");
//if(SIM800.get(&ccid))
// Serial.println(ccid);
delay(2000);
Serial.println("Initiating...");
}
String jas="12346799 gas";
void loop() {
sd_cardcon.getstring(jas);
// put your main code here, to run repeatedly:
tmpLat=flat;
tmpLng=flon;
dstBtw=0;
unsigned long start = millis();
String str="";
while (millis() - start < 2000)if (feedgps(2000))newdata = true;
mGps_lib.f_get_position(&flat, &flon, &age);
spd=mGps_lib.f_speed_kmph();
if((flat==TinyGPS::GPS_INVALID_F_ANGLE)|| (flon==TinyGPS::GPS_INVALID_F_ANGLE) ||(spd==TinyGPS::GPS_INVALID_F_SPEED)){
no_gps_network();
}
else
{
// if(tmpLat!=0 && tmpLng!=0) dstBtw=TinyGPS::distance_between(flat, flon, tmpLat, tmpLng);
// str="{"lat":""+ String (flat,6)+"","lng":""+ String (flon,6)+"", "speed":""+String(spd,2)+" kmph"}";
// Serial.println(str);
// Serial.print("Distance: "+ String(dstBtw));
//if((dstBtw>=MAX_DISTANCE_COVERED)|| (isStart==true))
//{
sync_data_to_server(String (flat,7),String (flon,7),String (spd,4));
tmpLat=flat;
tmpLng=flon;
//nas_sdcard.sd_card_send_data(spd);
// isStart=false;
//}
//newdata=false;
}
}