a6 GSM неприходят смс!

avolon
Offline
Зарегистрирован: 31.01.2017

Привет всем

Есть скетч

#include <SoftwareSerial.h>

#define GSM_RX 3  // пин RX на модуле подключаем к указаному пину на Ардуино TX
#define GSM_TX 2  // пин TX на модуле подключаем к указаному пину на Ардуино RX

SoftwareSerial gprsSerial(GSM_TX, GSM_RX); // установка контактовGSM_TX->RX и GSM_RX->TX для программного порта

#define RELE_ONE 6 // Пин для подключения реле 1
#define RELE_TWO 5  // Пин для подключения реле 2

String on_one = "on1";  // СМС которое включает данное реле ( можнопоменять на свое ) его и нужно слать
String off_one = "off1";  // СМС которое выключает данное реле ( можнопоменять на свое ) его и нужно слать

String on_two = "on2";  // СМС которое включает данное реле ( можнопоменять на свое ) его и нужно слать
String off_two = "off2";  // СМС которое выключает данное реле ( можнопоменять на свое ) его и нужно слать

String on_all = "on3";  // СМС которое включает данное реле ( можнопоменять на свое ) его и нужно слать
String off_all = "off3";  // СМС которое выключает данное реле ( можнопоменять на свое ) его и нужно слать
String reswitch_power = "rp3";  // СМС которое выключает, ждет 10сек.,ключает питание

// Устанавливаем номера администраторов ( номера с которых будутработать СМС с других номеров работать не будет )
const int allNumber = 3;  // Указываем кол-во номеров  ( которые ниже) админских, их кол-во сколько угодно от 1 и более
char* adminNumber[]={"+79297694384", "+79374225512", "+79374225512"};// Номер прописываем с "+"

String currStr = ""; // Переменная для хранения строки сообщения

boolean isStringMessage = false; // флаг на разрешение оброботки SMS

int i;
unsigned long timeInterval = 10L * 60L * 1000L;
unsigned long lastGetTime = 0;

//=======================================================================================================================
void setup()
{
     Serial.begin(9600);  // Для отладки выводит данные в монитор порта
      gprsSerial.begin(115200); // Скорость соеденения с модулем GSM (если не работает пробуем разные скоростя ) 4800 SIM800L
      delay(10000);
      gprsSerial.println("AT+IPR=9600");  // Переходим на скорость 9600
      delay(1000);
      gprsSerial.begin(9600);
      gprsSerial.println("AT+CLIP=1");  // Включаем АОН
      delay(1000);

     pinMode(RELE_ONE, OUTPUT);
     pinMode(RELE_TWO, OUTPUT);

    // Ставим их в истину так как реле включаются при подаче на них земли ( LOW)
    // Если используем чтото другое вместо реле что требует обратноготогда ставим значение LOW
     digitalWrite(RELE_ONE, LOW);
     digitalWrite(RELE_TWO, LOW);

     // настройка приема сообщений
     gprsSerial.print("AT+CMGF=1\r"); // устанавливаем текстовый режимсмс-сообщения
     delay(500); //
     gprsSerial.print("AT+IFC=1, 1\r"); // устанавливаем программныйконтроль потоком передачи данных
     delay(500);
     gprsSerial.print("AT+CPBS=\"SM\"\r"); // открываем доступ кданным телефонной книги SIM-карты
     delay(500);
     gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); // включает оповещение оновых сообщениях, новые сообщения приходят в следующем формате: +CMT:"<номер телефона>", "", "<дата, время>", ( +CMT:"+380xxxxxxxxx","","17/02/04,04:44:09+08" ) сразу за ним идет самосообщение с новой строки
     gprsSerial.print("AT+CSCS=\"GSM\"\r"); // устанавливаем кодировку
     //на следующей строчке с первого символа идёт содержимое сообщения
                             

                        
     delay(700);

 //sms("READY numm ADMIN", "+79374225512");delay(5000);///////////////////////////////////////////////////////////////////////////////////////////////
}
//====================================================================================================================

void loop()
{

                    if (millis() < lastGetTime) lastGetTime = 0;
                if (millis() - lastGetTime > timeInterval || lastGetTime == 0) {
                          lastGetTime = millis();

                         gprsSerial.print("AT");
                         gprsSerial.print("AT+CMGD=\"1,4\"\r"); //Удоляем все сообщение на SIM картеAT+CMGD=1,4\\r
Serial.print(lastGetTime);
                  }

    if (!gprsSerial.available()) { return; } // если не данных отмодуля SIM800l, то дальше не идем. Выходим из текущей итерации и сновазаходим в loop()

    char currSymb = gprsSerial.read(); // записываем в переменуюсимволы, которые получили от модуля.
Serial.print(currSymb);
     if ('\r' == currSymb){ // если получили символ перевода коректи вначало строки, это означает что передача сообщения от модулязавершена.

                  if (isStringMessage) { // если текущая строка – сообщение, то…
Serial.print(isStringMessage);

                  // currStr  в данном месте строка содержит самосообщение которое и будем сравнивать.


                       //--- первое реле
//--------------------------------------------------------------
                       if (!currStr.compareTo(on_one)) { // если текстсообщения совпадает с on_one то включаем реле
                           digitalWrite(RELE_ONE, LOW);
  Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );////////////////////////////////////////////////////////////////////////////////////
                           delay(2000);
                           sms("Rele_1_ON",adminNumber[i]);  // Номерпрописываем полностью с "+"
                           delay(2000);
                       }
                       if (!currStr.compareTo(off_one)) { // еслитекст сообщения совпадает с off_one то выключаем реле
                           digitalWrite(RELE_ONE, HIGH);
  Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );/////////////////////////////////////////////////////////////////////////////////////
                           delay(2000);
                           sms("Rele_1_OFF",adminNumber[i]);  // Номерпрописываем полностью с "+"
                       delay(2000);
                       }

//-----------------------------------------------------------------------------
                       //--- второе реле
//--------------------------------------------------------------
                       if (!currStr.compareTo(on_two)) { // если текстсообщения совпадает с on_two то включаем реле
                           digitalWrite(RELE_TWO, LOW);
  Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );///////////////////////////////////////////////////////////////////////////////////
                           sms("Rele_2_ON",adminNumber[i]);  // Номерпрописываем полностью с "+"
                       }
                       if (!currStr.compareTo(off_two)) { // еслитекст сообщения совпадает с off_two то выключаем реле
                           digitalWrite(RELE_TWO, HIGH);
  Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );///////////////////////////////////////////////////////////////////////////////
                           sms("Rele_2_OFF",adminNumber[i]);  // Номерпрописываем полностью с "+"
                       }

//-----------------------------------------------------------------------------
                       //--- все реле
//--------------------------------------------------------------
                       if (!currStr.compareTo(on_all)) { // если текстсообщения совпадает с on_all то включаем реле
                           digitalWrite(RELE_ONE, LOW);
                           digitalWrite(RELE_TWO, LOW);
  Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );////////////////////////////////////////////////////////////////////////////
                           sms("Rele_1_AND_2_ON",adminNumber[i]);  //Номер прописываем полностью с "+"
                       }
                       if (!currStr.compareTo(off_all)) { // еслитекст сообщения совпадает с off_all то выключаем реле
                           digitalWrite(RELE_ONE, HIGH);
                           digitalWrite(RELE_TWO, HIGH);
  Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );////////////////////////////////////////////////////////////////////////////////////
                           sms("Rele_1_AND_2_OFF",adminNumber[i]);  //Номер прописываем полностью с "+"
                       }

//-----------------------------------------------------------------------------
        // выключаем все реле, ждем 10сек., включаем все реле
                       if (!currStr.compareTo(reswitch_power)) { //если текст сообщения совпадает с reswitch_power
                           digitalWrite(RELE_ONE, HIGH);
                           digitalWrite(RELE_TWO, HIGH);
                           delay(10000);
                           digitalWrite(RELE_ONE, LOW);
                           digitalWrite(RELE_TWO, LOW);
   Serial.println("NOMER ADMIN - " + String(adminNumber[i]) );//////////////////////////////////////////////////////////////////////////////////////////////

                            sms("Tral_power_is_reswitched",adminNumber[i]);  // Номер прописываемполностью с "+"
                       }

//-----------------------------------------------------------------------------

                        isStringMessage = false;
                        gprsSerial.print("AT+CMGDA=\"DEL ALL\"\r"); //Удоляем все сообщение на SIM картеAT+CMGD=1,4\\r
                        delay(500);
                  }

             else {
                   if (currStr.startsWith("+CMT")){    // +CMT:"+380xxxxxxxxx","","17/02/04,04:44:09+08"  в данном месте строкасодержит такие данные
                   // если текущая строка начинается с "+CMT", тоследующая сообщение

                         for (i = 0; i <= allNumber; i++){ // числоallNumber - это количество заданных тел.номеров.

                               if (currStr.indexOf(adminNumber[i]) !=-1){   //сверяем номер с номером прешедним SMS если в полученнойстроке найдет нужную подстраку ( номер наш ) то вернет индекс началаискомой строки а если ненайдет строку то вернет  -1
                                      isStringMessage = true;
                                      break;
                               }
                         }

                  }
             }
     currStr = "";  // Очищаем строку для следущего сообщения
     }
     else if ('\n' != currSymb) { //  игнорируем второй символ впоследовательности переноса строки: \r\n , и
            currStr += String(currSymb); //дополняем текущую командуновым сиволом ( посимвольно собераем строку с сообщением )
     }
}
//===========================================================================================================================================

// Процедура для отправки СМС
void sms(String text, String phone) {
  gprsSerial.println("AT+CMGS=\"" + phone + "\"");
  delay(1000);
  gprsSerial.print(text);
  delay(300);
  gprsSerial.print((char)26);
  delay(300);
}


//======================================================================================

но смс так и не доходят

в мониторе

+CIEV: "SMSFULL",2

Нутром чую что забита симка а вот как ее почистить незнаю (( 

И что подправить чтоб они не копились??

Заранее блогадарен!

 
avolon
Offline
Зарегистрирован: 31.01.2017


+CIEV: "SMSFULL",2

Симку вставил в другой модуль а6 mini нет такого! Вопрос может ли смс храниться в модуле

b707
Offline
Зарегистрирован: 26.05.2017

У вас скетч для SIM900, а не для А6, примерно половина команд из процедуры setup несовместима с A6.   В частности, настройки сохранения СМС в скетче нет совсем - а без такой настройки модем вообще не сохраняет входящие СМС.

 

avolon
Offline
Зарегистрирован: 31.01.2017

b707 пишет:

У вас скетч для SIM900, а не для А6, примерно половина команд из процедуры setup несовместима с A6.   В частности, настройки сохранения СМС в скетче нет совсем - а без такой настройки модем вообще не сохраняет входящие СМС.

 

хм страноо но 10 шт на таком скетче крутиться ((

avolon
Offline
Зарегистрирован: 31.01.2017

b707 как с вами можно связаться?? Проконсультироваться по a6 mini?

мой скайп avolon2009

b707
Offline
Зарегистрирован: 26.05.2017

avolon пишет:

хм страноо но 10 шт на таком скетче крутиться ((

это достаточно занимательно, так как в скетче полно не вполне правильного или неудачного кода.

Например, строка 37 - SoftwareSerial не поддерживает скорость 115200

строка 39 - переключение скорости по команде IPR в модеме А6 не работает

В начале процедуры loop какие странные танцы с millis - переполнение, что ли обрабатываете? :)

 

В общем, на мой взгляд этот скетч работать не должен. Хотя может у вас A6 с какой-то новой прошивкой.

 

PS "Связывайтесь" со мной через форум - пишите вопросы тут. Заодно и другие может что посоветуют, на форуме несколько человек, активно работающих с этим модемом.

avolon
Offline
Зарегистрирован: 31.01.2017

millis - это посылает команду АТ чтоб не заснул модуль!

Модуль а6 мини Скетч прекрасно работает!
Но Goouuu Tech IOT-GA6 пришол не работает да еще пишет SMSFULL
!

avolon
Offline
Зарегистрирован: 31.01.2017

ТОгда подскажите как правильно его подключить к ардуино про мини ATmega 168 но так чтоб ноги 0 и 1 свободны так как на них уже сидит устройство!
Сейчас rx tx подключены к 3 и 2 -ой ноге!

b707
Offline
Зарегистрирован: 26.05.2017

avolon пишет:
millis - это посылает команду АТ чтоб не заснул модуль!

я имел в виду строку 75

b707
Offline
Зарегистрирован: 26.05.2017

avolon пишет:
ТОгда подскажите как правильно его подключить к ардуино про мини ATmega 168 но так чтоб ноги 0 и 1 свободны так как на них уже сидит устройство! Сейчас rx tx подключены к 3 и 2 -ой ноге!

подключайте через SoftwareSerial, скорость не выше 38400. Чтобы задать скорость модему, никакие команды не нужны, у него подстройка скорости автоматическая- просто шлите в порт команду АТ на выбранной скорости, пока модем не ответит ОК -

vengeance
Offline
Зарегистрирован: 01.10.2017

Удалось как то решить проблему +CIEV: "SMSFULL",2 в модуле Но Goouuu Tech IOT-GA6?

У меня т очно такая же проблема с этим модулем, скетч на сим900 работал хорошо, а тут память забилась смс и почистить не получается

avolon
Offline
Зарегистрирован: 31.01.2017

Подключил модуль а6 напрямую и дпл команду AT+CMGD= 1 тоесь удалить все сообщения.если не поможет то at&f сбросит все по умолчанию .както так

vengeance
Offline
Зарегистрирован: 01.10.2017

То есть эту команду надо каждый раз при включении модуля давать? Можно как то настроить чтобы смс не сохранялись а просто распечатывались?

avolon
Offline
Зарегистрирован: 31.01.2017

у меня она выполняется после всех действий.

vengeance
Offline
Зарегистрирован: 01.10.2017

Можешь скинуть свой скетч на почту ka35b2@gmail.com ? Не получается до ума довести этот Но Goouuu Tech IOT-GA6

b707
Offline
Зарегистрирован: 26.05.2017

vengeance пишет:

Можешь скинуть свой скетч на почту ka35b2@gmail.com ? Не получается до ума довести этот Но Goouuu Tech IOT-GA6

нафига вы купили эту хрень, на которую даже у китайцев нет документации?

С вашим уровнем знаний и такой квест. Мой совет - поменяйте модем на распространенный.

vengeance
Offline
Зарегистрирован: 01.10.2017

Я уже понял свою ошибку, заказан человеческий gsm модуль

avolon
Offline
Зарегистрирован: 31.01.2017

а какой человеческий?????

vengeance
Offline
Зарегистрирован: 01.10.2017

А6 который популярный

avolon
Offline
Зарегистрирован: 31.01.2017

это который без наклейки) Но на нем нельзя сохранить настройки ((А на том что у тя он может сохранять 

vengeance
Offline
Зарегистрирован: 01.10.2017

У меня который очень не стабильный

vengeance
Offline
Зарегистрирован: 01.10.2017

У меня был до этого sim900 gprs shield, вообще не глючил пока я его не сломал. Надо будет еще один купить, просто он дороже

avolon
Offline
Зарегистрирован: 31.01.2017

ссылку кинь на него.