Fikret
Published

SMS Location info with Arduino & Telit GM862GPS

A weekend project for control some devices via SMS.

IntermediateFull instructions provided5 hours1,531
SMS Location info with Arduino & Telit GM862GPS

Things used in this project

Hardware components

GSM Module Telit GM862GPS
×1
Arduino Due
Arduino Due
×1
ch340e usb to serial
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

Arduino Due Codes

Arduino
#define led1 53
#define led2 13

#define pinGsmOnOff 7
#define pinGsmState 6
String data;
String ser3Data;
int isGsmOn;
long int processPlanner;
int dataLen;
String smsNotice="+CMTI";
String telNum;
String enlemStr,boylamStr;
String smsBody;
int sayac,sure;
String temp;
char dirEW;
char dirNS;




String deg;
int mn;
int scnd;


long int dec;

int gun;
int ay;
int yil;
int sa;
int dk;
int sn;  

enum enumCmd
{
  eAT,
  eATFCLASS,
  eATGPSACP,
  eATE,
  eATCOPS,
  eATCNMI,
  eATCMGF,
  eATCMGD,
  eATCMGS,
  eATCMGL,
  eATCCLK,
  eATNITZ
  
  };

//typedef
struct command{
  int nr;
  String text;
  int sure;
  
};
command myCmd[20]
{
  eAT,{"AT"},300,
  eATFCLASS,{"AT+FCLASS=8"},300,
  eATGPSACP,{"AT$GPSACP"},1000,
  eATE,{"ATE0"},300,
  eATCOPS,{"AT+COPS?"},300,
  eATCNMI,{"AT+CNMI=2,1"},300,
  eATCMGF,{"AT+CMGF=1"},300,
  eATCMGD,{"AT+CMGD=1,4"},300,
  eATCMGS,{"AT+CMGS="},1000,
  eATCMGL,{"AT+CMGL=\"ALL\""},2000,
  eATCCLK,{"AT+CCLK"},300,
  eATNITZ,{"AT#NITZ=1,1"},300
  } ;
  
void sendCmd(int cmd)
{
  Serial2.print("cmd: ");
  Serial2.println(myCmd[cmd].text);
  Serial3.println(myCmd[cmd].text);
  //delay(myCmd[cmd].sure);
  delay(10);//minimal bir süre bekle
  sure=myCmd[cmd].sure/10;
  for (sayac=0;sayac<sure;sayac++)
  {
    if (Serial3.available()>0)
    {
      
      break;
      }
      else
      {
        delay(10);
      }
    
    }
    Serial2.print("sayac:");
    Serial2.println(sayac);
  if (Serial3.available()>0)
  {
    ser3Data=Serial3.readString();
    Serial2.print("Veri: ");
    Serial2.println(ser3Data);
    if(ser3Data.startsWith("\r\n+CMGL:"))
    {
    //String smsBody=ser3Data;
    //smsBody.replace('\n','_');
    //smsBody.replace('\r','_');
    
    //Serial2.print("smsBody:");
    //Serial2.println(smsBody);
    telNum=ser3Data.substring(26,39);
    Serial2.print("Tel Num:");
    Serial2.println(telNum);
    if (ser3Data.substring(42,45)=="1ON")
      {
        digitalWrite(led1,HIGH);
        
      } 
      if (ser3Data.substring(42,46)=="1OFF")
      {
        digitalWrite(led1,LOW);
      }
      if (ser3Data.substring(42,45)=="2ON")
      {
        digitalWrite(led2,HIGH);
      } 
      if (ser3Data.substring(42,46)=="2OFF")
      {
        digitalWrite(led2,LOW);
      }
      if (ser3Data.substring(42,45)=="Loc")
      {
        sendSms(telNum,smsBody);
      }
    }
    if(ser3Data.startsWith("\r\n$GPSACP:")  and ser3Data.length()>81)
    {
      enlemStr=ser3Data.substring(22,32);
      Serial2.println("enlemRAW: ");
      Serial2.println(enlemStr);
      
      deg=enlemStr.substring(0,2);
      mn=enlemStr.substring(2,4).toInt();
      scnd=enlemStr.substring(5,9).toInt();
      dirNS=enlemStr[9];
      dec = (mn *100000 +scnd* 10)/6;
      
      enlemStr=deg + "." + String(dec);

      //Serial2.println("enlem: ");
      //Serial2.print(enlemStr);
      //Serial2.println(dirNS);
      
      
      boylamStr=ser3Data.substring(33,44);

      //Serial2.println("boylamRAW: ");
      //Serial2.println(boylamStr);
      
      deg=boylamStr.substring(0,3);

      mn=boylamStr.substring(3,5).toInt();
      scnd=boylamStr.substring(6,11).toInt();
      dirEW=boylamStr[10];
      dec = (mn *100000 +scnd* 10)/6;
     
      boylamStr=deg + "." + String(dec);
      //Serial2.println("boylam: ");
      //Serial2.print(boylamStr);
      //Serial2.println(dirEW);


      smsBody="Konum: https://www.google.com.tr/maps/place/" + enlemStr + dirNS + "+" +boylamStr + dirEW;
      //Serial2.print("smsBody");
      //Serial2.println(smsBody);

          
      
    }

    
    if(ser3Data.startsWith("\r\n+CCLK:"))
    {
      //Serial2.println("+CCLK komutu");
      temp=ser3Data.substring(9,11);
      yil=temp.toInt();
      temp=ser3Data.substring(12,14);
      ay=temp.toInt();
      temp=ser3Data.substring(15,17);
      gun=temp.toInt();

      temp=ser3Data.substring(18,20);
      sa=temp.toInt();
      temp=ser3Data.substring(21,23);
      dk=temp.toInt();
      temp=ser3Data.substring(24,26);
      sn=temp.toInt();
      /*
      Serial2.print("gun:");
      Serial2.println(gun);
      Serial2.print("ay:");
      Serial2.println(ay);
      Serial2.print("yil:");
      Serial2.println(yil);
      Serial2.print("saat:");
      Serial2.println(sa);
      Serial2.print("dk:");
      Serial2.println(dk);
      Serial2.print("sn:");
      Serial2.println(sn);
      */
    }
    
    }
  
  }
  void sendSms(String num,String text)
  {
    int chrBrk=26;
    Serial3.print(myCmd[eATCMGS].text);
    Serial3.println(num);

    //Serial2.print(myCmd[eATCMGS].text);
    //Serial2.println(num);
    
    delay(myCmd[eATCMGS].sure);
    Serial3.print(text);
    Serial3.write(chrBrk);
    //Serial2.print(text);
    
    Serial2.println("SMS sent");
    
    
    }
void gsmModuleCheck()
{
  isGsmOn=digitalRead(pinGsmState);
  Serial2.print("GSM State: ");
  Serial2.println(isGsmOn);
  if (isGsmOn==0)
  { 
    digitalWrite(pinGsmOnOff,HIGH);
    delay(1500);
    digitalWrite(pinGsmOnOff,HIGH);
    
    Serial2.println("GSM is on now");
    delay(5000);
    
    
    }
    else
    {
      Serial2.println("GSM is already on");
    
      
    }
    sendCmd(eAT);
    sendCmd(eATFCLASS);
    sendCmd(eATE);
    sendCmd(eATCOPS);
    sendCmd(eATCMGF);
    sendCmd(eATCNMI);
    sendCmd(eATCMGD);
    sendCmd(eATNITZ);
 
    }
  
void setup() {
  // put your setup code here, to run once:
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(pinGsmOnOff,OUTPUT);
  pinMode(pinGsmState,INPUT);
  
  Serial2.begin(115200);
  delay(500);
  Serial3.begin(115200);
  delay(500);
  Serial2.println("merhaba");
  gsmModuleCheck();
  processPlanner=0;
}

void loop() {
  // put your main code here, to run repeatedly:
  
  if (Serial3.available()>0)
  {
    data=Serial3.readString();
    Serial2.print("GSM:");
    Serial2.println(data);
    if (data.startsWith("\r\n+CMTI"))
    {
      Serial2.println("SMS Alindi");
      Serial2.println(data.length());
      sendCmd(eATCMGL);
      delay(100);
      sendCmd(eATCMGD);
      
      
      }
    }
    
    if (processPlanner%5000==2500)
    {
      sendCmd(eATGPSACP);
    }
    if (processPlanner%5000==1500)
    {
      sendCmd(eATCCLK);
    }
    
   processPlanner++;
   delay(1);


   
}

Credits

Fikret

Fikret

24 projects • 37 followers
fidenetgaraj.blogspot.com

Comments