Объявление

Внимание!
Данный форум предназначен только для радиолюбителей!
Никакие прочие объявления, реклама товаров либо услуг невозможны!


Любой спам на нашем форуме запрещён!
Разрешаются только ссылки по темам! 3а нарушения БАН.


GSM модуль NEOWAY M590 связь с Ардуино

Правила форума
Внимание! Любой спам на нашем форуме запрещён!
Коммерческая реклама сайтов, ссылки, спам запрещены. Так же запрещены ссылки на сайты в профилях новичков.
Бан без предупреждений.

GSM модуль NEOWAY M590 связь с Ардуино

Сообщение admin » 16 апр 2017, 16:43

GSM NEOWAY M590.

Модуль продаётся «врассыпную» (в комплекте есть всё необходимое), поэтому потребуются навыки пайки, впрочем, ничего сложного там нет.
Изображение

Будем считать, что Вы всё правильно спаяли и у Вас получилось вот такое устройство:

Изображение

Подключение и эксплуатация


NEOWAY общается с ардуиной (или иным устройством) через UART (RX, TX) с помощью AT-команд. Для того чтоб посылать команды, надо выяснить скорость UARTа.
Для выяснения скорости, нужно подключить собраный модуль к компьютеру с помощью USB-UART моста, выглядит эта штука так:

Изображение

В этом случае соединяем:

USB-UART <> NEOWAY

+5 <> +5
GND <> GND
TX <> RX
RX <> TX

Контакт BOOT используется для включения/отключения модуля кратковременным (~1сек) соединением с GND, однако удобнее просто соединить его с GND и не отсоединять. Включение модуля будет происходить при подачи питания.



Если такой штуки нет, то можно превратить ардуину в USB-UART мост залив в неё вот такой скетч…

Код: выделить все
void setup()
 {
   pinMode(0, INPUT);
   pinMode(1, INPUT);
 }
 void loop()
 {}


… и соединив следующим образом:

Ардуина <> NEOWAY

+5 <> +5
GND <> GND
RX <> RX
TX <> TX

Контакт BOOT соедините с GND.



О питании


Модуль может потреблять большой ток, до 2-х ампер в пике, поэтому для надёжной работы необходимо организовать дополнительный БП. В принципе заработает то он и от ардуины, но в момент регистрации в сети или приёма звонка, модуль может перегружаться.

Так же будет не лишним поставить электролитический конденсатор (~1000 микрофарад, 16 вольт) поближе к модулю.


После подачи питания, на плате должен начать мигать светодиод (примерно раз в секунду) — это говорит о том, что он готов к работе.




Теперь подключаем Вашу конструкцию к компьютеру, в IDE Arduino открываем «Монитор последовательного порта» (в дальнейшем «терминал»), выбираем (внизу-справа) NL & CR, устанавливаем скорость 9600 и отправляем команду проверки связи — AT

Если ответ — ОК, то значит модуль работает и скорость UARTа установлена 9600. Если ответа нет, то проверьте правильность соединения UARTа и дальше действуйте методом «тыка» подставляя разные скорости, пока не увидите заветное ОК.



После старта модем скажет — MODEM:STARTUP, а о готовности к работе сообщит — +PBREADY

Если модему не будет хватать питания (большинство возникающих проблем происходят из-за этого), то он будет постоянно рестартовать.

Изображение

Ещё я столкнулся с тем, что модем работает не со всеми сим-картами.


Если всё в порядке, тогда переходим к изучению АТ-команд для общения с NEOWAY и его настройки.



АТ-команды


АТ — запрос состояния, ответ — ОК.

ATE0 — отключить «эхо».

ATE1 — включить «эхо».
Эхо — это повтор введённой команды в терминал.

ATI — название и версия модуля.

AT+getvers — версия прошивки.

AT+IPR=9600 — установка скорости UARTа (9600), возможные варианты — 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.

AT&W0 — сохранение конфигурации настроек в EEPROM.

AT&W1 — сохранение конфигурации настроек в EEPROM.
0 для нулевого профиля, 1 для первого профиля.

AT+CPAS — проверка статуса модема, ответ — +CPAS: 0.
Статусы: 0 — готов к работе, 2 — неизвестно, 3 — входящий звонок, 4 — в режиме соединения.

AT+CPWROFF — отключение модуля.

AT+CLIP=1 — включить АОН.

AT+CLIP=0 — отключить АОН.

ATD+79634759175; — позвонить.
В терминал будут выводиться сообщения: CONNECT — соединение установлено, BUSY — занят, NO ANSWER — нет ответа, NO CARRIER — вызов сброшен.

ATH — сбросить все соединения.

ATH1 — сбросить текущие соединение.

AT+CMGF=1 — настроить на текстовый формат SMS.

AT+CMGF=0 — настроить SMS на PDU формат.

AT+CSCS=«GSM» — кодировка текста sms — ASCII. Переправьте на нормальные кавычки.
Возможны другие кодировки: HEX – шестнадцатеричными значениями, IRA – международный справочный алфавит, PCCP437 – кодировка CP437(IBM PC), 8859-1 – кодовые страницы семейства ISO 8859, UCS2 – кодировка unicode.

AT+CMGR=1 — чтение sms, где цифра — порядковый номер сообщения. То есть в данном случае читается первое сообщение, так — AT+CMGR=2 второе и т.д.

AT+CMGD=1 — удаление sms, где цифра — порядковый номер сообщения.

AT+CMGD=1,1 — удалить все прочитанные sms.

AT+CMGD=1,2 — удалить все прочитанные и отправленные sms.

AT+CMGD=1,3 — удалить все прочитанные, отправленные и неотправленные sms.

AT+CMGD=1,4 — удалить все sms.

AT+CNMI=1,2,2,1,0 — вывод принятого sms в терминал.


Здесь можно найти исчерпывающую информацию по ат-командам.


Отправка SMS будет осуществляться ардуиной.



Далее будем управлять модулем с помощью ардуины


Если на вашем модуле установлена скорость UARTа отличная от 9600, тогда дайте команду:

AT+IPR=9600
При взаимодействии с ардуиной будет использоваться SoftwareSerial, а он плохо работает на скоростях выше 9600.



Отключите девайс от питания и переключите RX и TX (остальное без изменений) модуля к ардуине следующим образом:

Ардуина <> NEOWAY

+5 <> +5
GND <> GND
D2 <> TX
D3 <> RX

Контакт BOOT соедините с GND.



Вначале загружаем в ардуину простой скетч (предварительно вписав номер, с которого будете звонить на модуль).

При старте, на каждую команду должно быть подтверждение — ОК.

Код: выделить все
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

byte led = 13;

void setup() {
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY promote site istarik.ru");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  //включить АОН
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop()
{
 if(mySerial.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
   
    while(mySerial.available())
     { 
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(3);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
   
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     {
      if(val.indexOf("79891196709") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль
       { 
         Serial.println("Call my phone");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         Serial.println("On D13");
         digitalWrite(led, HIGH);  //включаем светодиод на 5 сек
         Serial.println("5 sec pause");
         delay(5000);
         digitalWrite(led, LOW);  //выключаем
         Serial.println("Off D13");
       }
     }
  }
}


При звонке со вписанного номера, будет на 5 секунд зажигаться D13, а связь обрываться. Если это будет другой номер, то ничего не произойдёт. Все действия отображаются в терминале.




Следующий скетч будет посылать SMS в ответ на наш звонок:

Код: выделить все
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

byte led = 13;

void setup()
{
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY promote site istarik.ru");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(100);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop()
{
 if(mySerial.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
   
    while(mySerial.available())
     { 
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
   
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     {
      if(val.indexOf("79919790861") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль
       { 
         Serial.println("Call my phone");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         sms(String("Hello from istarik.ru"), String("+79919790861")); // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль       
       }
     }
  }
}


void sms(String text, String phone)  // отправка СМС
{
  Serial.println("Start SMS send");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(500);
  mySerial.print(text);
  delay(500);
  mySerial.print((char)26);
  delay(500);
  Serial.println("SMS send OK");
  delay(2000);
}
admin
Администратор
 
Сообщений: 56
Зарегистрирован: 27 ноя 2016, 18:21
ТегиM590, NEOWAY, Ардуино

Re: GSM модуль NEOWAY M590 связь с Ардуино

Сообщение admin » 16 апр 2017, 16:47

Далее...

Вместо строки «Hello from istarik.ru» можно вписать какую-либо переменную, например температуру с датчика, а звонок заменить каким-либо событием, например, нажатием на кнопку (дописав обработчик нажатия кнопки).
С помощью этого скетча можно отправлять в модуль через терминал какие-то свои команды или АТ-команды. Ответ будет выводится в терминал.

Код: выделить все
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

byte led = 13;


void setup()
{
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY promote site istarik.ru");
  Serial.println();
}

void loop()
{
 if(Serial.available()) //если в мониторе порта ввели что-то
  { 
    char ch = ' ';
    String val = "";
   
    while (Serial.available())
     { 
       ch = Serial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    if(val.indexOf("callmy") > -1) // своя команда
     { 
       mySerial.println("ATD+79196989701;"); // ВПИШИТЕ номер, на который нужно позвонить
     }

    else mySerial.println(val);  // передача всего, что набрано в терминале в GSM модуль
  }


 while(mySerial.available())
  {
    Serial.print((char)mySerial.read());
    delay(3);
  }
}


Если ввести в терминале ат-команду — AT+CLIP=1, то включится АОН, а если ввести свою команду — callmy, тогда модуль перезвонит на вписанный в скетче телефон.



Скетч для отправки SMS-команд:

Код: выделить все
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

byte led = 13;

void setup() {
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY promote site istarik.ru");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  //включить АОН
  delay(300);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(300);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(300);
  Serial.println("SMS to terminal:");
  mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль
  delay(300);
 
}

void loop()
{
 if(mySerial.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
   
    while(mySerial.available())
     { 
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(3);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
   
    if(val.indexOf("+CMT") > -1) //если есть входящее sms
     {
      if(val.indexOf("led13on") > -1) // смотрим, что за команда
       { 
         Serial.println("On D13");
         digitalWrite(led, HIGH);  //включаем светодиод
       }

      if(val.indexOf("led13off") > -1) // смотрим, что за команда
       {
         digitalWrite(led, LOW);  //выключаем
         Serial.println("Off D13");
       }
     }
  }
}


Если отправить модулю смску с текстом — led13on, то светодиод зажжётся, а если отправить текст — led13off, то погаснет.



И последний скетч, который позволяет отправив в модуль смс со специальным словом, получить в ответ смс с балансом денег на симке, которая стоит в NEOWAY
Не забудьте вписать нужный номер.

Код: выделить все
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

byte led = 13;

void setup() {
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY promote site istarik.ru");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  //включить АОН
  delay(300);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(300);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(300);
  Serial.println("SMS to terminal:");
  mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль
  delay(300);
 
}

void loop()
{
 if(mySerial.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
   
    while(mySerial.available())
     { 
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(3);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
   
    if(val.indexOf("+CMT") > -1) //если есть входящее sms
     {
      if(val.indexOf("money") > -1) // смотрим, что за команда
       { 
         delay(3000);
         mySerial.println("ATD#100#;");
       }     
     }


    if(val.indexOf("+CUSD") > -1) //если есть входящее sms
     {
      if(val.indexOf("Balance") > -1) // смотрим, что за команда
       { 
         delay(3000);
       
         val = val.substring(val.indexOf("Balance"),val.indexOf("r"));
         sms(String(val), String("+79967081199")); // ВПИШИТЕ ВАШ НОМЕР
       }     
     }         
  }
}


void sms(String text, String phone)  //отправка СМС с балансом модема
{
  Serial.println("Start SMS send");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(500);
  mySerial.print(text);
  delay(500);
  mySerial.print((char)26);
  delay(500);
  Serial.println("SMS send OK");
  delay(2000);
}


Отправьте модулю смску с текстом — money и через несколько секунд придёт ответная смс с количеством денег на балансе симки NEOWAY.


Все эксперименты проводились с оператором МТС.



Теперь можно из этих скетчей собирать то, что Вам нужно.



У NEOWAY нет микрофона, поэтому голосовую связь осуществить не получится, но само соединение устанавливается, и если принять звонок от модуля, то в динамике будет просто тишина.

При поступлении входящего вызова на контакте RING появляются импульсы с низким логическим уровнем длительностью 30 мс, в такт звуку гудка. При получении SMS сообщения, появляется однократный импульс длительностью 25-35 мс.
admin
Администратор
 
Сообщений: 56
Зарегистрирован: 27 ноя 2016, 18:21


Вернуться в Для новичков. Азы.

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
/