GSM модуль - управляем Ардуино с телефона

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#1 Дим » 11 января 2021, 22:24

В данной теме буду оставлять наработки для GSM модуля.
Примерная схема
Изображение

Код: Выделить всё

#include <SoftwareSerial.h>
#define LEDPOISK 8 // индикатор поиска сети
#define LEDSIGNAL 12 // индикатор нагрузки
#define TELON1 "79999999991"                       // 1 номен телефона для команды ВКЛ
#define TELON2 "79999999992"                       // 2 номен телефона для команды ВКЛ

#define TELOFF1 "79111111111"                      // 1 номен телефона для команды ВЫКЛ
#define TELOFF2 "79111111112"                      // 2 номен телефона для команды ВЫКЛ
SoftwareSerial mySerial(10, 11); 

void setup
() 
{
  Serial.begin(9600);  
  mySerial
.begin(9600);
  delay(2000); //время на инициализацию модуля
  Serial.println("GSM NEOWAY");
  pinMode(LEDPOISK,OUTPUT);
  pinMode(LEDSIGNAL, OUTPUT);
  delay(2000);  // нужно дождатся включения модема и соединения с сетью
  while(1){                              // ждем подключение модема к сети
    mySerial.println("AT+COPS?");
    if (mySerial.find ("+COPS: 0")) break;
      digitalWrite(LEDPOISK, LOW);               // мигаем светодиодом индикатор поиска сети
      delay(50);  
      digitalWrite
(LEDPOISK, HIGH);  
      delay
(500); 
    
}
  digitalWrite(LEDPOISK, LOW);  // выключаем индикатор поиска сети
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop() 
{
  if(mySerial.available()) //если модуль что-то послал
  {  
    char ch 
= ' ';
    String val = "";
    while(mySerial.available()) 
    
{  
      ch 
= mySerial.read();
      val += char(ch); //собираем принятые символы в строку
      delay(5);
    }
    Serial.print("Neo send> ");
    Serial.println(val);
    
    if
(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
    { 
      if
(val.indexOf(TELON1)  > -|| (TELON2) > -1) // НОМЕР ВКЛ, с которого Вы будете звонить на модуль
      {  
        Serial
.println("Call my phone 1");
        mySerial.println("ATH");  //разрываем связь
        Serial.println("Disconnection");
        delay(3000);
        digitalWrite( LEDSIGNAL, HIGH ); //ВКЛ светодиод нагрузки
        Serial.println("ВКЛ светодиод");
      }
        
      if
(val.indexOf(TELOFF1) > -|| (TELOFF2) > -1) // НОМЕР ВЫКЛ, с которого Вы будете звонить на модуль
      {  
        Serial
.println("Call my phone 2");
        mySerial.println("ATH");  //разрываем связь
        Serial.println("Disconnection");
        delay(3000);
        digitalWrite( LEDSIGNAL, LOW ); //ВЫКЛ светодиод нагрузки
        Serial.println("ВЫКЛ светодиод");
      }
      else //Если чужой номер
      {
        Serial.println("NO MI TEL");
        mySerial.println("ATH");  //разрываем связь
      }
    }
  } 
  
}

При звонке с одного номера - TELON1 или TELON2 включается нагрузка, а с другого - TELOFF1 или TELOFF2 выключается. К пин 8 подключен светодиод - индикатор поиска сети.
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#2 Дим » 18 января 2021, 22:50

Код: Выделить всё

#include <SoftwareSerial.h>
const float LedPoisk 9;                             // светодиод индикатора поиска сети
const float PinRele 12;                             // пин реле
int StatRele 0;                                     // вкл или выкл реле
/*const float TelOn1 = 79999999991;                     // 1 номер телефона для команды ВКЛ
const float TelOn2 = 79999999992;                     // 2 номер телефона для команды ВКЛ
const float TelOff1 = 79111111111;                    // 1 номер телефона для команды ВЫКЛ
const float TelOff2 = 79111111112;        */            // 2 номер телефона для команды ВЫКЛ
#define TelOn1 "79999999991"    
#define TelOn2 "79999999992"
#define TelOff1 "79111111111"
#define TelOff2 "79111111112"                   
SoftwareSerial mySerial(1011); 

void setup() 
{
  
Serial.begin(9600);  
  
mySerial.begin(9600);
  
delay(2000);                                        // время на инициализацию модуля
  
Serial.println("GSM NEOWAY");
  
pinMode(LedPoisk,OUTPUT);
  
pinMode(PinReleOUTPUT);                           // устанавливает режим работы - выход
  
digitalWrite(PinReleHIGH);                        // изначально ВЫКЛ реле
  
delay(2000);                                        // нужно дождатся включения модема и соединения с сетью
  
while(1){                                           // ждем подключение модема к сети
    
mySerial.println("AT+COPS?");
    if (
mySerial.find ("+COPS: 0")) break;
      
digitalWrite(LedPoiskHIGH);                   // мигает светодиод индикатора поиска сети
      
delay(100);  
      
digitalWrite(LedPoiskLOW);   
    }
  
digitalWrite(LedPoiskLOW);                        // выключаем светодиод индикатора поиска сети
  
Serial.println();
  
Serial.println("Turn on AOH:");
  
mySerial.println("AT+CLIP=1");                      // включить АОН
  
delay(100);
  
// ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop() 
{
  if(
mySerial.available())                            //если модуль что-то послал
  
{  
    
char ch ' ';
    
String val "";
    while(
mySerial.available()) 
    {  
      
ch mySerial.read();
      
val += char(ch);                                //собираем принятые символы в строку
      
delay(5);
    }
    
Serial.print("Neo send> ");
    
Serial.println(val);
    
    if(
val.indexOf("RING") > -1)                      //если есть входящий вызов, то проверяем номер
    

      if(
val.indexOf(TelOn1)  > -|| (TelOn2) > -1)  // НОМЕР ВКЛ, с которого Вы будете звонить на модуль
      
{  
        if(
StatRele == 0)
        {
        
Serial.println("Call my phone 1");
        
mySerial.println("ATH");                      //разрываем связь
        
Serial.println("Disconnection");
        
delay(3000);
        
digitalWritePinReleLOW);                  //ВКЛ реле
        
StatRele 1;
        
Serial.println("ВКЛ светодиод");
        }
      }      
      if(
val.indexOf(TelOff1) > -|| (TelOff2) > -1// НОМЕР ВЫКЛ, с которого Вы будете звонить на модуль
      

        if(
StatRele == 1)
        {  
        
Serial.println("Call my phone 2");
        
mySerial.println("ATH");                      //разрываем связь
        
Serial.println("Disconnection");
        
delay(3000);
        
digitalWrite(PinReleHIGH);                  //ВЫКЛ реле
        
StatRele 0;
        
Serial.println("ВЫКЛ светодиод");
        }
      }
    
/*  else //Если чужой номер
      {
        Serial.println("NO MI TEL");
        mySerial.println("ATH");                      //разрываем связь
      }  */
    
}
  }   


При звонке с одного номера - TelOn1 или TelOn2 сбрасывается звонок и включается нагрузка (реле), если повторно позвонить - просто будет идти вызов. С другого телефона - TelOff1 или TelOff2 так же сбрасывается звонок и выключается нагрузка (реле), а если повторно позвонить - просто будет идти вызов. К пин 9 подключен светодиод - индикатор поиска сети, который перестает мигать после регистрации модуля в сети.
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость