Вложений: 1 
		
		
	Цитата: 
	
	
		
			 
			
				
					Сообщение от Xellow
					(Сообщение 382189)
				 
				Никто не делал что то подобное? Или может в интернете натыкался? 
			
			 
		 | 
	 
	 
 Модуль SIM800L очень надежный, простой и не требует сложных манипуляций. Единственное требование- это к  питанию - от 3.7В до 4.2В. Пользуюсь такими-очень доволен.Ниже несколько скетчей - может пригодятся. 
 
Один с запросом баланса на СИМ и триггером включения канала по звонку.
 
	PHP код: 
	
		 
		
		
			
#include <SoftwareSerial.h> #include <Bounce.h> String currStr = ""; SoftwareSerial gprsSerial(2, 3); String nomber_Phone = "";//Строка содержит номер телефона Bounce bouncer = Bounce(5, 40); //создаем экземпляр класса Bounce для 5 вывода //String currStr1 = "";//Строка содержит текущую строку, полученую от сим модуля. char data;//Содержит символ полученый от сим модуля. String str_1  = "", number  = ""; // str_1 - сообщение, number - телефонный номер звонившего
 
   void setup() {    pinMode(9, OUTPUT); //пин к которому подключен светодиод   pinMode(5, INPUT_PULLUP);   //переключаем 5 вывод в режим входа (от SIM модуля)   Serial.begin(9600);   gprsSerial.begin(9600);   //   Настраиваем приём сообщений    //   Между командами даём время на их обработку
    gprsSerial.println("AT");   delay(500);   Serial.println("AT+CMGD=4");//Удаляем всё SMS которые могут содержаться на сим карте.      gprsSerial.println("ATE0");                // выключаем эхо
    delay(100);
     gprsSerial.println("AT+CLIP=1");                // Включаем АОН
    delay(100);
   gprsSerial.println("AT+CSCS=\"GSM\"");          // Режим кодировки текста = GSM (только англ.)
    delay(100);
    gprsSerial.println("AT+CNMI=2,2");              // Текст смс выводится в com-порт
    delay(100);   gprsSerial.println("AT+CSQ");// Проверяем уровень сигнала     delay(800);
   gprsSerial.println("AT+CMGF=1"); //устанавливает текстовый режим смс-сообщения   delay(300);
    gprsSerial.println("AT+IFC=1,1"); //устанавливает программный контроль потоком передачи данных    delay(300);
    gprsSerial.print("AT+CPBS=");//открывает доступ к данным телефонной книги   gprsSerial.print((char)34);   gprsSerial.print("SM"); // SIM-карты   gprsSerial.print((char)34);   gprsSerial.println("");   //    gprsSerial.print((char)13);   delay(300);
    gprsSerial.println("AT+CNMI=1,2,2,1,0");//включает оповещение о новых сообщениях,    //новые сообщения приходят в следующем формате:   // +CMT: "<номер телефона>", "", "<дата, время>",    //а на следующей строчке с первого символа идёт содержимое сообщения   delay(300);  balance();   }
 
  void loop() { { if (Serial.available())   gprsSerial.write(Serial.read());   // если поступил звонок   if (bouncer.update())   {        if (bouncer.read()==0)     {     digitalWrite(9, HIGH); //включить светодиод     gprsSerial.println("ATD +7981*******;");   //показать номер номер телефона     delay(15000);     gprsSerial.println("ATH0");     digitalWrite(9, LOW);   //выключить светодиод      }     }      if (gprsSerial.available()) // если пришло что то от GSM модуля, то вызываем обработчик   {     response_on_dial();   } }
 
 
  //++++Запрос баланса+++// {   if (gprsSerial.available()){     char currSymb = gprsSerial.read();     if ('\r' == currSymb) {  //если символ перевод каретки       if  (currStr.startsWith("+CUSD: 0,")) {         int zzz = currStr.indexOf("UAH");         String balance=currStr.substring(10,zzz-3); //баланс на сим карте         Serial.print(balance);         smsSendAlarm( currStr);       }       currStr = "";     }      else if ('\n' != currSymb) { //если символ НЕ новая строка       currStr += String(currSymb);     }             } } } //процедура отправки СМС void smsSendAlarm(String text)  {     String NBoss = "7981*******"; // вместо звездочек вписать номер телефона     gprsSerial.println("AT+CMGS=\"" + NBoss + "\"");  //Отправляем на GSM комманду отправка смс-номер     NBoss = "";                                //Очищаем перемунную     delay(300);                                //Делаем задержку на передачу комманды     gprsSerial.print(text);                           //Отправляем на GSM комманду отправка смс-текст     text = "";                                 //Очищаем перемунную     delay(500);                                //Делаем задержку на передачу комманды    gprsSerial.print((char)26);                       //Отправляем на GSM комманду отправка смс!     delay(5000);                               //Делаем задержку отправку смс      } void balance () {
  gprsSerial.print("AT+CUSD=1,"); gprsSerial.print('"'); gprsSerial.print("#100#"); gprsSerial.println('"');
  }
  // Обработчик входящего вызова  void response_on_dial() {   delay(500);   while (gprsSerial.available())   {     char c  = gprsSerial.read();     Serial.write(c);     str_1  +=  c; // загоняем в str_1 сообщение от модуля   }   // Находим в строке "+7981" и выдёргиваем из строки номер телефона   if (str_1.startsWith("RING", 2))   {     int index_number = str_1.lastIndexOf("+7981");     if (index_number != -1)     {       number  = str_1.substring(index_number, (index_number + 13));       // Пришел вызов в номера "number", далее пишем, что делаем       String str_2  = "Ring!!!"  + number;       Serial.println(str_2);       delay(3000);       gprsSerial.println("ATH0"); // сбрасываем вызов АТ-командой "АТН"           if(digitalRead(9) == LOW)       {Serial.println("Led ON");     digitalWrite(9,HIGH); // инвертируем выход led            }     else      {     digitalWrite(9,LOW);     Serial.println("Led OFF");     }     }   }   str_1 = ""; } 
 
		 
		
		 
	 
 Второй просто триггер.
 
	PHP код: 
	
		 
		
		
			
#include <SoftwareSerial.h> //#include <EEPROM.h> #include <Bounce.h> String nomber_Phone = "";//Строка содержит номер телефона. далее Разрешенный номер.  SoftwareSerial mySerial(2, 3); // RX, TX  +,0,3,2,- (3-3, 2-2) Bounce bouncer = Bounce(5, 40); //создаем экземпляр класса Bounce для 5 вывода String currStr = "";//Строка содержит текущую строку, полученую от сим модуля. char data;//Содержит символ полученый от сим модуля. String str_1  = "", number  = ""; // str_1 - сообщение, number - телефонный номер звонившего     void setup()   {    pinMode(9, OUTPUT);   pinMode(5, INPUT_PULLUP);   //переключаем 5 вывод в режим входа   //digitalWrite(5, HIGH);  //включаем на нем подтягивающий резистор     pinMode(13, OUTPUT);    Serial.begin(19200);  //Скорость порта для связи Arduino с компьютером   //Serial.println("Goodnight moon!");   mySerial.begin(19200);  //Скорость порта для связи Arduino с GSM модулем   mySerial.println("AT");   delay(500);   Serial.println("AT+CMGD=4");//Удаляем всё SMS которые могут содержаться на сим карте.     mySerial.println("ATE0");                // выключаем эхо
    delay(100);
    mySerial.println("AT+CLIP=1");                // Включаем АОН
    delay(100);
    mySerial.println("AT+CMGF=1");                // Формат СМС = ASCII текст
    delay(100);
   mySerial.println("AT+CSCS=\"GSM\"");          // Режим кодировки текста = GSM (только англ.)
    delay(100);
    mySerial.println("AT+CNMI=2,2");              // Текст смс выводится в com-порт
    delay(100);  mySerial.println("AT+CSQ");// Проверяем уровень сигнала     delay(800);                void loop()  {   if (Serial.available())   mySerial.write(Serial.read());   if (bouncer.update())   {        if (bouncer.read()==0)     {     digitalWrite(9, HIGH);     mySerial.println("ATD +7981*******;");   //т     delay(15000);     mySerial.println("ATH0");     digitalWrite(9, LOW);         }     }      if (mySerial.available()) // если пришло что то от GSM модуля, то вызываем обработчик   {     response_on_dial();   } } // Обработчик входящего вызова  void response_on_dial() {   delay(500);   while (mySerial.available())   {     char c  = mySerial.read();     Serial.write(c);     str_1  +=  c; // загоняем в str_1 сообщение от модуля   }   // Находим в строке "+7981" и выдёргиваем из строки номер телефона   if (str_1.startsWith("RING", 2))   {     int index_number = str_1.lastIndexOf("+7981");     if (index_number != -1)     {       number  = str_1.substring(index_number, (index_number + 13));       // Пришел вызов в номера "number", далее пишем, что делаем       String str_2  = "Ring!!!"  + number;       Serial.println(str_2);       delay(3000);       mySerial.println("ATH0"); // сбрасываем вызов АТ-командой "АТН"           if(digitalRead(9) == LOW)       {Serial.println("Led ON");     digitalWrite(9,HIGH); // инвертируем выход led      }     else      {     digitalWrite(9,LOW);     Serial.println("Led OFF");     }     }   }   str_1 = ""; } 
 
		 
		
		 
	 
 
Программки давнишние - уже не помню, что у самого залито... Но точно рабочие. Вот несколько ссылок на соответствующие темы.  Здесь,  здесь,  здесь,  еще.  
	 |