GSM МОДУЛЬ Ai ThinkerTechnology для запуска webasto

voriag1
Offline
Зарегистрирован: 28.11.2015

Доброй вечер! У мнея появилась не большая пробляма с этим модемом. Раньше у меня стоял sim800 с ним проблем не было, сейчас поставил Ai ThinkerTechnology A6mini вот тут и начались танцы с бубном. Не могу считать смс из модема. Пожалуйста тыкните носом, что я не так делаю. Вот старый код, он полностью рабочий, хоть и кривой

#include <SoftwareSerial.h>

#include <avr/wdt.h>
int btnPin = 13;
String currStr = "";              // для цикла чтения смс
boolean isStringMessage = false; // Переменная принимает значение True, если текущая строка является сообщением
SoftwareSerial mySerial(10, 1); // RX, TX
int led=0;//  переменная состояния диода 
int pop=0; //Переменная числа попыток дозвона
unsigned long t = 0;
int webasto=0;

void setup () {
wdt_enable(WDTO_8S); // разрешение работы сторожевого таймера с тайм-аутом 8с  
pinMode (13, OUTPUT);   
Serial.begin(9600);    // включаем хардовое сериал соединение с шилдом, 
mySerial.begin(9600); // если хотим софтсериал, инклюдим библиотеку, прописываем пины, не забываем про джамперы на шилде
 delay(7800);
 wdt_reset();
 delay(7800);
 wdt_reset();
 delay(7800);
 wdt_reset();
 delay(7800);
 wdt_reset();
mySerial.print("AT+CFUN=1,1");         //перезагрузка модема на всякий
    delay(100);  
 mySerial.print("AT+CLIP=1");         //включаем АОН
    delay(100);  
  mySerial.print("AT+IFC=1, 1\r");       //устанавливает программный контроль потоком передачи данных
    delay(100);
    wdt_reset();
  mySerial.print("AT+CPBS=\"SM\"\r");    //открывает доступ к данным телефонной книги SIM-карты
    delay(100);
    mySerial.print("AT+GSMBUSY=0, 1\r");   //запрет всех входящих звонков
    delay(100);
  mySerial.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
    delay(300);
    wdt_reset();
  mySerial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти
       }

  void loop () 
  
  {
 wdt_reset();
readSMS ();// запускаем цикл чтения смс
led=digitalRead (13);
 
if (led == HIGH)
{
  t=t-1;//Добовляем еденицу времени
  }
 if (t>142236)
 {
  t=0;
 }
if (t<=0&&webasto==1) // если время прошло больше, чем заданно
  {
   digitalWrite (13, LOW);
   webasto=0;
   pop=5;
    }
  if((led == HIGH)||(led == LOW)&&pop>0)
    {
      call();
      wdt_reset();
    }
    }
//-------------------------------------------------
void call()
{
  if (pop>0) 
  {
      Serial.println("дозвон");

 mySerial.println("AT+CPAS");
  if (mySerial.find("0")) 
  
  delay(100);  
      
  mySerial.println("ATD+375255326321;"); // звоним по указаному номеру
  delay(100);
  if (mySerial.find("OK")) Serial.println("OK!");
  delay(6350);
  wdt_reset();
   delay(6350);
  wdt_reset();
  delay(6350);
  wdt_reset();
  pop=pop-1;
  if (mySerial.find("BUSY")||mySerial.find("NO CARRIER")||mySerial.find("NO ANSWER"))
  {
    pop=0;
  Serial.println("off");
  }
  }
   }
//-----------------------------------------------------------------
 void startOneSMS() //__________________Цикл подготовки модуля к отправке СМС-сообщений по номеру 
{
      mySerial.print("AT+CMGF=1\r");
      delay(100);
      mySerial.println("AT + CMGS = \"+375255326321\""); // (+79000000000 сдесь должен быть ваш номер )
      delay(100);
}
//---------------------------------------------------------------------------------
   void EndSMS ()//__________________Цикл подготовки модуля к заканчиваению отправки СМС-сообщений 
{
  delay(100);
   mySerial.println((char)26);                       // Команда отправки СМС
   delay(5000);
          mySerial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти, можно убрать эту строку
   delay (2000);
}
//-------------------------------------------------------------------------------------------------

void readSMS() //_____Цикл чтения входящих СМС-сообщений______________     
{
    if (!mySerial.available()) return;
 
    char currSymb = mySerial.read();    
    if ('\r' == currSymb)
       {
         if (isStringMessage)
           {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
              if (!currStr.compareTo("KOMANDA-ON-5"))  
               { digitalWrite (13, HIGH); 
               pop=5;webasto=1; t=21458;  
               mySerial.print("AT+CMGDA=«DEL ALL»\r");}

               if (!currStr.compareTo("KOMANDA-ON-10"))  
               { digitalWrite (13, HIGH); 
               pop=5;t=42071;webasto=1;
               mySerial.print("AT+CMGDA=«DEL ALL»\r");}

               if (!currStr.compareTo("KOMANDA-ON-15"))  
               { digitalWrite (13, HIGH); 
               pop=5;t=62695;webasto=1;
               mySerial.print("AT+CMGDA=«DEL ALL»\r");}


               if (!currStr.compareTo("KOMANDA-ON-20"))  
               { digitalWrite (13, HIGH); 
               pop=5;t=83284;webasto=1;
               mySerial.print("AT+CMGDA=«DEL ALL»\r");}


               if (!currStr.compareTo("KOMANDA-ON-25"))  
               { digitalWrite (13, HIGH); 
               pop=5;webasto=1;t=104225;
               mySerial.print("AT+CMGDA=«DEL ALL»\r");}


            if (!currStr.compareTo("KOMANDA-ON-30"))  
               { digitalWrite (13, HIGH); 
               t=122888;webasto=1;
               mySerial.print("AT+CMGDA=«DEL ALL»\r");}

               
              if (!currStr.compareTo("KOMANDA-ON"))//35минут  
               { digitalWrite (13, HIGH); 
               pop=5;t=142236;
               webasto=1;
               mySerial.print("AT+CMGDA=«DEL ALL»\r");} 
              //  // удаляем все смски из памяти, включаем встроенный светик, если шилд получает смс с текстом KOMANDA-ON
             
              
              else if  (!currStr.compareTo("KOMANDA-OFF"))   
              { digitalWrite (13, LOW); pop=5;webasto=0; 
              mySerial.print("AT+CMGDA=«DEL ALL»\r");} // удаляем все смски из памяти, можно убрать эту строку}  что-то делаем, например выключаем встроенный светик, если шилд получает смс с текстом KOMANDA-OFF
            isStringMessage = false;
           }
         else { if (currStr.startsWith("+CMT")) { isStringMessage = true;}} //если текущая строка начинается с "+CMT",то следующая строка является сообщением
        currStr = "";
      } 
    else if ('\n' != currSymb) { currStr += String(currSymb);}
}
//-----------------------------------------------------------------------

А вот что что модем выкидывает в сериал при отправке смс с командой (отправил 2 раза)

Ai Thinker Co.LTD
A6 
V03.03.2016бБ‚ЉHЁР©бAT+CPBS="S
+CTZV:17/02/23,17:11:28,+03
 
+CIEV: "MESSAGE",1
 
+CMT: "+375255326321",,"2017/02/23,20:11:27+03"
KOMANDA-ON-15
 
+CTZV:17/02/23,17:11:42,+03
 
+CIEV: "MESSAGE",1
 
+CMT: "+375255326321",,"2017/02/23,20:11:40+03"
KOMANDA-ON-15
 
использовал этот код для чтения сообщений с модема


#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
 // Open serial communications and wait for port to open:
 Serial.begin(9600);                  //подключаем порт компьютера
    mySerial.begin(9600);                //подключаем порт модема (при других скоростях не отвечает)
  mySerial.println("ATI");              //вывести в терминал иноформацию о модеме
  delay(100);
  mySerial.print("AT+CPBS=\"SM\"\r");    //открывает доступ к данным телефонной книги SIM-карты
delay(100);
mySerial.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
    delay(300);

  mySerial.println("AT+CPMS=""SM"",""SM"",""SM"""); 
    delay(100);
  mySerial.println("AT+CSQ");          //вывести в терминал уровень сигнала (если 99, то связи нет)
  delay(100);
  mySerial.println("AT+CLIP=1");        //включаем АОН
  delay(100);
  mySerial.println("AT+CMGF=1");        //режим кодировки СМС - обычный (для англ.)
  delay(100);
  mySerial.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
  delay(100);
}
void loop() // run over and over
{
 if (mySerial.available())
 Serial.write(mySerial.read());
 if (Serial.available())
 {
 while(Serial.available())
 {
 mySerial.write(Serial.read());
 }
 mySerial.println();
 }
}

 

arDubino
Offline
Зарегистрирован: 12.01.2017

команды просто для нового модема читать не пробовал?! может там нет таких просто. и другие или надо новую прошивку чтоб понимала.

voriag1
Offline
Зарегистрирован: 28.11.2015

arDubino пишет:

команды просто для нового модема читать не пробовал?! может там нет таких просто. и другие или надо новую прошивку чтоб понимала.

спасибо, разобрался. Дело было в командах