Нет связи neoway 590

drpower
Offline
Зарегистрирован: 22.05.2016
#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 втыкать...

(скорости менял ...)

теперь незнаю что ковырять направьте ...

 

Araris
Offline
Зарегистрирован: 09.11.2012

Пины 0 и 1 уже заняты портом Serial, а Вы на них же SoftwareSerial modem(1, 0); объявляете. Бессмыслица какая-то.

drpower пишет:

по началу не в те порты втыкал провода в18,19 вместо 0,1, далее выяснял куда boot втыкать...

Очень даже в те, это правильно же.

drpower
Offline
Зарегистрирован: 22.05.2016

А ну кажеться понял согласно мануалу по softwareserial я перенаправляю данные с 18 19 на serial(0 1 или usb)... но результат все равно ответа нет (((

Araris
Offline
Зарегистрирован: 09.11.2012

Softwareserial на Меге вообще не нужен, у Вас в Меге четыре аппаратных порта есть.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Нет, ничего не перенаправляется. Hardware Serial (пины 0 и 1) сам по себе, SoftwareSerial сам по себе. Они никак не связаны. SoftwareSerial - это программная эмуляция последовательного порта на любых цифровых пинах. Пины 0 и 1 трогать нельзя, т.к. они заняты аппаратным последовательным портом.

SoftwareSerial используют тогда, когда не хватает аппаратных или заняты нужные пины.

Araris
Offline
Зарегистрирован: 09.11.2012
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());
}

 

drpower
Offline
Зарегистрирован: 22.05.2016

Да все все гораздо проще, переткнул назад на 1 0 и вообще весь код удалил и заработало ))))

drpower
Offline
Зарегистрирован: 22.05.2016
#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

Не доходит ((((

Что не так делаю подскажите ?

drpower
Offline
Зарегистрирован: 22.05.2016
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 не приходит ...

Araris
Offline
Зарегистрирован: 09.11.2012

Что происходит, когда Вы звоните на номер своего Neoway 590 ?

drpower
Offline
Зарегистрирован: 22.05.2016

Звонок проходит, остаеться взять трубку ...

Ну и кстате предложенный вами выше код тоже не дает отклика от модема т.е. на AT команды молчит...

а если на прямую втыкаюсь в 0 1 порт и убираю код перенаправления данных то модем откликаеться в сети зарегестрирован... 

Подумал может Serial спалил кинул на serial2 тоже молчит (((

drpower
Offline
Зарегистрирован: 22.05.2016
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

т.е. отправка есть приема нет(((

 

 

drpower
Offline
Зарегистрирован: 22.05.2016

проблема в скорости выявил методом..

Посадил на serial удалил весь код обмен идет... модем опрашиваеться

пишу Serial.begin (9600);

обменанет, получаеться что по умолчанию на serial какая то другая скорость как узнать какая ?

drpower
Offline
Зарегистрирован: 22.05.2016

всем спасибо, решил ...

просто ненужно объявлять serial в принципе..

05 строчка лишняя.

 

а нет нифига вернул на 18 19 опять затихло...

 

Araris
Offline
Зарегистрирован: 09.11.2012

Я как-то уже слегка запутался с Вашей ситауцией...

Определённо могу сказать лишь, что нужно добиться того, чтобы работала ручная посылка, например, "АТ" в монитор порта Ардуино для скетча

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.

drpower
Offline
Зарегистрирован: 22.05.2016

Не правильно расключил ...

serial похоже сам переварачивает Rx на Tx и обратно по этому на нем обмен шел..

serial1 не переваривает...

Ну при любом раскладе подключил модем на Serial1 перевернув пины Rx на Tx и теперь все летает... всем спасибо

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Serial ничего не переворачивает. И Serial1 ничего не переворачивает. И Serial2, и Serial3 - никуда ничего не переворачивают. Более того - всё переваривается, у меня Neoway работает и через Serial1, и через Serial2, и через Serial3. Вот только есть один нюанс на моей китайской меге - метки RX1 и TX1 на плате тупо перепутаны местами, поэтому, если ориентироваться по меткам, может показаться, что не работает.

Ну и, конечно, Serial1 и далее по списку недоступны на Uno и прочих Mini.