m590 нет связи с мегой.

Ответить
findeler
Рядовой
Сообщения: 76
Зарегистрирован: 16.07.2016{, 08:31}
Репутация: 0
Откуда: Рязань

m590 нет связи с мегой.

#1

Сообщение findeler » 24.07.2016{, 16:42}

Проблема со связью.

Есть м590 модуль. Питание внешнее boot на землю. В сети регистрируется позвонить на него можно.

Скетч на меге:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(15, 14); // RX, TX
int ch = 0;
String val = "";
#define MASTER "+7XXXXXXXXXX" //укажите телефон хозяина

void setup()
{
Serial.begin(9600); //подключаем порт компьютера
Serial.println("GSM Neoway M590 example");
mySerial.begin(19200); //подключаем порт модема (при других скоростях не отвечает)
mySerial.println("ATI"); //вывести в терминал иноформацию о модеме
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);
mySerial.println("AT+CNMI=2,2"); //отображение смс в терминале сразу после приема (без этого сообщения молча падают в память)
}

void loop()
{
if (mySerial.available()) { //есть данные от GSM модуля
delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(10);
}
Serial.println(val); // дублируем сообщение в терминал

//----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и)
if (val.indexOf("+CMT") > -1) { //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING", трубку он не берет, но реагировать на факт звонка можно)
if (val.indexOf(MASTER) > -1) { //если СМС от хозяина
Serial.println("--- MASTER SMS DETECTED ---");
} else {
Serial.println("NO MASTER SMS");
}

//----------------------- поиск кодового слова в СМС (вообще эту часть надо поместить внутрь предыдущей, но если использовать кодовое слово не совпадающее с сообщениями модема, то не обязательно)
if (val.indexOf("sendme") > -1) { // если обнаружено кодовое слово
Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно)
sms("yes sir!", MASTER); // отвечаем смской
} else { // если другое слово или вообще пустое сообщение
Serial.println("no send you");
sms("no sir!", MASTER);
}
val = "";
}
}
}

void sms(String text, String phone) //процедура отправки СМС
{
Serial.println("SMS send started");
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS send complete");
delay(2000);
}

На мониторе порта только.
GSM Neoway M590 example и всё.

RX TX и менял местами, и менял пины. Поданы напрямую уровни по 5V.

плата м590 такая: http://s019.radikal.ru/i629/1601/81/fbb412a54cbe.jpg

Куда копать непонятно.
Вложения
3564597.jpg

findeler
Рядовой
Сообщения: 76
Зарегистрирован: 16.07.2016{, 08:31}
Репутация: 0
Откуда: Рязань

m590 нет связи с мегой.

#2

Сообщение findeler » 25.07.2016{, 12:35}

В плате конвертер логики есть. На входе уровни 3,6В Да с портами накосячил проверю.

Добавлено (25.07.2016, 10:30)
---------------------------------------------
Спасибо, модуль запустился. действительно на 115200. Буду копать дальше.

Добавлено (25.07.2016, 10:38)
---------------------------------------------
Всё заработало. Ну надо же было ступить, вчера весь день провозился. 2 платы пересобрал, шаманил. А ошибка банальная.

Добавлено (25.07.2016, 12:35)
---------------------------------------------
Всё работает но почему в мониторе порта на строки иницмализации
Serial.begin(115200); //подключаем порт компьютера
Serial.println("GSM Neoway M590 example");
Serial3.begin(115200); //подключаем порт модема (при других скоростях не отвечает)
delay(3000);
Serial3.println("AT+CFUN=1"); // по результатом тестов модемов m590 рестарт приводит к стабильности последующих ответов на комманды
delay(16000);
Serial3.println("AT+IFC=2,2"); //режим управления потоком в обе стороны. аппаратный.
delay(300);
Serial3.println("AT+ICF=3,1"); //устанавливает режим передачи (8/0/1, стоит по умолчанию и 1 - четный)
delay(300);
Serial3.println("AT+CLIP=1"); // АОН
delay(300);
Serial3.println("AT+CMGF=1"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial3.println("AT+CSCS=\"GSM\""); // gsm текст
delay(300);
Serial3.println("AT+CNMI=2,2,0,0,0"); // Настройка вывода смс в терминал сразу без сохранения
delay(300);
Serial3.println("ATS0=0"); // поднятие трубки в ручном режиме = не поднимать
delay(300);
Serial3.println("AT+CMGD=0,4"); // Стираем все смс
delay(1000);
}

отвечает так

GSM Neoway M590 example
AT+CFUN=1

OK
AT+IFC=2,2

OK
AT+ICF=3,1

OK
AT+CLIP=1

O

именно что О и всё.

findeler
Рядовой
Сообщения: 76
Зарегистрирован: 16.07.2016{, 08:31}
Репутация: 0
Откуда: Рязань

m590 нет связи с мегой.

#3

Сообщение findeler » 30.07.2016{, 08:30}

результат
GSM Neoway M590 example

AT+CFUN=1

OK
AT+CLIP=1

OK
AT+CMGF=1

OK
AT+CSCS="GSM"

на комманды не отвечает, да и не должен вроде. трансляции serial в serial3 не вижу в скетче.

Добавлено (25.07.2016, 13:49)
---------------------------------------------
кстати тоже, обрезано вроде.

Добавлено (25.07.2016, 14:10)
---------------------------------------------
Наблюдение.

Вот эту часть ответа:
AT+CFUN=1

OK
AT+CLIP=1

OK
AT+CMGF=1

OK
AT+CSCS="GSM"

Выдаёт одномоментно, я увеличил задержки с 300 до 1000 но пауз всё равно нет. Попробовал другие команды. Такое впечатление что переполняется буфер. Например на команду запроса всех возможных скоростей AT+IPR=? пишет только часть и...

GSM Neoway M590 example
AT+CFUN=1

OK
AT+IPR=?

+IPR: 2400,4800,9600,14400,19200,288

Скорости модема менял от 9600 до 115200 без разницы.

Добавлено (25.07.2016, 14:22)
---------------------------------------------
Да что то с буфером. поменял порядок команд.

Ответ такой.

GSM Neoway M590 example
AT+CFUN=1

OK
AT+CNMI=2,2,0,0,0

OK
AT+IPR=?

+IPR: 2400,4

Добавлено (25.07.2016, 14:32)
---------------------------------------------
проблема с выводом явно кроется в модуле инициализации setup.

void setup()
{
Serial.begin(9600); //подключаем порт компьютера
Serial.println("GSM Neoway M590 example");
Serial3.begin(9600); //подключаем порт модема (при других скоростях не отвечает)
delay(1000);
Serial3.println("AT+CFUN=1"); // по результатом тестов модемов m590 рестарт приводит к стабильности последующих ответов на комманды
delay(4000);
Serial3.println("AT+CNMI=2,2,0,0,0"); // Настройка вывода смс в терминал сразу без сохранения
delay(2000);
Serial3.println("AT+IPR=?"); // АОН
delay(2000);
Serial3.println("AT+CLIP=1"); // АОН
delay(1000);
Serial3.println("AT+CMGF=1"); // устанавливает текстовый режим смс-сообщения
delay(1000);
Serial3.println("AT+CSCS=\"GSM\""); // gsm текст
delay(1000);
Serial3.println("ATS0=0"); // поднятие трубки в ручном режиме = не поднимать
delay(1000);
Serial3.println("AT+CMGD=0,4"); // Стираем все смс
delay(1000);
}

вывод всех строк после "GSM Neoway M590 example"

происходит после общего времени всех задержек, сейчас у меня всех delay в setap 14000 и задержка ровно 14 сек.
до вывода
AT+CFUN=1

OK
AT+CNMI=2,2,0,0,0

OK
AT+IPR=?

+IPR: 2400,4

Добавлено (30.07.2016, 08:30)
---------------------------------------------
В общем пока не разобрался. Косяк там где написал.

Но на работоспособность судя по всему не влияет никак.
Последний раз редактировалось findeler 25.07.2016{, 14:12}, всего редактировалось 1 раз.

Ответить

Вернуться в «GSM / GPRS»