Fikret
Published

SMS Controlled Relays and LEDs

Controlling something by SMS is awesome! 14 LEDs and 8 relays can be controlled by SMS.

IntermediateFull instructions provided10 hours1,764
SMS Controlled Relays and LEDs

Things used in this project

Hardware components

Arduino Due
Arduino Due
×1
Telit GSM Module GM862GPS
×1
PCM1602 LCD Display
×1
8 channel Relay Board
×1
Leds, Cable, Screws, Nuts, Plastic
×1
Texas Instruments LM2576
×1
ULN2803
×1
CH340E Usb to Serial
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

Relay and LED Control by SMS

Arduino
#include <LiquidCrystal.h>
const int rs = 37, en = 35, d4 = 33, d5 = 31, d6 = 29, d7 = 27;
#define led0 26
#define led1 28
#define led2 30
#define led3 32
#define led4 34
#define led5 36
#define led6 38
#define led7 40
#define led8 42
#define led9 44
#define ledA 46
#define ledB 48
#define ledC 50
#define ledD 52

#define rl0 53
#define rl1 51
#define rl2 49
#define rl3 47
#define rl4 45
#define rl5 43
#define rl6 41
#define rl7 39


int rl0Stat;
int rl1Stat;
int rl2Stat;
int rl3Stat;
int rl4Stat;
int rl5Stat;
int rl6Stat;
int rl7Stat;


//LCD backlight için pwm pini
#define pinDimm 8
//LCD backlight için pwm değeri
int dimm;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);



int led0Stat=0;
int led1Stat=0;
int led2Stat=0;
int led3Stat=0;
int led4Stat=0;
int led5Stat=0;
int led6Stat=0;
int led7Stat=0;
int led8Stat=0;
int led9Stat=0;
int ledAStat=0;
int ledBStat=0;
int ledCStat=0;
int ledDStat=0;

#define pinGsmOnOff 9
#define pinGsmState 10

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)
{
  Serial.print("cmd: ");
  Serial.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);
      }
    
    }
    Serial.print("sayac:");
    Serial.println(sayac);
  if (Serial3.available()>0)
  {
    ser3Data=Serial3.readString();
    Serial.print("Veri: ");
    Serial.println(ser3Data);
    if(ser3Data.startsWith("\r\n+CMGL:"))
    {
    //String smsBody=ser3Data;
    //smsBody.replace('\n','_');
    //smsBody.replace('\r','_');
    
    //Serial.print("smsBody:");
    //Serial.println(smsBody);
    telNum=ser3Data.substring(26,39);
    Serial.print("Tel Num:");
    Serial.println(telNum);
    
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("T:");
    lcd.print(telNum);
    lcd.setCursor(0,1);
    lcd.print("SMS:");
    lcd.print(ser3Data.substring(42,46));
    
//0
    if (ser3Data.substring(42,46)=="L0ON")
      {
        led0Stat=HIGH;
        digitalWrite(led0,led0Stat);
      } 
      if (ser3Data.substring(42,47)=="L0OFF")
      {
        led0Stat=LOW;
        digitalWrite(led0,led0Stat);
      }
//1
      if (ser3Data.substring(42,46)=="L1ON")
      {
        led1Stat=HIGH;
        digitalWrite(led1,led1Stat);
      } 
      if (ser3Data.substring(42,47)=="L1OFF")
      {
        led1Stat=LOW;
        digitalWrite(led1,led1Stat);
      }
//2
      if (ser3Data.substring(42,46)=="L2ON")
      {
        led2Stat=HIGH;
        digitalWrite(led2,led2Stat);
      } 
      if (ser3Data.substring(42,47)=="L2OFF")
      {
        led2Stat=LOW;
        digitalWrite(led2,led2Stat);
      }
//3
      if (ser3Data.substring(42,46)=="L3ON")
      {
        led3Stat=HIGH;
        digitalWrite(led3,led3Stat);
      } 
      if (ser3Data.substring(42,47)=="L3OFF")
      {
        led3Stat=LOW;
        digitalWrite(led3,led3Stat);
      }
//4
      if (ser3Data.substring(42,46)=="L4ON")
      {
        led4Stat=HIGH;
        digitalWrite(led4,led4Stat);
      } 
      if (ser3Data.substring(42,47)=="L4OFF")
      {
        led4Stat=LOW;
        digitalWrite(led4,led4Stat);
      }
//5
      if (ser3Data.substring(42,46)=="L5ON")
      {
        led5Stat=HIGH;
        digitalWrite(led6,led6Stat);
      } 
      if (ser3Data.substring(42,47)=="L5OFF")
      {
        led5Stat=LOW;
        digitalWrite(led5,led5Stat);
      }
//6
      if (ser3Data.substring(42,46)=="L6ON")
      {
        led6Stat=HIGH;
        digitalWrite(led6,led6Stat);
      } 
      if (ser3Data.substring(42,47)=="L6OFF")
      {
        led6Stat=LOW;
        digitalWrite(led6,led6Stat);
      }
//7
      if (ser3Data.substring(42,46)=="L7ON")
      {
        led7Stat=HIGH;
        digitalWrite(led7,led7Stat);
      } 
      if (ser3Data.substring(42,47)=="L7OFF")
      {
        led7Stat=LOW;
        digitalWrite(led7,led7Stat);
      }
//8
      if (ser3Data.substring(42,46)=="L8ON")
      {
        led8Stat=HIGH;
        digitalWrite(led8,led8Stat);
      } 
      if (ser3Data.substring(42,47)=="L8OFF")
      {
        led8Stat=LOW;
        digitalWrite(led8,led8Stat);
      }
//9
      if (ser3Data.substring(42,46)=="L9ON")
      {
        led9Stat=HIGH;
        digitalWrite(led9,led9Stat);
      } 
      if (ser3Data.substring(42,47)=="L9OFF")
      {
        led9Stat=LOW;
        digitalWrite(led9,led9Stat);
      }
//A
      if (ser3Data.substring(42,46)=="LAON")
      {
        ledAStat=HIGH;
        digitalWrite(ledA,ledAStat);
      } 
      if (ser3Data.substring(42,47)=="LAOFF")
      {
        ledAStat=LOW;
        digitalWrite(ledA,ledAStat);
      }
//B
      if (ser3Data.substring(42,46)=="LBON")
      {
        ledBStat=HIGH;
        digitalWrite(ledB,ledBStat);
      } 
      if (ser3Data.substring(42,47)=="LBOFF")
      {
        ledBStat=LOW;
        digitalWrite(ledB,ledBStat);
      }
//C
      if (ser3Data.substring(42,46)=="LCON")
      {
        ledCStat=HIGH;
        digitalWrite(ledC,ledCStat);
      } 
      if (ser3Data.substring(42,47)=="LCOFF")
      {
        ledCStat=LOW;
        digitalWrite(ledC,ledCStat);
      }
//D
      if (ser3Data.substring(42,46)=="LDON")
      {
        ledDStat=HIGH;
        digitalWrite(ledD,ledDStat);
      } 
      if (ser3Data.substring(42,47)=="LDOFF")
      {
        ledDStat=LOW;
        digitalWrite(ledD,ledDStat);
      }
//Röle Kontrol
//0
      if (ser3Data.substring(42,46)=="R0ON")
      {
        rl0Stat=HIGH;
        digitalWrite(rl0,rl0Stat);
      } 
      if (ser3Data.substring(42,47)=="R0OFF")
      {
        rl0Stat=LOW;
        digitalWrite(rl0,rl0Stat);
      }
//1
      if (ser3Data.substring(42,46)=="R1ON")
      {
        rl1Stat=HIGH;
        digitalWrite(rl1,rl1Stat);
      } 
      if (ser3Data.substring(42,47)=="R1OFF")
      {
        rl1Stat=LOW;
        digitalWrite(rl1,rl1Stat);
      }
//2
      if (ser3Data.substring(42,46)=="R2ON")
      {
        rl2Stat=HIGH;
        digitalWrite(rl2,rl2Stat);
      } 
      if (ser3Data.substring(42,47)=="R2OFF")
      {
        rl2Stat=LOW;
        digitalWrite(rl2,rl2Stat);
      }
//3
      if (ser3Data.substring(42,46)=="R3ON")
      {
        rl3Stat=HIGH;
        digitalWrite(rl3,rl3Stat);
      } 
      if (ser3Data.substring(42,47)=="R3OFF")
      {
        rl3Stat=LOW;
        digitalWrite(rl3,rl3Stat);
      }
//4
      if (ser3Data.substring(42,46)=="R4ON")
      {
        rl4Stat=HIGH;
        digitalWrite(rl4,rl4Stat);
      } 
      if (ser3Data.substring(42,47)=="R4OFF")
      {
        rl4Stat=LOW;
        digitalWrite(rl4,rl4Stat);
      }
//5
      if (ser3Data.substring(42,46)=="R5ON")
      {
        rl5Stat=HIGH;
        digitalWrite(rl5,rl5Stat);
      } 
      if (ser3Data.substring(42,47)=="R5OFF")
      {
        rl5Stat=LOW;
        digitalWrite(rl5,rl5Stat);
      }
//6
      if (ser3Data.substring(42,46)=="R6ON")
      {
        rl6Stat=HIGH;
        digitalWrite(rl6,rl6Stat);
      } 
      if (ser3Data.substring(42,47)=="R6OFF")
      {
        rl6Stat=LOW;
        digitalWrite(rl6,rl6Stat);
      }
//7
      if (ser3Data.substring(42,46)=="R7ON")
      {
        rl7Stat=HIGH;
        digitalWrite(rl7,rl7Stat);
      } 
      if (ser3Data.substring(42,47)=="R7OFF")
      {
        rl7Stat=LOW;
        digitalWrite(rl7,rl7Stat);
      }

      
      if (ser3Data.substring(42,46)=="Stat")
      {
        String smsText="Led States\r\n 0:" + String(led0Stat) + "\r\n1:" + String(led1Stat)+ "\r\n2:" + String(led2Stat)+ "\r\n3:" + String(led3Stat)+ "\r\n4:" + String(led4Stat)+ "\r\n5:" + String(led5Stat)+ "\r\n6:" + String(led6Stat)+ "\r\n7:" + String(led7Stat)+ "\r\n8:" + String(led8Stat)+ "\r\n9:" + String(led9Stat)+ "\r\nA:" + String(ledAStat)+ "\r\nB:" + String(ledBStat)+ "\r\nC:" + String(ledCStat) + "\r\nD:" + String(ledDStat)+"\r\n Relay States\r\n 0:" + String(rl0Stat)+ "\r\n1:" + String(rl1Stat)+ "\r\n2:" + String(rl2Stat)+ "\r\n3:" + String(rl3Stat)+ "\r\n4:" + String(rl4Stat)+ "\r\n5:" + String(rl5Stat)+ "\r\n6:" + String(rl6Stat)+ "\r\n7:" + String(rl7Stat);
        
        sendSms(telNum,smsText);
      }
   /*
      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(led0,OUTPUT);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  pinMode(led7,OUTPUT);
  pinMode(led8,OUTPUT);
  pinMode(led9,OUTPUT);
  pinMode(ledA,OUTPUT);
  pinMode(ledB,OUTPUT);
  pinMode(ledC,OUTPUT);
  pinMode(ledD,OUTPUT);

  pinMode(rl0,OUTPUT);
  pinMode(rl1,OUTPUT);
  pinMode(rl2,OUTPUT);
  pinMode(rl3,OUTPUT);
  pinMode(rl4,OUTPUT);
  pinMode(rl5,OUTPUT);
  pinMode(rl6,OUTPUT);
  pinMode(rl7,OUTPUT);

  pinMode(pinGsmOnOff,OUTPUT);
  pinMode(pinGsmState,INPUT);

  lcd.begin(16, 2);
  lcd.print("TOBB Fen Lisesi");
  dimm=100;
  //LCD backlight pwm
  analogWrite(pinDimm,dimm);
 
  
  Serial.begin(115200);
  delay(500);
  Serial3.begin(115200);
  delay(500);
  Serial.println("merhaba");
  gsmModuleCheck();
  processPlanner=0;
}

void loop() {
  // put your main code here, to run repeatedly:
  
  if (Serial3.available()>0)
  {
    data=Serial3.readString();
    Serial.print("GSM:");
    Serial.println(data);
    if (data.startsWith("\r\n+CMTI"))
    {
      Serial.println("SMS Alindi");
      Serial.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