Here it is
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <ArduinoJson.h>
#include "DFRobot_SHT20.h"
#define SIM_PWR 12
String datee = "";
String timee = "";
float latt = 0;
float longg = 0;
int gnssnum = 0;
int glonassnum = 0;
int counter = 0;
int tempr = 0;
String getSplittedValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
int sendCommand(String cmd, String answer, int delay_time)
{
Serial1.println(cmd);
Serial.flush();
Serial1.flush();
delay(delay_time);
while(Serial1.available())
{
String ans = Serial1.readString();
if(ans.equals(answer))
{
return 1;
}
}
return 0;
}
void sendSingleCommand(String cmd, int delay_time)
{
Serial1.println(cmd);
delay(delay_time);
Serial.flush();
Serial1.flush();
}
void showMessage()
{
Serial1.flush();
Serial.flush();
while(Serial1.available())
{
Serial.println(Serial1.readString());
}
}
String showMessageS()
{
String mes = "";
Serial1.flush();
Serial.flush();
while(Serial1.available())
{
mes = Serial1.readString();
}
return mes;
}
void powerTrigger()
{
Serial.println("Device is enabling..");
digitalWrite(SIM_PWR, HIGH);
delay(3000);
digitalWrite(SIM_PWR,LOW);
}
void setGPRS()
{
int r = sendCommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\"", "OK", 150); //300
Serial1.flush();
Serial.flush();
r = sendCommand("AT+SAPBR=3,1,\"APN\",\"INTERNET\"","OK", 150); //300
r = sendCommand("AT+SAPBR=1,1", "OK", 150); //300
Serial.println("GPRS Enabled");
}
void closeGPRS()
{
int r = sendCommand("AT+SAPBR=0,1", "OK", 10); //300
Serial1.flush();
Serial.flush();
}
int getGPS()
{
sendSingleCommand("AT+CGNSINF", 350); //500
Serial1.flush();
Serial.flush();
//delay(500);
while(Serial1.available())
{
String tempAns = Serial1.readString();
// Serial.println(tempAns);
if(getSplittedValue(tempAns,',', 1).equals("1"))
{
String latS = getSplittedValue(tempAns,',',3);
String longS = getSplittedValue(tempAns,',',4);
String gnss = getSplittedValue(tempAns,',',15);
String glonass = getSplittedValue(tempAns,',',16);
latt = latS.toFloat();
longg = longS.toFloat();
gnssnum = gnss.toInt();
glonassnum = glonass.toInt();
Serial.print("GPS Updated: ");
Serial.print(latt);
Serial.print(",");
Serial.print(longg);
Serial.print(",");
Serial.print(gnssnum);
Serial.print(",");
Serial.print(glonassnum);
Serial.println();
return 1;
}
else
{
Serial.println("Cannot take GPS Signal");
return 0;
}
}
}
void updateDateTime()
{
Serial.flush();
Serial1.flush();
sendSingleCommand("AT+CCLK?", 150); //500
Serial.flush();
Serial1.flush();
//delay(500);
while(Serial1.available())
{
String tempAns = Serial1.readString();
datee = getSplittedValue(tempAns,',',0);
datee = datee.substring(datee.length()-8,datee.length());
timee = getSplittedValue(tempAns,',',1);
timee = timee.substring(0,8);
Serial.print("Date time updated: ");
Serial.print(timee);
Serial.print(",");
Serial.print(datee);
Serial.println();
}
}
void GPRSConfig()
{
powerTrigger();
delay(3000);
sendSingleCommand("AT", 10);
//delay(3000);
showMessage();
showMessage();
//delay(2000);
showMessage();
//delay(1000);
sendSingleCommand("AT+CLTS=1", 200);
//delay(1000);
showMessage();
sendSingleCommand("AT&W", 200);
//delay(1000);
powerTrigger();
delay(3000);
powerTrigger();
Serial.println();
// delay(5000);
showMessage();
//delay(3000);
sendSingleCommand("AT+CGNSPWR=1", 200);
//delay(2000);
showMessage();
//delay(100);
sendSingleCommand("AT+CGNSSEQ=\"GSV\"", 200);
//delay(2000);
//sendCommand("AT+CGNSINF", 10);
showMessage();
//sendCommand("AT+CGNSINF", 10);
showMessage();
//sendCommand("AT+CGNSINF", 10);
showMessage();
sendSingleCommand("AT+CGNSINF", 10);
showMessage();
//delay(5000);
showMessage();
//delay(10000);
}
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
delay(2000);
Serial.println("Device initializing...");
pinMode(SIM_PWR, OUTPUT);
initParts();
GPRSConfig();
Serial.println("Device initialized");
delay(30000);
Serial.println("Ready, Running");
delay(1000);
Serial.println("Configuring GPS");
int resp = getGPS();
while(resp!= 1)
{
resp = getGPS();
delay(1000);
}
setGPRS();
}
void loop()
{
Serial.println();
tempr = getGPS();
delay(1000);
}