Нет связи neoway 590
- Войдите на сайт для отправки комментариев
Пнд, 13/06/2016 - 14:51
#include <SoftwareSerial.h>
SoftwareSerial modem(1, 0); // на контроллере RX, TX
void setup(){
pinMode(48, OUTPUT);
Serial.begin(9600);
modem.begin(9600);
Serial.print("M590E Test");
delay(2000);
digitalWrite(48, LOW);
delay(1000);
digitalWrite(48, HIGH);
}
void loop () {
while (modem.available() > 0)
Serial.write(modem.read());
while (Serial.available() > 0)
modem.write(Serial.read());
}
Модем neoway подклчил к меге на 0.1 порты все по инструкции...
питание подал отдельно
первй лед горить, подаю сигнал на boot 2й начинает моргать...
но ответа в мониторе на команду AT не получаю.
скетч
по началу не в те порты втыкал провода в18,19 вместо 0,1, далее выяснял куда boot втыкать...
(скорости менял ...)
теперь незнаю что ковырять направьте ...
Пины 0 и 1 уже заняты портом Serial, а Вы на них же SoftwareSerial modem(1, 0); объявляете. Бессмыслица какая-то.
Очень даже в те, это правильно же.
А ну кажеться понял согласно мануалу по softwareserial я перенаправляю данные с 18 19 на serial(0 1 или usb)... но результат все равно ответа нет (((
Softwareserial на Меге вообще не нужен, у Вас в Меге четыре аппаратных порта есть.
Нет, ничего не перенаправляется. Hardware Serial (пины 0 и 1) сам по себе, SoftwareSerial сам по себе. Они никак не связаны. SoftwareSerial - это программная эмуляция последовательного порта на любых цифровых пинах. Пины 0 и 1 трогать нельзя, т.к. они заняты аппаратным последовательным портом.
SoftwareSerial используют тогда, когда не хватает аппаратных или заняты нужные пины.
void setup(){ pinMode(48, OUTPUT); Serial.begin(9600); Serial1.begin(9600); // pins 18, 19 // А там не 115200 ли по умолчанию ? Serial.print("M590E Test"); delay(2000); digitalWrite(48, LOW); delay(1000); digitalWrite(48, HIGH); } void loop () { while (Serial1.available() > 0) Serial.write(Serial1.read()); while (Serial.available() > 0) Serial1.write(Serial.read()); }Да все все гораздо проще, переткнул назад на 1 0 и вообще весь код удалил и заработало ))))
#include <SoftwareSerial.h> int ch = 0; String val = ""; #define MASTER "+792xxxxxxxx" //укажите телефон хозяина void setup() { Serial.begin(9600); //подключаем порт компьютера Serial.println("GSM Neoway M590 example"); Serial.begin(9600); //подключаем порт модема (при других скоростях не отвечает) Serial.println("ATI"); //вывести в терминал иноформацию о модеме delay(100); Serial.println("AT+CSQ"); //вывести в терминал уровень сигнала (если 99, то связи нет) delay(100); Serial.println("AT+CLIP=1"); //включаем АОН delay(100); Serial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.) delay(100); Serial.println("AT+CSCS=\"GSM\""); //режим кодировки текста delay(100); Serial.println("AT+CNMI=2,2"); } void loop(){ if (Serial.available()) { //есть данные от GSM модуля delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана while (Serial.available()) { //сохраняем входную строку в переменную val ch = Serial.read(); val += char(ch); delay(10); } Serial.println(val); // дублируем сообщение в терминал //----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и) if (val.indexOf("1") > -1) { //если обнаружен СМС Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно) } } }Отправляю СМС с текстом 1
Не доходит ((((
Что не так делаю подскажите ?
int ch = 0; String val = ""; #define MASTER "+3XXXXXXXXXX" //укажите телефон хозяина void setup() { Serial.begin(9600); //подключаем порт компьютера Serial.println("GSM Neoway M590 example"); Serial1.begin(9600); //подключаем порт модема на скорости по умолчанию (можно менять AT-командой) Serial1.println("ATI"); //вывести в терминал иноформацию о модеме delay(100); Serial1.println("AT+CSQ"); //вывести в терминал уровень сигнала (если 99, то связи нет) delay(100); Serial1.println("AT+CLIP=1"); //включаем АОН delay(100); Serial1.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.) delay(100); Serial1.println("AT+CSCS=\"GSM\""); //режим кодировки текста delay(100); Serial1.println("AT+CNMI=2,2"); //отображение смс в терминале сразу после приема (без этого сообщения молча падают в память) } void loop() { if (Serial1.available()) { //если есть данные от GSM модуля delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана while (Serial1.available()) { //сохраняем входную строку в переменную val ch = Serial1.read(); val += char(ch); delay(10); } Serial.println(val); // дублируем сообщение в терминал //----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и) if (val.indexOf("+CMT") > -1) { //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING", трубку он не берет, но реагировать на факт звонка можно) //----------------------- поиск кодового слова в СМС (вообще эту часть надо поместить внутрь предыдущей, но если использовать кодовое слово не совпадающее с сообщениями модема, то не обязательно) if (val.indexOf("1") > -1) { // если обнаружено кодовое слово Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно) } else { // если другое слово или вообще пустое сообщение Serial.println("no send you"); } val = ""; } } }Просто не понятно зачем тогда эти пины 0 и 1....
преткнулся на 18 19
Отправляю 1 не приходит ...
Что происходит, когда Вы звоните на номер своего Neoway 590 ?
Звонок проходит, остаеться взять трубку ...
Ну и кстате предложенный вами выше код тоже не дает отклика от модема т.е. на AT команды молчит...
а если на прямую втыкаюсь в 0 1 порт и убираю код перенаправления данных то модем откликаеться в сети зарегестрирован...
Подумал может Serial спалил кинул на serial2 тоже молчит (((
int incomingByte = 0; int transByte = 0; void setup(){ pinMode(48, OUTPUT); Serial.begin(9600); Serial2.begin(9600); // pins 16, 17 // А там не 115200 ли по умолчанию ? Serial.write("M590E Test"); // Serial2.write('AT'); digitalWrite(48, HIGH); } void loop () { while (Serial2.available() > 0 ){ Serial.write(Serial2.read()); incomingByte = Serial2.read(); // отсылаем то, что получили Serial.print("I received: "); Serial.println(incomingByte, DEC); delay(1000); } while (Serial.available() > 0 ) { Serial2.write(Serial.read()); transByte = Serial.read(); Serial.print("I trans: "); Serial.println(transByte, DEC); delay(1000); } delay(3000); }вот такой код при отправке AT возвращает:
trans: 116
trans: -1
т.е. отправка есть приема нет(((
проблема в скорости выявил методом..
Посадил на serial удалил весь код обмен идет... модем опрашиваеться
пишу Serial.begin (9600);
обменанет, получаеться что по умолчанию на serial какая то другая скорость как узнать какая ?
всем спасибо, решил ...
просто ненужно объявлять serial в принципе..
05 строчка лишняя.
а нет нифига вернул на 18 19 опять затихло...
Я как-то уже слегка запутался с Вашей ситауцией...
Определённо могу сказать лишь, что нужно добиться того, чтобы работала ручная посылка, например, "АТ" в монитор порта Ардуино для скетча
void setup(){ pinMode(48, OUTPUT); Serial.begin(9600); Serial1.begin(9600); // pins 18, 19 delay(2000); digitalWrite(48, LOW); delay(1000); digitalWrite(48, HIGH); } void loop () { while (Serial1.available() > 0) Serial.write(Serial1.read()); while (Serial.available() > 0) Serial1.write(Serial.read()); }Этот же скетч поможет увидеть, что происходит, когда модем получает SMS.
Не правильно расключил ...
serial похоже сам переварачивает Rx на Tx и обратно по этому на нем обмен шел..
serial1 не переваривает...
Ну при любом раскладе подключил модем на Serial1 перевернув пины Rx на Tx и теперь все летает... всем спасибо
Serial ничего не переворачивает. И Serial1 ничего не переворачивает. И Serial2, и Serial3 - никуда ничего не переворачивают. Более того - всё переваривается, у меня Neoway работает и через Serial1, и через Serial2, и через Serial3. Вот только есть один нюанс на моей китайской меге - метки RX1 и TX1 на плате тупо перепутаны местами, поэтому, если ориентироваться по меткам, может показаться, что не работает.
Ну и, конечно, Serial1 и далее по списку недоступны на Uno и прочих Mini.