Непонятки с модулем GSM A6 mini

smail
Offline
Зарегистрирован: 24.02.2019

Доброго времени суток.Помогите новичку разобраться с gsm модулем.

Имеется UNO и GSM A6. вот скетч,найденый на просторах интернета

#include <SoftwareSerial.h>

#define PIN_RELE 13 // Пин реле
#define PIN_RX 11  // RX ком порт
#define PIN_TX 12  // TX ком порт

#define MASTER "79167777777"// Телефон хозяина
#define RELE_PAUSE 10000    // Задержка включённого реле

int ch = 0;
String val = "";             //переменная для хранения инф. с ком порта
boolean boolCall = false;

SoftwareSerial gsmModule(PIN_RX, PIN_TX);          // RX, TX ком порт

void setup() {
  pinMode(PIN_RELE, OUTPUT);
  digitalWrite(PIN_RELE, LOW);
  Serial.begin(115200);
  gsmModule.begin(115200);
  gsmModule.println("AT+CSQ");           //вывести в терминал уровень сигнала (если 99, то связи нет)
  delay(100);
  gsmModule.println("AT+CLIP=1");        //включаем АОН
  delay(100);
  gsmModule.println("AT+CMGF=1");        //режим кодировки СМС - обычный (для англ.)
  delay(100);
  gsmModule.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
  delay(100);
  gsmModule.println("AT+CNMI=2,2");      //отображение смс в терминале сразу после приема(без этого сообщения молча падают в память)
}

void loop() {
  if (gsmModule.available()) {          //есть данные от GSM модуля
    delay(100);                         //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
    while (gsmModule.available()) {     //сохраняем входную строку в переменную val
      ch = gsmModule.read();
      val += char(ch);
      delay(10);
    }
    Serial.println(val); // дублируем сообщение в терминал
    // определение факта приема СМС и сравнение номера(ов) с заданным(и)
    //if (val.indexOf("+CPAS: 0") > -1) {


    //}
    if (val.indexOf("RING") > -1) {          //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING",
      gsmModule.println("AT+CLIP=1");              // включаем АОН,
      //трубку он не берет, но реагировать на факт звонка можно)
      if (val.indexOf(MASTER) > -1) {        //если звонок от хозяина
        boolCall = true;
        gsmModule.println("AT+CLIP=0");            // выключаем АОН,
        delay(100);
        gsmModule.println("ATH0");                 // сбрасываем вызов
        Serial.println("--- MASTER RING DETECTED ---");
      } else {
        Serial.println("NO MASTER RING");
      }
    }
    val = "";
  }
  if (boolCall) {
    digitalWrite(PIN_RELE, HIGH);
    delay(RELE_PAUSE);
    digitalWrite(PIN_RELE, LOW);
    boolCall = false;
  }
}

Проблема в нестабильности работы.То есть из 10 входящих звонков с номера master происходит определение номера и соответственно срабатывание 5-6 раз. В остальных случаях выкидывает в монитор порта абру кадабру.Подозреваю что проблема в скорости 115200.Но дело в том что поменять скорость на меньшую не получается ни командой ни трехсекундной долбёшкой в модуль.

UNO c A6 соеденены 4 проводами 

+ ----- +

- ------ -

RX ------ TX

TX -------RX

Пробывал подключать + на PWR и RST на -     результатов не дало.Питается модуль от хороших 5 вольт.

В чем может быть проблема?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А аффтар скетча чо говорит?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

smail пишет:

UNO c A6 соеденены 4 проводами 

+ ----- +

- ------ -

Он у Вас на голодном пайке.

Дайте ему хорошее питание (отдельный БП и толстый конденсатор как можно ближе к ногам модуля) и будет много счастья

smail
Offline
Зарегистрирован: 24.02.2019

ЕвгенийП пишет:

smail пишет:

UNO c A6 соеденены 4 проводами 

+ ----- +

- ------ -

Он у Вас на голодном пайке.

Дайте ему хорошее питание (отдельный БП и толстый конденсатор как можно ближе к ногам модуля) и будет много счастья

все это опробовано и результатов не дало

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

smail пишет:

В чем может быть проблема?

в первую очередь в том, что СофтСериал не тянет скорость 115200.  Решение - взять Мегу или любую другую плату с более чем одним UART.

Второй вариант - отказаться от Монитора порта( зачем он вам?) и переключить модем на аппаратный Сериал Уно

smail
Offline
Зарегистрирован: 24.02.2019

Монитор мне совсем не нужен. Но  я не очень представляю что нужно поменять в скетче . В исходнике общение между модулем и уно происходит посредством виртуального порта с помощью библиотеки SoftwareSerial. 

Необходимо подключиться RX TX модуля к 0 и 1 выходам уно

Эксперементировал со скетчем меняя 

gsmModule.println("AT+CSQ");   на Serial.println("AT+CSQ");     и  так везде в скетче,( наверное это не правильно) но срабатывания на звонок не происходило вообще.

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

smail пишет:

все это опробовано и результатов не дало

Откуда такая информация? Схему выкладывайте, что там опробовано.

И про скорость Вам правильно сказали. Лучше "монитор порта" посадить на софт-сериал через любую терминальную программу.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Если то, что написали выше для тебя тёмный лес, то можно

1. Обратиться со своими вопросами к автору скетча

2. Заказать проект за деньги

3. Учиться, учиться и еще раз учиться.  И не на форумах. 

smail
Offline
Зарегистрирован: 24.02.2019

Мы с Вами пили, может добрые друзья? Почему Вы мне «тычите»?

по существу- форумы для этого и созданы, тем более раздел «песочница»- что бы учиться

smail
Offline
Зарегистрирован: 24.02.2019

ЕвгенийП пишет:

smail пишет:

все это опробовано и результатов не дало

Откуда такая информация? Схему выкладывайте, что там опробовано.

И про скорость Вам правильно сказали. Лучше "монитор порта" посадить на софт-сериал через любую терминальную программу.

Источник 2 А, 5 В питает непосредственно модуль. Отдельными проводами от источника питается Уно. Напряжение померено на модуле 5,05 в. Осциллографом посмотрел- «иголок» нет. Просадки нет.

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

smail пишет:

экспериментировал меняя 

gsmModule.println("AT+CSQ");   на Serial.println("AT+CSQ");     и  так везде в скетче,( наверное это не правильно)

это в принципе правильно, только менять gsmModule на Serial надо везде по коду, а все старые обращения к Serial убрать

Проще, конечно, это define сделать, но для вас это пока недоступно, как я думаю...

smail
Offline
Зарегистрирован: 24.02.2019

b707 пишет:

smail пишет:

экспериментировал меняя 

gsmModule.println("AT+CSQ");   на Serial.println("AT+CSQ");     и  так везде в скетче,( наверное это не правильно)

это в принципе правильно, только менять gsmModule на Serial надо везде по коду, а все старые обращения к Serial убрать

Проще, конечно, это define сделать, но для вас это пока недоступно, как я думаю...

Так и пробывал.

 

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

smail пишет:

Так и пробывал.

если в итоге не заработало - ищите другие ошибки. Связь по UART в нем нормально работает

Хотя, правда, я со звонками на А6 не связывался, но выход в инет и прием СМС у меня работало стабильно на нем.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

smail пишет:

Источник 2 А, 5 В питает непосредственно модуль. Отдельными проводами от источника питается Уно. Напряжение померено на модуле 5,05 в. Осциллографом посмотрел- «иголок» нет. Просадки нет.

Вы по русски уверенно понимаете? Вам же ясно сказано:

ЕвгенийП пишет:

Схему выкладывайте

А Вы вместо схем - болтовню. Из Вашей болтовни, например, абсолютно не следует, что Вы земли БП и ардуины объединили вместе.

Сейчас Вы опять скажете

smail пишет:

Так и пробывал.

Только давайте так. Если Вы "пробывали" схему - выкладывайте схему. Если Вы "пробывали" скетч - выкладывайте скетч. Их надо видеть, чтобы что-то сказать.

А если Вам лень рисовать схему и выкладывать скетч, то "пробывайте" сами и выносите всем мозг.

smail
Offline
Зарегистрирован: 24.02.2019

 

ЕвгенийП пишет:

smail пишет:

Источник 2 А, 5 В питает непосредственно модуль. Отдельными проводами от источника питается Уно. Напряжение померено на модуле 5,05 в. Осциллографом посмотрел- «иголок» нет. Просадки нет.

Вы по русски уверенно понимаете? Вам же ясно сказано:

ЕвгенийП пишет:

Схему выкладывайте

А Вы вместо схем - болтовню. Из Вашей болтовни, например, абсолютно не следует, что Вы земли БП и ардуины объединили вместе.

Сейчас Вы опять скажете

smail пишет:

Так и пробывал.

Только давайте так. Если Вы "пробывали" схему - выкладывайте схему. Если Вы "пробывали" скетч - выкладывайте скетч. Их надо видеть, чтобы что-то сказать.

А если Вам лень рисовать схему и выкладывать скетч, то "пробывайте" сами и выносите всем мозг.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, вот, сразу ясно, что Вы неправильно запитали Ардуину, а то бы мы из Вас это ещё неделю клещами тащили. Вы говорили, что источник у Вас "Источник 2 А, 5 В". Та и питайте ардуину через пин "5В", для пина Vin нужно от 7В.

Также сразу видно, что Вы неправильно подключили RX и TX. В скетче у Вас

#define PIN_RX 11  // RX ком порт
#define PIN_TX 12  // TX ком порт

А подключили Вы куда?

smail
Offline
Зарегистрирован: 24.02.2019

ЕвгенийП пишет:

Ну, вот, сразу ясно, что Вы неправильно запитали Ардуину, а то бы мы из Вас это ещё неделю клещами тащили. Вы говорили, что источник у Вас "Источник 2 А, 5 В". Та и питайте ардуину через пин "5В", для пина Vin нужно от 7В.

Также сразу видно, что Вы неправильно подключили RX и TX. В скетче у Вас

#define PIN_RX 11  // RX ком порт
#define PIN_TX 12  // TX ком порт

А подключили Вы куда?

Вы правы по поводу Vin

Вот скетч

#include <SoftwareSerial.h>

#define PIN_RELE 13 // Пин реле
#define PIN_RX 10  // RX ком порт
#define PIN_TX 11 // TX ком порт

#define MASTER "79998868410"// Телефон хозяина
#define RELE_PAUSE 10000    // Задержка включённого реле

int ch = 0;
String val = "";             //переменная для хранения инф. с ком порта
boolean boolCall = false;

SoftwareSerial gsmModule(PIN_RX, PIN_TX);          // RX, TX ком порт

void setup() {
  pinMode(PIN_RELE, OUTPUT);
  digitalWrite(PIN_RELE, LOW);
Serial.begin(9600);
gsmModule.begin(115200);
 gsmModule.println(F("ATZ+IPR=9600"));
    delay(500);
    gsmModule.end();
    delay(100);
    gsmModule.begin(9600);
    delay(100);
  gsmModule.println("AT+CSQ");           //вывести в терминал уровень сигнала (если 99, то связи нет)
  delay(100);
  gsmModule.println("AT+CLIP=1");        //включаем АОН
  delay(100);
  gsmModule.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
  delay(100);
  gsmModule.println("AT+CNMI=2,2");      //отображение смс в терминале сразу после приема(без этого сообщения молча падают в память)
}


void loop() {
  if (gsmModule.available()) {          //есть данные от GSM модуля
    delay(100);                         //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
    while (gsmModule.available()) {     //сохраняем входную строку в переменную val
      ch = gsmModule.read();
      val += char(ch);
      delay(10);
    }
  //  Serial.println(val); // дублируем сообщение в терминал
    // определение факта приема СМС и сравнение номера(ов) с заданным(и)
    //if (val.indexOf("+CPAS: 0") > -1) {


    //}
    if (val.indexOf("RING") > -1) {          //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING",
      gsmModule.println("AT+CLIP=1");              // включаем АОН,
      //трубку он не берет, но реагировать на факт звонка можно)
      if (val.indexOf(MASTER) > -1) {        //если звонок от хозяина
        boolCall = true;
        gsmModule.println("AT+CLIP=0");            // выключаем АОН,
        delay(100);
         gsmModule.println("ATA");
delay(500);
       gsmModule.println("ATH");                 // сбрасываем вызов
     Serial.println("--- MASTER RING DETECTED ---");
      }
   else {
     Serial.println("NO MASTER RING");
   }
    }
    val = "";
  }
  if (boolCall) {
    digitalWrite(PIN_RELE, HIGH);
    delay(RELE_PAUSE);
    digitalWrite(PIN_RELE, LOW);
    boolCall = false;
  }
}

Скорость удалось снизить,но проблему это не решило

вот монитор 

--- MASTER RING DETECTED ---
NO MASTER RING
NO MASTER RING
NO MASTER RING
NO MASTER RING
NO MASTER RING
--- MASTER RING DETECTED ---
3 звонка с разницей 10-15 сек
smail
Offline
Зарегистрирован: 24.02.2019

Закоментировал в Loop строки включения и выключение АОН-срабатывание 100%

Правда в монитор кидает инфу о неправильных вызавх,хотя вызовов в этот момент и не было,но это уже не важно

--- MASTER RING DETECTED ---
NO MASTER RING
--- MASTER RING DETECTED ---
NO MASTER RING
--- MASTER RING DETECTED ---
--- MASTER RING DETECTED ---
NO MASTER RING
--- MASTER RING DETECTED ---
--- MASTER RING DETECTED ---
NO MASTER RING
--- MASTER RING DETECTED ---
--- MASTER RING DETECTED ---
--- MASTER RING DETECTED ---
NO MASTER RING
 Пожалуй тему можно закрывать
Спасибо