I am using a gps receiver on pins 8&9 and gsm(sim800l) on pins 10&11.
I want to send the gps data("data" string in the code) to server using gsm.
The gsm keeps resetting itself thus preventing it from sending data to server.
How should I prevent this?
Using two software serials is causing this problem.
Thanks in advance.
#include <SoftwareSerial.h>
#include "TinyGPS++.h"
int a=0;
SoftwareSerial serial_connection(8,9);
SoftwareSerial myGsm(10,11);
TinyGPSPlus gps;
TinyGPSCustom Trackingangle(gps, "GPRMC", 8);
TinyGPSCustom Dir_NS (gps, "GPRMC", 4);
TinyGPSCustom Dir_EW (gps, "GPRMC", 6);
String data,tr,ew,ns;
void printSerialData()
{
while(myGsm.available()!=0)
Serial.write(myGsm.read());
}
void setup() {
serial_connection.begin(9600);
myGsm.begin(9600);
delay(500);
Serial.begin(9600);
}
void loop() {
serial_connection.listen();
delay(5000);
Serial.println("GPS Start");
{
data="";tr="";
while(Serial.available())//While there are characters to come from the GPS
{
gps.encode(serial_connection.read());//This feeds the serial NMEA data into the library one char at a time
}
if (Trackingangle.isUpdated())
{
tr=String(Trackingangle.value()); // Serial.println(tr);
}
if (Dir_EW.isUpdated())
{
ew=String(Dir_EW.value());
}
if (Dir_NS.isUpdated())
{
ns=String(Dir_NS.value());
}
if(tr!="")
{ if(gps.location.isUpdated())
{
data=String(gps.satellites.value());
data+=",";
data+=String(gps.location.lat(), 6);
data+=",";
data+=String(gps.location.lng(), 6);
data+=",";
data+=String(gps.speed.mph());
data+=",";
data+=String(gps.altitude.feet());
data+=",";
data+=String(gps.hdop.value());
data+=",";
data+=tr;
data+=",";
data+=ns;
data+=",";
data+=ew;
data+=",";
Serial.println("gps = "+data);
}
}
}
Serial.println("Final Data="+data);
//
Serial.println();
//
myGsm.listen();
delay(10000);
Serial.println("myGSM working");
if (a==0)
{
a=1;
myGsm.println("AT");
Serial.println("AT");
delay(1000);
printSerialData();
myGsm.println("AT+CSQ=?");
Serial.println("AT+CSQ=?");
delay(1000);
printSerialData();
myGsm.println("AT+CGSN");
Serial.println("AT+CGSN");
delay(1000);
printSerialData();
myGsm.println("AT+CGMM");
Serial.println("AT+CGMM");
delay(1000);
printSerialData();
}
myGsm.println("AT+CIPSHUT");
delay(1000);
printSerialData();
myGsm.println("AT+CIPMUX=0");
delay(2000);
printSerialData();
myGsm.println("AT+CGATT=1");
delay(1000);
printSerialData();
myGsm.println("AT+CSTT=\"www\",\"\",\"\"");//setting the APN,2nd parameter empty works for all networks
delay(5000);
printSerialData();
myGsm.println();
myGsm.println("AT+CIICR");
delay(6000);
printSerialData();
myGsm.println("AT+CIFSR"); //init the HTTP request
delay(2000);
printSerialData();
myGsm.println("AT+CIPSTART=\"TCP\",\"92.4.91.41\",\"6868\"");
delay(5000);
printSerialData();
delay(5000);
myGsm.println("AT+CIPSEND");
delay(2000);
printSerialData();
Serial.println("DATA= "+data);
myGsm.println(data);
delay(3000);
printSerialData();
myGsm.write(0x1A);
delay(3000);
printSerialData();
//
Serial.println();
//
delay(3000);
}