Непонятки с модулем GSM A6 mini
- Войдите на сайт для отправки комментариев
Чт, 03/06/2021 - 21:04
Доброго времени суток.Помогите новичку разобраться с 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 вольт.
В чем может быть проблема?
А аффтар скетча чо говорит?
UNO c A6 соеденены 4 проводами
+ ----- +
- ------ -
Он у Вас на голодном пайке.
Дайте ему хорошее питание (отдельный БП и толстый конденсатор как можно ближе к ногам модуля) и будет много счастья
UNO c A6 соеденены 4 проводами
+ ----- +
- ------ -
Он у Вас на голодном пайке.
Дайте ему хорошее питание (отдельный БП и толстый конденсатор как можно ближе к ногам модуля) и будет много счастья
все это опробовано и результатов не дало
В чем может быть проблема?
в первую очередь в том, что СофтСериал не тянет скорость 115200. Решение - взять Мегу или любую другую плату с более чем одним UART.
Второй вариант - отказаться от Монитора порта( зачем он вам?) и переключить модем на аппаратный Сериал Уно
Монитор мне совсем не нужен. Но я не очень представляю что нужно поменять в скетче . В исходнике общение между модулем и уно происходит посредством виртуального порта с помощью библиотеки SoftwareSerial.
Необходимо подключиться RX TX модуля к 0 и 1 выходам уно
Эксперементировал со скетчем меняя
gsmModule.println("AT+CSQ"); на Serial.println("AT+CSQ"); и так везде в скетче,( наверное это не правильно) но срабатывания на звонок не происходило вообще.
все это опробовано и результатов не дало
Откуда такая информация? Схему выкладывайте, что там опробовано.
И про скорость Вам правильно сказали. Лучше "монитор порта" посадить на софт-сериал через любую терминальную программу.
Если то, что написали выше для тебя тёмный лес, то можно
1. Обратиться со своими вопросами к автору скетча
2. Заказать проект за деньги
3. Учиться, учиться и еще раз учиться. И не на форумах.
Мы с Вами пили, может добрые друзья? Почему Вы мне «тычите»?
по существу- форумы для этого и созданы, тем более раздел «песочница»- что бы учиться
все это опробовано и результатов не дало
Откуда такая информация? Схему выкладывайте, что там опробовано.
И про скорость Вам правильно сказали. Лучше "монитор порта" посадить на софт-сериал через любую терминальную программу.
Источник 2 А, 5 В питает непосредственно модуль. Отдельными проводами от источника питается Уно. Напряжение померено на модуле 5,05 в. Осциллографом посмотрел- «иголок» нет. Просадки нет.
экспериментировал меняя
gsmModule.println("AT+CSQ"); на Serial.println("AT+CSQ"); и так везде в скетче,( наверное это не правильно)
это в принципе правильно, только менять gsmModule на Serial надо везде по коду, а все старые обращения к Serial убрать
Проще, конечно, это define сделать, но для вас это пока недоступно, как я думаю...
экспериментировал меняя
gsmModule.println("AT+CSQ"); на Serial.println("AT+CSQ"); и так везде в скетче,( наверное это не правильно)
это в принципе правильно, только менять gsmModule на Serial надо везде по коду, а все старые обращения к Serial убрать
Проще, конечно, это define сделать, но для вас это пока недоступно, как я думаю...
Так и пробывал.
Так и пробывал.
если в итоге не заработало - ищите другие ошибки. Связь по UART в нем нормально работает
Хотя, правда, я со звонками на А6 не связывался, но выход в инет и прием СМС у меня работало стабильно на нем.
Источник 2 А, 5 В питает непосредственно модуль. Отдельными проводами от источника питается Уно. Напряжение померено на модуле 5,05 в. Осциллографом посмотрел- «иголок» нет. Просадки нет.
Вы по русски уверенно понимаете? Вам же ясно сказано:
Схему выкладывайте
А Вы вместо схем - болтовню. Из Вашей болтовни, например, абсолютно не следует, что Вы земли БП и ардуины объединили вместе.
Сейчас Вы опять скажете
Так и пробывал.
Только давайте так. Если Вы "пробывали" схему - выкладывайте схему. Если Вы "пробывали" скетч - выкладывайте скетч. Их надо видеть, чтобы что-то сказать.
А если Вам лень рисовать схему и выкладывать скетч, то "пробывайте" сами и выносите всем мозг.
Источник 2 А, 5 В питает непосредственно модуль. Отдельными проводами от источника питается Уно. Напряжение померено на модуле 5,05 в. Осциллографом посмотрел- «иголок» нет. Просадки нет.
Вы по русски уверенно понимаете? Вам же ясно сказано:
Схему выкладывайте
А Вы вместо схем - болтовню. Из Вашей болтовни, например, абсолютно не следует, что Вы земли БП и ардуины объединили вместе.
Сейчас Вы опять скажете
Так и пробывал.
Только давайте так. Если Вы "пробывали" схему - выкладывайте схему. Если Вы "пробывали" скетч - выкладывайте скетч. Их надо видеть, чтобы что-то сказать.
А если Вам лень рисовать схему и выкладывать скетч, то "пробывайте" сами и выносите всем мозг.
Ну, вот, сразу ясно, что Вы неправильно запитали Ардуину, а то бы мы из Вас это ещё неделю клещами тащили. Вы говорили, что источник у Вас "Источник 2 А, 5 В". Та и питайте ардуину через пин "5В", для пина Vin нужно от 7В.
Также сразу видно, что Вы неправильно подключили RX и TX. В скетче у Вас
А подключили Вы куда?
Ну, вот, сразу ясно, что Вы неправильно запитали Ардуину, а то бы мы из Вас это ещё неделю клещами тащили. Вы говорили, что источник у Вас "Источник 2 А, 5 В". Та и питайте ардуину через пин "5В", для пина Vin нужно от 7В.
Также сразу видно, что Вы неправильно подключили RX и TX. В скетче у Вас
А подключили Вы куда?
Вы правы по поводу Vin
Вот скетч
Скорость удалось снизить,но проблему это не решило
вот монитор
Закоментировал в Loop строки включения и выключение АОН-срабатывание 100%
Правда в монитор кидает инфу о неправильных вызавх,хотя вызовов в этот момент и не было,но это уже не важно