Модуль NEOWAY M590 приобретает все большую популярность среди радиолюбителей, и в этой статье я расскажу про GPRS команды модуля. GPRS представляет собой пакетную передачу данных на основе мобильной связи GSM, и дает возможность обмена данными между устройствами сети GSM, а также выход в Интернет. Для передачи данных по GPRS используется протокол TCP/IP, кроме этого модуль поддерживает стандарт FTP.
Модуль можно заказать здесь. В статье про GSM модуль NEOWAY M590 я приводил описание модуля и команды, касающиеся настройки модуля, а также команды для работы с SMS сообщениями, ниже представлены основные команды для работы с GPRS:
Описание | Команда задания параметров PDP контекста | |
Формат | AT+CGDCONT=<cid>,<type>,<APN> | |
Параметр | <cid> – идентификатор PDP контекста, минимальное значение 1 <type> – тип протокола передачи данных, “IP” – использовать протокол TCP/IP <APN> – имя точки доступа | |
Ответ | OK или ERROR | |
Пример | AT+CGDCONT=1,“IP”,“internet.mts.ru” OK | “internet.mts.ru” – имя точки доступа |
Описание | Команда аутентификации PDP | |
Формат | AT+XGAUTH=<cid>,<auth>,<name>,<pwd> | |
Параметр | <cid> – идентификатор PDP контекста <auth>: 0 – не использовать протокол аутентификации 1 – использовать протокол аутентификации PAP (передача имени и пароля для проверки подлинности) 2 – использовать протокол аутентификации CHAP (для проверки подлинности пароль не передается) <name> – имя пользователя <pwd> – пароль | |
Ответ | OK или ERROR | |
Пример | AT+XGAUTH=1,1,“mts”,“mts” OK | |
Запрос разрешенных значений параметров | AT+XGAUTH=? +XGAUTH: (1-255),(0-2),20,32 OK | Максимальная длина имени 20 символов, для пароля 32 символа |
Примечание | Команда должна быть задана после выполнения команды AT+CGDCONT |
Описание | Команда выбора внутреннего/внешнего стека протоколов | |
Формат | AT+XISP=<n> | |
Параметр | <n>: 0 – использовать внутренний стек протоколов TCP/IP 1 – использовать внешний стек протоколов (по умолчанию) | |
Ответ | OK | |
Пример | AT+XISP=0 OK | |
Запрос текущего значения параметра | AT+XISP? + XISP: 0 OK | Между “:” и “0” четыре пробела |
Описание | Команда установки соединения по протоколу PPP | |
Формат | AT+XIIC=<n> | |
Параметр | <n>: 1 – установить соединение по протоколу PPP | |
Ответ | OK | |
Пример | AT+XIIC=1 OK | |
Запрос текущего значения параметра | AT+XIIC? +XIIC: 1, 10.63.44.105 OK | Проверка PPP соединения Соединение установлено, присвоен IP адрес 10.63.44.105 Между “:” и “1” четыре пробела |
AT+XIIC? +XIIC: 0, 0.0.0.0 OK | Проверка PPP соединения Соединение не установлено Между “:” и “0” четыре пробела | |
Примечание | До установления PPP соединения необходимо выполнить команду AT+CGDCONT Команду AT+XISP=0 необходимо выполнить до команды AT+CGDCONT |
Описание | Команда установки соединения по протоколу TCP | |
Формат | AT+TCPSETUP= <n>,<ip>,<port> | |
Параметр | <n> – идентификатор соединения, может принимать значения только 0 и 1 <ip> – IP адрес узла, с которым устанавливается соединение <port> – номер порта, через который устанавливается соединение | |
Пример | AT+TCPSETUP=0,213.180.193.3,80 OK +TCPSETUP:0,OK | Соединение с узлом 213.180.193.3 успешно установлено |
AT+TCPSETUP=0,213.180.193.3,80 OK +TCPSETUP:0,FAIL | Попытка соединения с узлом 213.180.193.3 не удалась | |
AT+TCPSETUP=2, 213.180.193.3,80 +TCPSETUP:Error | Синтаксическая ошибка в команде | |
Примечание | Перед установлением TCP соединения необходимо убедиться в активности PPP соединения Если получен ответ OK, то введенная команда правильная, в противном случае будет выдан ответ +TCPSETUP:Error |
Описание | Команда передачи данных по протоколу TCP | |
Формат | AT+TCPSEND=<n>,<length> | |
Параметр | <n> – идентификатор соединения, может принимать значения только 0 и 1, должен соответствовать идентификатору TCP соединения <length> – длина передаваемых данных, может принимать значения 1-2000 байт. | |
Пример | AT+TCPSEND=0,10 >0123456789<CR> OK +TCPSEND:0,10 | 10 байт данных успешно отправлены по TCP соединению |
AT+TCPSEND=0,10 +TCPSEND:Error | Ошибка передачи данных, TCP соединение не установлено | |
AT+TCPSEND=0,10 >01234567899<CR> ERROR OK +TCPSEND:0,10 | Ошибка передачи данных, длина переданных данных превышает значение в команде | |
AT+TCPSEND=0,2800 +TCPSEND:Data length error | Ошибка передачи данных, длина переданных данных превышает максимально разрешенное значение в 2000 байт | |
AT+TCPSEND=0,536 >01234567899…<CR> +TCPSEND:Buffer not enough,439 ERROR | Ошибка передачи данных, внутренний буфер переполнен | |
Примечание | Сначала необходимо отправить команду AT+TCPSEND, затем дождаться приглашения в виде символа “>”, после чего отправить данные. Для завершения процесса следует отправить символ возврата каретки <CR> (шестнадцатеричное значение 0х0D), который не входит в длину пакета данных. Перед отправкой данных необходимо убедиться, что TCP соединение установлено, а также с помощью команды AT+IPSTATUS проверить кол-во свободного места в буфере |
Описание | Команда указывает на процесс приема данных по протоколу TCP | |
Формат | +TCPRECV:<n>,<length>,<data> | |
Параметр | <n> – идентификатор соединения, может принимать значения только 0 и 1 <length> – длина принятых данных <data> – непосредственно полученные данные, пакет данных заканчивается символами <CR><LF>, пользователь должен сверить длину полученных данных с параметром <length> | |
Пример | +TCPRECV:0,10,0123456789 | Принято 10 байт данных, 0123456789 |
+TCPRECV:0,231,HTTP/1.1 200 OK Server: nginx-reuseport/1.10.0 Date: Fri, 27 May 2016 14:20:07 GMT Content-Type: text/html Content-Length: 24 Connection: keep-alive Keep-Alive: timeout=30 X-Powered-By: PHP/5.3.29 The request was accepted | Принято 231 байт данных, в данном случае ответ сервера (по HTTP стандарту) на GET запрос. Строка ответа: The request was accepted |
Описание | Команда закрытия TCP соединения | |
Формат | AT+TCPCLOSE=<n> | |
Параметр | <n> – идентификатор соединения, может принимать значения только 0 и 1 | |
Пример | AT+TCPCLOSE=0 +TCPCLOSE:0,OK | TCP соединение успешно закрыто |
AT+TCPCLOSE=2 +TCPCLOSE:Error | Неверный идентификатор соединения, ошибка | |
+TCPCLOSE:0,Link Closed | TCP соединение закрыто принудительно |
Описание | Команда проверки IP адреса узла по доменному имени | |
Формат | AT+DNS=<string> | |
Параметр | <string> – доменное имя узла | |
Пример | AT+DNS=“www.ya.ru” OK +DNS:93.158.134.3 +DNS:213.180.193.3 +DNS:213.180.204.3 +DNS:OK | Проверка IP адреса узла www.ya.ru (www можно не указывать) Как видно узел имеет три IP адреса |
Примечание | Перед проверкой IP адреса необходимо установить соединение по PPP протоколу командой AT+XIIC=1 Максимальная длина доменного имени не должна превышать 250 символов |
Описание | Команда авторизации на FTP сервере | |
Формат | AT+FTPLOGIN=<ip><port><user><pwd> | |
Параметр | <ip> – IP адрес сервера FTP <port> – номер порта FTP сервера, обычно номер равен 21 <user> – имя пользователя, максимальная длина не должна превышать 100 символов, имя не должно содержать символы запятой “,” <pwd> – пароль, максимальная длина не должна превышать 100 символов, пароль не должен содержать символы запятой “,” | |
Ответ | +FTPLOGIN:Error <n> – синтаксическая ошибка в команде, <n> – код ошибки +FTPLOGIN:Have Logged In – авторизация уже была произведена ранее +FTPLOGIN:AT Busy – предыдущая команда (имеющая отношение к FTP сервису) еще не завершилась +FTPLOGIN:User logged in – авторизация успешно выполнена +FTPLOGIN:530 Not logged in –авторизация не выполнена, неверное имя пользователя или пароль +FTPLOGIN:Error Connect Server Fail – подключение к FTP серверу завершилось неудачей +FTPLOGIN: Error TimeOut – превышено время ожидания ответа от сервера (более 30 секунд) | |
Пример | AT+FTPLOGIN=219.134.179.52,21,user1,pwd2016 OK +FTPLOGIN:User logged in | Авторизация на FTP сервере 219.134.179.52,21 под именем user1 и паролем pwd2016 успешно выполнена |
+FTP:Shutdown | Сеанс связи закрыт по истечении времени бездействия | |
Примечание | Перед авторизацией на FTP сервере необходимо убедиться в активности PPP соединения |
Описание | Команда загрузки данных с FTP сервера | |
Формат | AT+FTPGET=<dir$filename>,<type>,<content or info> | |
Параметр | <dir$filename> – путь к директории и название файла <type> – формат передачи данных: 1 – символы ASCII 2 – двоичные данные <content or info>: 1 – получить данные из файла 2 – получить информацию о файле | |
Ответ | +FTPGET:Error <n> – синтаксическая ошибка в команде, <n> – код ошибки +FTPGET:Error Not Login –авторизация на FTP сервере не была выполнена +FTPGET:AT Busy – предыдущая команда (имеющая отношение к FTP сервису) еще не завершилась +FTPLOGIN: Error TimeOut – превышено время ожидания ответа от сервера (более 30 секунд) +FTPGET:<length>,<data> – прием данных от сервера, <length> – длина получаемых данных, <data> – непосредственно получаемые данные +FTPGET:OK.total length is <n> – данные от FTP сервера успешно получены, <n> – длина принятых данных | |
Пример | AT+FTPGET=,1,2 +FTPGET:658,drwx—— 3 1241 601 4096 Sep 12 2012 .cache drwx—— 3 1241 601 4096 Sep 12 2012 .konfit drwx—— 2 1241 601 4096 May 27 11:48 .fa drwx—— 3 1241 601 4096 Sep 15 2013 .local drwx—— 2 1241 601 4096 Feb 27 2012 .shh -rwx—— 1 1241 601 7262 Feb 27 2012 .proinfo drwx—— 3 0 0 4096 Sep 21 2012 inco-cabfil -rw——- 1 1241 601 12 Feb 27 14:19 new.txt drwx—— 3 1241 601 4096 Sep 17 2013 cashe0001301 drwx—— 3 1241 601 4096 Sep 21 2013 123456.frutrot +FTPGET:OK.total length is 658 | Получена информация о корневом каталоге |
AT+FTPGET=new.txt,1,2 +FTPGET:65,-rw——- 1 1241 601 12 Feb 27 14:19 new.txt +FTPGET:OK.total length is 65 | Получена информация о файле new.txt | |
AT+FTPGET=new.txt,1,1 +FTPGET:12,PrivetPrivet +FTPGET:OK.total length is 12 | Получены данные из файла new.txt | |
Примечание | Данные от FTP сервера могут загружаться с некоторой задержкой |
Описание | Команда передачи данных на FTP сервер | |
Формат | AT+FTPPUT=<filename>,<type>,<mode>,<size> | |
Параметр | <filename> – название файла, к которому передаются данные <type> – формат передачи данных: 1 – символы ASCII 2 – двоичные данные <mode> – режим передачи данных: 1 – создание документа на сервере для записи в него данных, если документ уже существует, его содержимое заменяется новыми данными 2 – создание документа на сервере для записи в него данных, если документ уже существует, данные добавляются в конец документа 3 – удаление документа, параметр <size> должен быть равен 0, после получения приглашения в виде символа “>”, необходимо отправить символ возврата каретки <CR> (0х0D) для завершения команды удаления <size> – длина передаваемых данных, значение не должно превышать 10240 байт | |
Ответ | +FTPPUT:Error <n> – синтаксическая ошибка в команде, <n> – код ошибки +FTPPUT:Error Not Login – авторизация на FTP сервере не была выполнена +FTPPUT:AT Busy – предыдущая команда (имеющая отношение к FTP сервису) еще не завершилась +FTPPUT:length overflow – превышено максимальное значение длины <size> передаваемых данных +FTPPUT:OK,<n> – данные успешно отправлены, <n> – длина переданных данных +FTPPUT:Delete File OK – документ успешно удален +FTPPUT:Error – ошибка передачи данных, команда не выполнена | |
Пример | AT+FTPPUT=new.txt,1,1,9 >radiolaba<CR> +FTPPUT:OK,9 | Создание документа new.txt, передача 9 байт данных (radiolaba) в документ, формат данных ASCII символы |
AT+FTPPUT=new.txt,1,2,7 >zapis01<CR> +FTPPUT:OK,7 | Добавление 7 байт данных (zapis01) в конец документа new.txt, формат данных ASCII символы | |
AT+FTPPUT=new.txt,1,3,0 ><CR> +FTPPUT:Delete File OK | Удаление файла new.txt | |
Примечание | Сначала необходимо отправить команду AT+FTPPUT, затем дождаться приглашения в виде символа “>”, после чего отправить данные. Для завершения процесса следует отправить символ возврата каретки <CR> (шестнадцатеричное значение 0х0D) |
Описание | Команда выхода пользователя из системы, закрытие сеанса FTP | |
Формат | AT+FTPLOGOUT | |
Ответ | OK | |
Пример | AT+FTPLOGOUT OK | Выход пользователя выполнен |
Примечание | Эта команда может использоваться независимо от того авторизован ли пользователь или нет |
Описание | Команда проверки статуса FTP соединения | |
Формат | AT+FTPSTATUS | |
Ответ | +FTPSTATUS:<status>[,<ip>,<port>] <status>: logout – авторизация на FTP сервере не выполнена login – авторизация на FTP сервере выполнена, IP адрес и номер порта находятся в следующем параметре: <ip> – IP адрес FTP сервера <port> – номер порта FTP сервера | |
Пример | AT+FTPSTATUS +FTPSTATUS:login,219.134.179.52,21 | Пользователь авторизован на FTP сервере 219.134.179.52 |
AT+FTPSTATUS +FTPSTATUS:logout | Авторизация не произведена |
Для экспериментов я подключил модуль к компьютеру с помощью USB-UART преобразователя, в качестве терминальной программы использовал Terminal v1.9b by Bray. Для выхода в интернет необходимо отправить модулю последовательность определенных команд.
Сначала отправляем команду выбора внутреннего стека протоколов TCP/IP: AT+XISP=0, по умолчанию модуль использует внешний стек протоколов TCP/IP. Для ввода команды не забываем в конце добавить символ возврата каретки <CR>, в терминальной программе необходимо набрать $0D. Далее необходимо задать параметры PDP контекста, командой AT+CGDCONT. Параметр APN (имя точки доступа) зависит от мобильного оператора, для оператора МТС команда выглядит следующим образом: AT+CGDCONT=1,“IP”,“internet.mts.ru”, для Beeline AT+CGDCONT=1,“IP”,“internet.beeline.ru”, Tele2 – AT+CGDCONT=1,“IP”,“internet.tele2.ru”.
Следующая команда аутентификация PDP контекста, для оператора МТС команда выглядит следующим образом: AT+XGAUTH=1,1,“mts”,“mts”, параметры имя и пароль для других операторов можно найти в сети. Я пропускал данную команду, модуль при этом без проблем выходил в интернет.
И наконец, команда установки соединения по протоколу PPP: AT+XIIC=1. После ввода команды необходимо проверить наличие соединения с помощью той же команды, но с другим параметром: AT+XIIC?. Если получен ответ вида: +XIIC: 1, 10.73.201.98, то получен доступ в Интернет, модулю присвоен IP адрес 10.73.201.98. Если модуль вернул ответ +XIIC: 0, 0.0.0.0 значит, соединение не установилось, соответственно выхода в Интернет нет. Ниже представлен лог команд из терминала:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT+XISP=0 OK AT+CGDCONT=1,"IP","internet.mts.ru" OK AT+XGAUTH=1,1,"mts","mts" OK AT+XIIC=1 OK AT+XIIC? +XIIC: 1, 10.63.44.105 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Как только доступ в Интернет получен, можно подключаться к различным серверам и обмениваться данными. Для передачи данных нужно сначала установить соединение с сервером при помощи команды AT+TCPSETUP. Эта команда устанавливает TCP соединение с каким-либо узлом сети по IP адресу и номеру порта. Идентификатор соединения в параметрах команды может принимать значения 0 или 1, я использовал 0. Чтобы подключится к серверу, на котором установлен web-сайт, необходимо узнать IP адрес сервера, это можно сделать командой AT+DNS=<URL>, которая позволяет проверить IP адрес узла по доменному имени. Для просмотра web-страниц по стандарту http используется 80-й порт, для https 443-й порт. Для стандарта передачи данных FTP используется 21-й порт.
После успешного соединения с сервером можно начинать процесс передачи данных. Команда AT+TCPSEND отправляет данные на сервер по протоколу TCP/IP, идентификатор соединения в параметрах команды должен соответствовать значению в предыдущей команде (AT+TCPSETUP). Кроме этого в параметрах команды задается длина передаваемых данных, после ввода команды и получения приглашения, необходимо ввести данные, для завершения процесса отправить символ <CR>.
Но, передача произвольного потока данных не имеет смысла, сервер с web-сайтом ничего не распознает, необходимо передавать данные по HTTP стандарту. В http для запроса данных используют инструкцию GET, например, чтобы загрузить главную страницу web-сайта, нужно передать серверу следующий запрос:
GET /index.php HTTP/1.1\r\n
Host: site.ru\r\n\r\n
где, \r\n это символы возврата каретки и переводы строки <CR><LF>. Файл index.php находящийся на сервере отвечает за отображение главной страницы сайта с доменным именем site.ru. В терминале данный запрос будет выглядеть в виде одной строки:
GET /index.php HTTP/1.1$0D$0AHost: site.ru$0D$0A$0D$0A$0D
Последний символ возврата каретки $0D необходим для завершения ввода данных в команде AT+TCPSEND. Ниже представлен неполный лог загрузки главной страницы сайта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT+TCPSETUP=0,213.180.193.3,80 OK +TCPSETUP:0,OK AT+TCPSEND=0,42 >GET /index.php HTTP/1.1$0D$0AHost: site.ru$0D$0A$0D$0A$0D OK +TCPSEND:0,42 +TCPRECV:0,1024,HTTP/1.1 200 OK Server: nginx-reuseport/1.10.0 Date: Sat, 28 May 2016 10:20:49 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=30 Vary: Accept-Encoding X-Powered-By: PHP/5.3.29 50b1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>?‘?µ??N?N‰???µ N?N‚N€?????? ?? ?§?µ?»N??±????N????µ</title> <meta name="description" content="..."/> <meta name="keywords" content="?±?µ??N?N‰???µ N?N‚N€??????, N????µN‚????????????N‹?µ N?N‚N€??????, N????µN ‚???????????????µ N‚?°?±?»??, N????µN‚????????????N‹?? N???N€?°??, ??N‹???µN????°, N????µN‚?????????????°N? ??N‹???µN????°, N??»??N‡???°N? ??N‹???µN????°, N??»?µ??N‚N€?????????µ N‚?°?±?»??, N‚?°?±?»??, N???N€?°??, N†?µ??N‹ ???° N??»?µ??N‚N€??????N‹?µ N‚?°?±?»??, ??N?????N‚N? N??»?µ??N‚N€??????? +TCPRECV:0,1024,??µ N‚?°?±?»??, N€?µ???»?°???°, Site"/> <style type="text/css" media="all"> @import url ("css/style.css"); @import url("css/nivo-slider.css"); @import url("css/custom-nivo-slider.css"); @import url("css/jquery.fancybox.css"); </style> <!--[if lt IE 8]> <style type="text/css" media="all">@import url ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
В команде AT+TCPSEND необходимо указать длину запроса без учета последнего символа <CR>, для вышеприведенного запроса длина составляет 42 байта. После передачи запроса сервер выдает ответ, который содержит различную информацию о сервере, после чего идут непосредственно данные главной страницы сайта. Команда модуля +TCPRECV указывает на прием данных от сервера с указанием длины принимаемых данных, прием ведется блоками определенной длины, в зависимости от состояния внутреннего буфера модуля. После приема данных, TCP соединение принудительно закрывается, выдается сообщение вида: +TCPCLOSE:0,Link Closed.
Теперь главный вопрос, который интересует многих радиолюбителей, как с помощью модуля передавать данные на сервер с web-сайтом? Очень просто, с помощью того же GET запроса, который позволяет передать переменную с произвольным значением. Пример запроса:
GET /1.php?a=2016 HTTP/1.1\r\n
Host: site.ru\r\n\r\n
Данный запрос направлен на файл 1.php, где в переменной “a” передается значение 2016. В файле 1.php находится скрипт, который извлекает значение переменной “a”. Код скрипта приведен ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php $ip = $_SERVER['REMOTE_ADDR']; //получаем IP адрес клиента $client = $_SERVER['HTTP_USER_AGENT']; //получаем идентификатор HTTP клиента $today = date("Y.m.d H:i:s"); //получаем текущие дату и время // имя файла, в который производиться запись POST или GET запроса $filename = "data.txt"; // имя поля в POST или GET запросе $name_var='a'; // проверка существования файла if (file_exists($filename)) { // если файл существует - открываем его $file = fopen($filename, "a"); } else { // если файл не существует - создадим его $file = fopen($filename, "w+"); } // данные из поля $name_var в POST или GET запросе //$text = $_POST[$name_var]; $text = $_GET[$name_var]; //(раскомментируйте нужную строку) // записываем строку в файл fwrite($file, "$today; $ip; $client; $text\r\n"); // закрываем файл fclose($file); // ответ скрипта на запрос echo "The request was accepted"; ?> |
Файл скрипта можно назвать по своему желанию, его надо разместить на хостинге в папку, где хранятся файлы сайта, обычно название папки соответствует доменному имени сайта. Можно также поместить файл в другую вложенную папку, при этом придется поменять строку запроса.
При получении запроса скрипт создает файл data.txt в той же папке, где находится, куда записывает дату, время, IP адрес, идентификатор клиента и значение переменной “a”, при повторных запросах, данные добавляются в конец файла на новую строку. В ответ на запрос скрипт выдает сообщение “The request was accepted”. Работоспособность скрипта можно проверить, набрав запрос в адресной строке браузера:
site.ru\1.php?a=2016
Ниже приведен лог запроса из терминальной программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT+TCPSETUP=0,213.180.193.3,80 OK +TCPSETUP:0,OK AT+TCPSEND=0,45 >GET /1.php?a=2016 HTTP/1.1$0D$0AHost: site.ru$0D$0A$0D$0A$0D OK +TCPSEND:0,45 +TCPRECV:0,231,HTTP/1.1 200 OK Server: nginx-reuseport/1.10.0 Date: Fri, 27 May 2016 07:53:46 GMT Content-Type: text/html Content-Length: 24 Connection: keep-alive Keep-Alive: timeout=30 X-Powered-By: PHP/5.3.29 The request was accepted +TCPCLOSE:0,Link Closed ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
В ответе сервера присутствует код со значением 200, означающий успешный запрос, кроме этого сервер может выдавать другие значения:
400 Bad Request — неверный запрос (синтаксическая ошибка).
401 Unauthorized — для доступа требуется авторизация.
403 Forbidden — доступ запрещен.
404 Not Found — сервер не нашёл ресурс по указанному URL.
Еще один способ передачи данных, использовать FTP стандарт. Обычно хостинг предоставляет FTP доступ к корневому каталогу, где расположена папка с сайтом. Для подключения по FTP потребуется имя пользователя и пароль. После установления PPP соединения и выхода в Интернет, необходимо авторизоваться на сервере командой AT+FTPLOGIN, указав IP адрес сервера, номер порта, имя и пароль. Чтобы создать документ data.txt в корневом каталоге и передать в него данные (в конец документа), нужно ввести команду AT+FTPPUT=data.txt,1,2,<size>, где <size> – длина передаваемых данных. После получения приглашения, необходимо ввести данные, для завершения процесса отправить символ <CR>. Если операция прошла успешно, модуль выдаст сообщение +FTPPUT:OK,<size>, лог команд представлен ниже:
1 2 3 4 5 6 7 8 9 10 11 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT+FTPLOGIN=219.134.179.52,21,user1,pwd2016 OK +FTPLOGIN:User logged in AT+FTPPUT=data.txt,1,2,9 >radiolaba$0D +FTPPUT:OK,9 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Похоже, что не все модули поддерживают GPRS команды, в моем случае модуль ревизии 01.11n и прошивкой 1103_C6C10000_V0111n выдавал ошибки на GPRS команды.
S
2 Июн 2016Благодарю. большое развернутое исследование. А на какой версии прошивки работало? надеюсь мож пригодиться в пору дешёвого GPRS . Из нескольких модулей мне попадались прошивки 1.11n 1.20t 1.30b 1.30e , искал какую инфу про firmware – ничего, и официалы на емайл ничего не отвечают, и доступа на сайте к Download нет http://www.neoway.com/en/login.aspx.
p.s. Было б очень круто, если какой простенький примерчик , передачи к примеру c ардуины замеренные напряжения на сайт, чтоб он логи графиками строил.
admin
2 Июн 2016У меня GPRS команды поддерживались на ревизии 01.20n 01.30c , я Arduino не программирую, чтобы логи строить графиками, на стороне сайта скорее всего нужен php скрипт, а в php я не особо разбираюсь, так что пока подсказать не могу.
RLL
2 Июн 2016как определить координаты по этому gprs
admin
3 Июн 2016С помощью данного модуля координаты определить не получится, и GPRS здесь не причем. Координаты по мобильной сети можно определить по параметрам основной и соседних сот (станций, вышек). Но в модуле Neoway M590 не предусмотрены команды с помощью которых можно запросить параметры соты.
kkmspb
3 Июн 2016купил здесь
К Arduino Uno подключил. M590 работает нормально. Запускаю M590 программно через boot . Скорость меняю на 9600.
1. Кто знает – есть ли кроме мигающего диода способ узнать, что M590 готов к приему AT команд.
Может какая-то ножка на M590.
2. И еще мучает вопрос может ли как-то сбросится сама программно установленная скорость 9600 в процессе работы?
admin
3 Июн 2016Я проверял готовность модуля к работе по двум параметрам, это отслеживание сообщения MODEM:STARTUP после включения модуля, причем рекомендуется выдержать паузу не менее 2 секунд, после данного сообщения, прежде чем отправлять команды. Кроме этого включение модуля можно отслеживать по напряжению VCCIO на 6-ом выводе модуля, это напряжение питания для линий ввода/вывода модуля, величина напряжения 2,85В. Я подключал вывод VCCIO к какой-либо линии микроконтроллера и отслеживал состояние (0 или 1). Напряжение на VCCIO появляется сразу после включения модуля, здесь тоже необходимо выдержать паузу не менее 2 секунд, перед отправкой команд.
Скорость UART-а запоминается в модуле, и больше не сбрасывается, команду настройки скорости можно передать модулю один раз и больше не использовать.
kkmspb
6 Июн 2016Спасибо ! Очень доходчиво.
Дмитро
3 Июн 2016А можно ли принять пакет по TCP или по IP через putty например?
admin
4 Июн 2016Думаю что это возможно, если перевести модуль в режим TCP сервера, а Putty как клиент будет подключаться к этому серверу. Подробностей сказать не могу, так как не пробовал такое соединение.
Олександр
13 Июн 2016При изучении работы модуля, именно так и делал, с помощью putty + модем подключался к своему серверу. Вот наоборот немного сложнее, если оператор не выдаёт “белые” ІР-адреса, то подключиться к модему, включив прослушивание порта, (из сети другого оператора) не предоставляется возможным. В случае если “белые” IP-выдаются, то подключиться можно с любой точки Земного шарика )
shadlyd15@gmail.com
13 Июл 2016Can you please help me using TCP Transparent Transmission mode? I want to make it compatible with PubSubClient library for MQTT purpose. When I try to enter into the Transparent Transmission mode it automatically quits transparent mode. Can you please help me resolving the issue?
shadlyd15@gmail.com
13 Июл 2016Можете ли вы помочь мне с помощью режима прозрачной передачи TCP? Я хочу, чтобы он был совместим с библиотекой PubSubClient для MQTT цели. Когда я пытаюсь войти в режим передачи Прозрачный он автоматически завершает работу прозрачный режим. Можете ли вы помочь мне решение вопроса?
admin
13 Июл 2016Какие команды вы используете для входа в режим передачи?
shadlyd15@gmail.com
13 Июл 2016I used +TCPTRANS to enter into Transparent Transmission mode. After sending few binary data it quits automatically. It shows “+TRANSCLOSE: 0,OK” and “Quit Transparent Success!!!”
Sometimes the module restarts.
Олександр
13 Июл 2016Перечитал Даташит на модем NeoWay m590, но не нашёл команды “+TCPTRANS” Возможно Вы используете другой модем. В данном модеме для передачи данных используются команды “AT+TCPSEND” и “AT+UDPSEND” предварительно настроив сокеты командой “AT+TCPSETUP” и “AT+UDPSETUP” для TCP и UDP протоколов соответственно.
shadlyd15@gmail.com
14 Июл 2016I am using Neoway M590E.
Олександр
15 Июл 2016Посмотрите внимательно на фотографию в начале фоормуа, на ней отображен модем NeoWay M590/M590E. Ваш модем соответствует фото? Команда «AT+TCPTRANS» поддерживается модемом “M660” в версии прошивки НЕ НИЖЕ v3.1. Если у Вас прошивка ниже, советую обновить её на последнюю.
Формат команды:
AT+TCPTRANS=,.
П. С.
Но увы, NeoWay M590E не поддерживает данную команду 🙁 по крайней мере до прошивки v “1103_C6C30000_V0130e”
BOBAH
23 Окт 2016Доброго времени суток!
Тут так запросто сказали “Если у Вас прошивка ниже, советую обновить её на последнюю.”
Ни кто б не мог меня ткнуть носом в место, где эту обновленную прошивку взять?
Как я понял, это будет некий “.LOD” файл, который залить можно используя “RDA download tool”… Во всяком сучае так говорит сам neoway.
artakas
6 Май 2017как обновить прошивку??
Константин
27 Авг 2016Здравствуйте.
Как послать POST запрос подскажите пожалуйста.
Это правильный формат?
POST /rpc/ HTTP/1.1/r/n
Host: http://www.имя сервера куда шлю запрос.com/r/n
User-Agent: curl/7.43.0/r/n
Accept: */*/r/n
Content-Length: 64/r/n
Content-Type: application/x-www-form-urlencoded/r/n
{Здесь текст запроса 64 символа}/r/n
/r/n
/r
В ответ получаю:
..OK….+TCPSEND:0,221..
..+TCPCLOSE:0,Link Closed..
Что я не правильно делаю?
admin
27 Авг 2016Я POST запросы отправлять не пробовал, но в вашем запросе куда он направлен? /rpc/ – это что такое? по моему запрос должен быть направлен на html страницу, или php файл.
Еще здесь по моему ошибка:
Content-Type: application/x-www-form-urlencoded/r/n
{Здесь текст запроса 64 символа}/r/n
/r/n
/r
должно быть так:
Content-Type: application/x-www-form-urlencoded/r/n
/r/n
{Здесь текст запроса 64 символа}/r/n
только вот я точно не знаю после текста запроса возможно надо два перевода строки /r/n/r/n
Константин
27 Авг 2016Это запрос к rpc серверу
Так должно быть?
Content-Type: application/x-www-form-urlencoded/r/n
/r/n
{Здесь текст запроса 64 символа}/r/n
/r/n
/r
admin
28 Авг 2016Я точно не знаю, попробуйте после {Здесь текст запроса 64 символа} отправлять /r/n а также /r/n/r/n, я думаю последнее /r в вашем примере лишнее.
Sergey
4 Дек 2016Не подскажете как заставить обсуждаемый модуль работать в качестве модема в Windows не из терминала ,а полноценно из браузера?
Пробовал установить GPRS драйвер от сименса , но не прокатило , вероятно сильно разные у них команды. Может можно как то подправить .inf файлик обучив его правильным командам ?
Sergey
7 Дек 2016Вопрос решился, все оказалось банально просто, дело было не в AT командах , они к счастью оказались стандартными, просто нужен полноценный USB-USART переходник, с обязательным наличием входа CTS который необходимо замкнуть на землю ,чтобы винда видела наличие модема. И все прекрасно работает, средняя скорость получилась ~50 Кбит/c.
Константин
4 Дек 2016Браузер это клиент, правильно? Тогда никак.
Sergey
4 Дек 2016Браузер я привел для примера ,чтоб понятна была суть вопроса, сам вопрос в том как установить соединение именно средствами windows, как это делали раньше подключив проводом сотовый телефон в качестве модема. Драйвер модема представлял собой только .inf файл без каких либо внешних исполняемых модулей (USB вариант не рассматривается), значит средства для данного вида связи уже встроены в винду, вопрос в том как настроить это для NEOWAY M590.
Если это не возможно ,хотелось бы услышать более развернутый ответ ,почему?
Константин
4 Дек 2016Браузер – это принципиальный момент. Средствами windows связь можно установить через VCP например. В любом случае нужно приложение, которое будет управлять модулем. inf файл сам по себе не работает. Если есть интерес, куда Вам написать?
Sergey
4 Дек 2016cyberius@polyfaust.com
armasis15
6 Май 2017armasis15@mail.ru
У меня тоже есть интерес. Заранее спасибо
Guyver
15 Дек 2016Здравствуйте, подскажите пожалуйста может есть опыт у кого? хочу посредством приложения на Андроиде и фтп сервера, соединить МК через этот модуль. есть какая нибудь информация про андроид, и фтп сервер по подробнее? просто в программировании недавно, но смс, звоню. уже все прекрасно. хотел бы уже и приложение Андроида для устройств написать. но не знаю как задать вопрос, FTP, android, прием, передача информации, обработка данных, кнопка в приложении андроид, изменение текста в файле на ftp сервере с android
ketty
21 Дек 2016ребят а подскажите пожалуйста, можно как нибудь соединиться не по ip а по url с сервером?
admin
21 Дек 2016Скорее всего так не получится, можно определить ip адрес по url сервера с помощью команды AT+DNS=< доменное имя>, а потом по этому ip соединиться.
ketty
21 Дек 2016трабл в том что не знаю где найти хостинг который по ip может предоставить ftp доступ… только с помощью URL
admin
21 Дек 2016Странно, по моему любой хостинг должен предоставлять ip адрес ftp сервера, при покупке места на хостинге, они обычно высылают письмо со всеми доступами, где указаны и ip адреса. А вообще по url можно узнать ip адрес, и потом по нему подключаться.
Евгений
15 Янв 2017Здравствуйте. Все делаю как описано, у меня это же модуль. Но на сайте ничего не происходит, не создается файл. Получил хостинг на тестовый период, С помощью FileZilla закинул в папку HTTP Ваш скрипт. Если вызываю из браузера, то всё Ок. GET запрос не работает:
AT+TCPSETUP=0,81.177.24.67,2222
OK
+TCPSETUP:0,OK
AT+TCPSEND=0,59
>GET /test.php HTTP/1.1
Host: http://www.neoway-test-ru.1gb.ru
OK
+TCPSEND:0,59
Больше ничего, что не так? Подскажите пожалуйста.
admin
15 Янв 2017Здравствуйте, то есть как я понял запрос с браузера выполняется, в текстовый файл все прописывается?
В команде AT+TCPSETUP=0,81.177.24.67,2222 почему порт 2222? порт в http должен быть 80
В поле Host: не надо прописывать полностью с http, достаточно только домен без http://www.
Длина запроса в команде (AT+TCPSEND=0,59) неправильно посчитана, также нужно учитывать символ возврата каретки и символ перевода строки, за исключением последнего символа $0D необходимого для ввода команды в терминальной программе.
Например в примере GET /1.php?a=2016 HTTP/1.1\r\nHost: site.ru\r\n\r\n получается 45 символов (последний символ \r или $0D для ввода запроса в терминал в этом примере не указан)
Евгений
15 Янв 2017В браузере набираю neoway-test-ru.1gb.ru/test.php без аргумента (пока не нужен), при этом файл data.txt создается и получаю ответ от Вашего скрипта. Порт 2222 выдал мне поставщик услуг. Если я в настройках FileZilla устанавливаю порт 80, то при попытке соединиться из FileZilla:
Ошибка: Server unexpectedly closed network connection
Ошибка: Невозможно подключиться к серверу
Ставлю свой порт и получаю доступ к своим папкам:
Статус: Connected to neoway-test-ru.1gb.ru
Статус: Получение списка каталогов…
…
Пробую опять с модема уже на 80-й порт, да и на свой тоже пробую
AT+TCPSEND=0,55^&0d
>GET /test.php HTTP/1.1^&0D^&0AHost: neoway-test-ru.1gb.ru^&0D^&0A^&0D^&0A^&0D
Получаю тот же ОК от модема
И опять мимо. Про последний 0x0d я из статьи понял и учитываю его, вроде бы правильно считаю количество байт.
Опыта в этой области нет совсем и хост закроют дня через 3. Да, в моей терминальной ПО последовательность ^& означает что за ней следует hex (как когда то в ДОСовской TERM90/95)
Если будут мысли, буду благодарен за подсказку.
admin
18 Янв 2017Возможно какие-то проблемы с тарифным планом, интернет подключен на тарифе? Модуль загружает какую нибудь информацию по GPRS? попробуйте загрузить главную страницу какого-либо сайта, с помощью запроса GET /index.php HTTP/1.1$0D$0AHost: site.ru$0D$0A$0D$0A$0D
Евгений
21 Янв 2017Здравствуйте. Все получилось! На самом деле, сменил сим карту и заработало и на МТС и на Теле2. Ту сим карту мне просто дали вместе с модемом (другим). Кстати приставка ” http://” сама приклеивается при отправке сообщения, а вот “www.” я добавлял, теперь нет. С Вашей помощью сдвинулся с мертвой точки. Большое спасибо!!!
PEDRO
14 Фев 2017Saludos ,Espero que no sea un problema el idioma ,Soy un poco novato en el tema
Algún ejemplo ayuda para enviar datos al THINSPEARK directamente mediante comandos AT Y un pic
el tema del pic lo tengo controlado pero la estructura de orden de envío no me aclaro
un saludo
admin
14 Фев 2017Приветствую, я так и не смог разобрать ваши предложения через переводчик.
PEDRO
16 Фев 2017Saludos.
Este es el comando para enviar 5 datos a 5 canales
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXXXXXX&field1=80&field2=30&field3=0&field4=8&field5=50
fiel1d=80
field2=30
field3=0
field4=8
field5=50
Desde un navegador insertas y funciona perfectamente
Un saludo.
Алесандр
17 Мар 2017Не могу получить ответ от сервера 193.193.165.166 порт 20332. Если в любом TCP клиенте подсоединиться к этому серверу и набрать команду #P#\r\n то получите ответ #AP#
У меня модуль NEOWAY M590 подключенный через USB-UART к терминальной программе
AL Terminal. На все команды реагирует без вопросов. Подключаясь к домашнему IP к программе SocketTest (как сервер) данные по TCP с модуля NEOWAY M590 уходят и он их принимает. С сервером 193.193.165.166:20332 ни как не получается подружить, не приходит ответ, такое ощущение как будто на сервер посылается строка не того формата или кодировки. Менял сим карты побывал Мегафон, МТС, TELE2 результат одинаковый. Посылаю команды в следующим порядке.
AT+XISP=0
OK
AT+CGDCONT=1,”IP”,”internet.tele2.ru”
OK
AT+XGAUTH=1,1,””,””
OK
AT+XIIC=1
OK
AT+XIIC?
+XIIC: 1, 10.200.245.43
OK
AT+TCPSETUP=0,193.193.165.166,20332
OK
+TCPSETUP:0,OK
AT+TCPSEND=0,7
>#P#\r\n
OK
+TCPSEND:0,7
Ответа от сервера нет, закрываю соединение
AT+TCPCLOSE=0
+TCPCLOSE:0,OK
Подскажите, что не так с этим сервером, очень важно получить с ним связь. Попробуйте кто нибудь связаться с ним с помощь такого модуля и послать ему запрос вида #P#\r\n и получить от него ответ #AP#.
admin
18 Мар 2017Здравствуйте, у меня были проблемы при отправке символа # в терминальной программе, модуль не понимал команду (команда проверки баланса *100#), как оказалось терминальная программа неправильно интерпретирует символ # введенный с клавиатуры, вместо него я прописываю в программе $23 (код ASCII символа #), после этого модуль начал понимать команду, может у вас такая же проблема?
Александр
18 Мар 2017Нет с # этим символом все в порядке, баланс тоже проходит, #P#\r\n такую команду если прислать на мой сервер то все приходит. Речь идет о сервере 193.193.165.166 он не принимает команду или не отвечает я не пойму, но он мне нужен для создания трекера, это сервер ORANGE GPS. Если есть возможность попробуйте со своего модуля послать ему эту команду и получить ответ.
alper tandogan
24 Ноя 2017Hi
I have project with m590.
I know there is a limitation AT+TCPSEND (1024)
For posting long data to HTTP server on web which method i have to use.
???
? call AT+TCPSEND multiple times ? TOTAL LENGHT / 1024 times.
Best ragards
Sorry i can write in english
Василий
4 Дек 2017Зачем ставить часы если можно получать время с модуля GPS. Проснулся-считал время и данне. Если надо отправить–разбудил модем и отправил.
Алексей
4 Июн 2018Уважаемый автор! В ваших записях в кодах есть ошибки с командами, а если быть точнее возьмём, к примеру, команду AT+CGDCONT=1,“IP”,“internet.mts.ru” . Как мы видим тут стоят косые кавычки “ ” , а должны стоять прямые ” ” . Я потратил кучу времени,чтобы разобраться с модемом и наконец-то понял, что модем не работал из-за них! Большое спасибо!
Василий
7 Июн 2018Проблема в кодировке текста Вашего браузера.
Георги Петров
23 Июл 2018Привет всем, у нас была проблема с GPRS-связью на NEOVAY M590 и была найдена хорошая ссылка со статьей, в которой очень хорошо описывается, как реализовать запрос GET: http://geekmatic.in.ua/http_zapros_m590_module. С помощью этой модификации приложение POST также работает:
//http://geekmatic.in.ua/http_zapros_m590_module
#include
SoftwareSerial mySerial(6, 5); // RX, TX номера пинов Arduino UNO для подключения к модулю GSM NEOWAY M590
int buttonState = 0;
int lastButtonState = 0;
int knopka = 2; //номер пина для подключения кнопки, которая должна замыкать этот пин на ноль питания
int bootGSM = 3; // номер пина для включения модуля GSM
const int analogInPin = A0;
void setup() {
mySerial.begin(9600);
Serial.begin(115200);
pinMode(knopka, INPUT_PULLUP); //инициализация дискретного входа для кнопки и внутренняя подтяжка его на плюс питания
pinMode(bootGSM, OUTPUT); //выходной пин для включения/выключения GSM модуля
digitalWrite(bootGSM, HIGH); //высокий уровень на вход BOOT модуля GSM для его выключения
Serial.println(“GSM init”);
}
void loop() {
buttonState = digitalRead(knopka); //состояние кнопки в данный момент
if (buttonState “, “”, 5);
sendAtCmd(GET + 0x0d, “+TCPRECV”, “”, 10);
sendAtCmd(“AT+TCPCLOSE=1”, “OK”, “Error”, 1);
Serial.println(GET);
//POST
sensorValue = analogRead(analogInPin);
String post_msg = “state=GSM” + String(analogInPin) + “&data=” + sensorValue;
String POST = “POST /file/write.php HTTP/1.1\r\nHost: GSM.com\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: ” + String(post_msg.length()) + “\r\nConnection: Close\r\n\r\n”+post_msg;
//q = “POST http://192.168.0.244/file/write.php HTTP/1.1\r\nHost: GSM.com\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 20\r\nConnection: Close\r\n\r\nstate=GSMGSM&data=12″;
sendAtCmd(“AT+TCPSETUP=1,94.26.55.177,80”, “OK”, “Error”, 5);
sendAtCmd(“AT+TCPSEND=1,” + String(POST.length(), DEC), “>”, “”, 5);
sendAtCmd(POST + 0x0d, “+TCPRECV”, “”, 10);
//sendAtCmd(q + 0x0d, “+TCPRECV”, “”, 10); //отправка запроса и ожидание ответа от сервера
Serial.println(POST);
sendAtCmd(“AT+TCPCLOSE=1”, “OK”, “Error”, 1); //закрываем TCP соединение номер 1
digitalWrite(bootGSM, LOW); //выключить GSM модуль
delay(500);
digitalWrite(bootGSM, HIGH);
}
lastButtonState = buttonState;
delay(50);
}
//функция отправки AT-команды в модем и диагностика ответа
bool sendAtCmd(String at_send, String ok_answer, String err_answer, uint32_t wait_sec) {
Serial.print(“sendAtCmd(“);
Serial.print(at_send);
Serial.println(“)”);
uint32_t exit_ms = millis() + wait_sec * 1000;
String answer;
ok_answer.toUpperCase();
err_answer.toUpperCase();
if (at_send != “”) {
mySerial.println(at_send);
}
answer = “”;
while (millis() -1)) {
Serial.println(“AT_ERR”);
return false;
}
else if (answer.indexOf(ok_answer) > -1) {
Serial.println(“AT_OK”);
return true;
}
}
Serial.println(“AT_TIMEOUT”);
return false;
}
Андрей
21 Ноя 2018Где можно найти прошивку?
На оф. сайте нету, нашел только инструкцию по обновлению.
Андрей
21 Ноя 2018не обязательно самую новую, хотя бы 1.20
uduli
5 Янв 2021https://vkusstory.ru/
ibivobej
10 Мар 2021Все о телевизорах можно найти на блоге obzoryvideo.ru
omuku
2 Апр 2021Рыбная ловля и охота
ukanul
4 Июн 2021https://videogadzhet.ru/