GSM реле на Arduino и GSM\GPRS shield SIM900

 

пока только код (

 

 

для GSMGPRS shield SIM900
/// GSM реле, для GSM\GPRS shield SIM900

// донат, https://money.yandex.ru/to/410012486954705

 
//// как подключен модем?
//#include <SoftwareSerial.h>                 // если программный
//SoftwareSerial gsm(7, 8); // RX, TX
//#define gsm Serial                           // если аппаратный в UNO
#define gsm Serial1                          // если аппаратный в леонардо

#define LED 13
 
#define TELMODE "70001112233"                // !! номер с которого принимаем команду
#define relay A2                             // !! выход на реле
 
#define pinBOOT 9                            // нога BOOT или K на модеме M590, на SIM900 это 9
 /////////////////////////
void setup() {
  delay(1000);                              //// !! чтобы нечего не повисало при включении
  
  gsm.begin(9600);                           /// незабываем указать скорость работы UART модема
//Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(pinBOOT, OUTPUT);                  /// нога BOOT на модеме
  pinMode(relay, OUTPUT);                    /// нога для реле
 
  delay(1000);                            
  digitalWrite(LED, HIGH);                   //  включаем лед  
                                           ///// включаем модем,
  gsm.println("AT");                         //  смотрим есть ли ответ от модема
  delay(100);
  if (!gsm.find("OK")){                      // если нет, дергаем ногу включения
    digitalWrite(pinBOOT, HIGH);            
    delay(1000);
    digitalWrite(pinBOOT, LOW);
  }
      // нужно дождатся включения модема и соединения с сетью
  delay(2000);    
 
  gsm.println("ATE0");                       // выключаем эхо  
  
  while(1){                                  // ждем подключение модема к сети
        gsm.println("AT+COPS?");
        if (gsm.find("+COPS: 0")) break;
           digitalWrite(LED, LOW);               // блымаем светодиодом
           delay(50);  
           digitalWrite(LED, HIGH);  
           delay(500); 
    }

//Serial.println("Modem OK"); 
   digitalWrite(LED, LOW);               // блымаем светодиодом
   delay(1500);  
   digitalWrite(LED, HIGH);
   delay(250); 
   digitalWrite(LED, LOW);   
  
}

void loop() {   
  
    if(gsm.find("RING")){                    // если нашли RING            
      while(1){                              // в цикле
       if (gsm.find(TELMODE)){               // ищим номер телефона, если нашли
         digitalWrite(relay, !digitalRead(relay));  // переключаем реле
//Serial.print("relay:"); 
//Serial.println(digitalRead(relay)); 
         break;                              // и выходим
       }  
       else{                                 // иначе 
         gsm.println("AT+CPAS");             // спрашиваем состояние модема   
         delay(50);
         if (gsm.find("+CPAS: 0")) break;    // и если он в "готовности", выходим из цикла
                                             //   если звонок в процессе, возвращает +CPAS: 3
          gsm.println("AT+CLCC");            // даем команду для АОН, нужно для SIM900
                                             // и крутимся дальше          
      }
     }
 
        gsm.println("ATH0");                 // сбрасываем вызов 

         digitalWrite(LED, LOW);             // сигнализируем об этом
         delay(500);  
         digitalWrite(LED, HIGH);
         delay(250); 
         digitalWrite(LED, LOW);   
   
    } 
    
}


для GSMGPRS Neoway M590
/// GSM реле, для M590

// донат, https://money.yandex.ru/to/410012486954705

 
//// как подключен модем?
//#include <SoftwareSerial.h>                 // если программный
//SoftwareSerial gsm(7, 8); // RX, TX
//#define gsm Serial                           // если аппаратный в UNO
#define gsm Serial1                          // если аппаратный в леонардо

#define LED 13
 
#define TELMODE "70001112233"                // !! номер с которого принимаем команду
#define relay A2                             // !! выход на реле
 
#define pinBOOT 5                            // нога BOOT или K на модеме M590
 /////////////////////////
void setup() {
  delay(1000);                              //// !! чтобы нечего не повисало при включении
  
  gsm.begin(9600);                           /// незабываем указать скорость работы UART модема
//Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(pinBOOT, OUTPUT);                  /// нога BOOT на модеме
  pinMode(relay, OUTPUT);                    /// нога для реле
 
  delay(1000);                            
  digitalWrite(LED, HIGH);                   //  включаем лед  
                                           ///// включаем модем,
  gsm.println("AT");                         //  смотрим есть ли ответ от модема
  delay(100);
  if (!gsm.find("OK")){                      // если нет, дергаем ногу включения
    digitalWrite(pinBOOT, LOW);            
    delay(1000);
    digitalWrite(pinBOOT, HIGH);
  }
      // нужно дождатся включения модема и соединения с сетью
  delay(2000);    
 
  gsm.println("ATE0");                  // выключаем эхо  
  
  while(1){                             // ждем подключение модема к сети
        gsm.println("AT+COPS?");
        if (gsm.find("+COPS: 0")) break;
           digitalWrite(LED, LOW);               // блымаем светодиодом
           delay(50);  
           digitalWrite(LED, HIGH);  
           delay(500); 
    }

Serial.println("Modem OK"); 
   digitalWrite(LED, LOW);               // блымаем светодиодом
   delay(1500);  
   digitalWrite(LED, HIGH);
   delay(250); 
   digitalWrite(LED, LOW);   
  
}

void loop() {   
  
    if(gsm.find("RING")){                    // если нашли RING
      gsm.println("AT+CLIP=1");              // включаем АОН, !для М590
            
      while(1){                              // в цикле
       if (gsm.find(TELMODE)){               // ищим номер телефона, если нашли
         digitalWrite(relay, !digitalRead(relay));  // переключаем реле
Serial.print("relay:"); 
Serial.println(digitalRead(relay)); 
         break;                              // и выходим
       }  
       else{                                 // иначе 
         gsm.println("AT+CPAS");             // спрашиваем состояние модема   
         delay(50);
         if (gsm.find("+CPAS: 0")) break;    // и если он в "готовности", выходим из цикла
                                             //   если звонок в процессе, возвращает +CPAS: 3
                                             // и крутимся дальше          
      }
     }
       
        gsm.println("AT+CLIP=0");            // выключаем АОН, !для м590
        delay(50);
        gsm.println("ATH0");                 // сбрасываем вызов 

         digitalWrite(LED, LOW);             // сигнализируем об этом
         delay(500);  
         digitalWrite(LED, HIGH);
         delay(250); 
         digitalWrite(LED, LOW);   
   
    } 
    
}