GSM модуль представляет собой беспроводное коммуникационное устройство (модем) для приема/передачи данных в сетях мобильной связи. В любом мобильном телефоне установлен такой модуль, благодаря которому возможно голосовое общение, прием сообщений, выход в интернет. В этой статье я расскажу про GSM/GPRS модуль NEOWAY M590, приведу описание и назначение основных команд. Данный модуль, смонтированный на плате с минимальной обвязкой (а также в виде конструктора) можно приобрести в Китае, где он позиционируется как модуль под Arduino.
На следующей картинке представлена схема с рекомендуемой обвязкой модуля: GSM модуль NEOWAY M590, схема подключения Модуль питается напряжением 3,3 – 4,5В, максимальный ток потребления кратковременно может достигать 2А (особенно в момент включения), поэтому конденсатор C1 должен иметь минимальную емкость в 1000 мкФ, желательно больше. В режиме ожидания средний ток потребления модуля равен 25 мА.
Для включения модуля необходимо подать положительный импульс на линию ON/OFF (база транзистора VT1), длительность импульса должна быть не менее 300 мс. После успешного включения и выхода в рабочий режим, светодиод статуса HL1 начнет мигать с частотой в 1Гц. Рекомендуется выдержать паузу в 2 секунды после включения, прежде чем отправлять команды на модуль. При включении модуль выдает сообщение MODEM:STARTUP, затем через 10-15 секунд сообщение +PBREADY, означающее, что телефонная книга готова к использованию.
Для выключения модуля необходимо повторно подать такой же положительный импульс, или же отправить специальную команду на выключение (AT+CPWROFF). В выключенном состоянии модуль потребляет ток в пределах 80 мкА.
Номинальное рабочее напряжение линий ввода/вывода модуля (RXD, TXD, DTR, RING, LED) составляет 2,85В. Напряжения на линиях ввода (RXD, DTR) не должны превышать 3,3В, для исключения их повреждения, поэтому для их сопряжения с логическими уровнями большего напряжения установлены элементы VD1, R1, VD2, R2. С помощью резисторов эти входы подтягиваются к линии VCCIO, после включения модуля на этой линии появляется напряжение величиной 2,85В (макс. выход. ток 3 мА), тем самым обеспечивается безопасный логический уровень для линий ввода. Диоды предотвращают входы от перенапряжения.
В случае зависания модуля, имеется возможность аварийного выключения, для этого необходимо подать положительный импульс на линию EMERGENCY OFF (база транзистора VT2) длительностью 100 мс. После этого необходимо выдержать паузу в 5 секунд перед повторным включением, чтобы исключить возможность повреждения модуля.
“Общение” с модулем осуществляется с помощью стандартного интерфейса UART, линия MCU TX подключается к выходу передатчика управляющего устройства (микроконтроллер, компьютер), вывод MCU RX к входу приемника управляющего устройства.
Для снижения энергопотребления в модуле предусмотрен спящий режим, по умолчанию этот режим отключен, для его включения необходимо предварительно подать команду на разрешение спящего режима (at+enpwrsave=1). Затем необходимо установить низкий логический уровень на линии SLEEP, после чего, через 10-30 секунд модуль “заснет”. Во время “сна” модуль не реагирует на команды, поступающие по UART. Установка высокого логического уровня на линии SLEEP, выводит модуль из спящего режима в течение 50 мс. Если во время “сна” поступит SMS сообщение, данные от сервера, или входящий звонок, то модуль проснется и отправить соответствующее сообщение по UART, после чего управляющее устройство должно выставить высокий логический уровень на линии SLEEP, чтобы продолжить обмен данными. Если этого не произойдет, модуль автоматически уйдет в “сон” в течение 10-30 сек. В спящем режиме потребляемый ток составляет 2,5-3 мА.
При поступлении входящего вызова на линии RING появляются импульсы с низким логическим уровнем длительностью 30 мс, частота следования один раз в 5 секунд (в такт звуку гудка). При получении SMS сообщения, на линии появляется однократный импульс длительностью 25-35 мс. Данную линию можно использовать для генерации прерываний в управляющем устройстве.
Линии DCD (16-й вывод модуля), DSR (17-й вывод модуля) не используются, остальные выводы задействованы для подключения СИМ карты A2.
В модуле отсутствует микрофонный вход, поэтому голосовую связь осуществить не получится, но само соединение устанавливается, если принять звонок от модуля, в динамике будет стоять тишина.
Команды настройки модуля: Описание Команда настройки режима “эха” Формат ATE<n> Параметр <n>: 0 – выключить; 1 – включить Ответ OK Пример ATE0
OK
Описание Команда проверки модели и версии модуля Формат ati Пример ati NEOWAY M590 REVISION 01.30c
OK Модель
Версия
Описание Команда чтения версии прошивки модуля Формат at+getvers Ответ <версия> OK или ERROR Пример at+getvers 1103_C6C30000_V0130c
OK Версия прошивки
Описание Команда сохранения текущей конфигурации настроек в EEPROM память Формат AT&W<значение> Параметр <значение>: 0 – сохранить настройки в 0-м профиле, параметр 0 можно не указывать; 1 – сохранить настройки в 1-м профиле Ответ OK Пример AT&W
OK
Описание Команда настройки скорости порта UART Формат AT+IPR=<скорость предачи> Параметр <скорость предачи>: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек Ответ OK или ERROR Пример AT+IPR=9600 OK Запрос параметра AT+IPR? +IPR: 9600
OK Скорость порта равна 9600 бит/сек
Описание Команда проверки статуса модуля Формат AT+CPAS Параметр <pas>: 0 – готов к работе 2 – неизвестно 3 – входящий звонок 4 – в режиме соединения 5 – спящий режим Ответ +CPAS: <pas> OK (или ERROR) Пример AT+CPAS +CPAS: 0
OK Модуль готов к работе
Описание Команда проверки регистрации модуля в сети Формат AT+CREG: <mode> Параметр <mode>: 0 – выключить уведомление о регистрации в сети 1 – включить уведомление о регистрации в сети +CREG: <stat> 2 – включить уведомление о регистрации в сети и информацию о местоположении<
stat>: 0 – не зарегистрирован, поиск сети не выполняется 1 – зарегистрирован в домашней сети 2 – регистрация отклонена 3 – не зарегистрирован, выполняется поиск сети 4 – неизвестно 5 – зарегистрирован, зона роуминга Ответ OK или ERROR
AT+CREG: <mode>,<stat> OK Пример AT+CREG=1 OK Включить уведомление о регистрации в сети Запрос параметров AT+CREG? +CREG: 0,1
OK Зарегистрирован в домашней сети
Описание Команда настройки спящего режима Формат at+enpwrsave=<n> Параметр <n>: 0 – спящий режим запрещен; 1 – спящий режим разрешен Ответ OK или ERROR Пример at+enpwrsave=1 OK Примечание Значение параметра <n> не сохраняется после выключения модуля.
Описание Команда выключения модуля Формат AT+CPWROFF Ответ OK или ERROR Пример AT+CPWROFF OK Примечание Не следует одновременно подавать команду и оперировать выводом ON/OFF модуля.
Команды управления вызовом: Описание Команда настройки автоматического определения номера (АОН) Формат AT+CLIP=<n> Параметр <n>: 0 – АОН выключен; 1 – АОН включен Ответ OK Пример AT+CLIP=1 OK Сообщение от модуля RING Входящий звонок (АОН отключен)
RING
+CLIP: «79XXXXXXXXX»,145,,,»»,0 Входящий звонок (АОН включен)
«79XXXXXXXXX» – номер вызывающего телефона «» – имя абонента Примечание Сообщение RING повторяется после каждого гудка
Описание Исходящий вызов для установления голосового соединения Формат ATD+79XXXXXXXXX; Параметр 79XXXXXXXXX – номер вызываемого телефона Ответ OK Пример ATD+79630749105; OK Сообщение от модуля CONNECT BUSY NO ANSWER NO CARRIER Соединение установлено Занят другим сеансом связи Нет ответа Вызов сброшен
Описание Команда разъединения соединений (повесить трубку) Формат ATH<n> Параметр <n>: 0 – разъединить все вызовы, параметр 0 можно не указывать; 1 – разъединить исходящий вызов Ответ OK Пример ATH OK
Команды для работы с SMS сообщениями: Описание Команда настройки формата SMS сообщений Формат AT+CMGF=<режим> Параметр <режим>: 0 – PDU формат; 1 – текстовый формат Ответ OK или ERROR Пример AT+CMGF =1 OK Примечание Если сообщение отправляется в PDU формате, необходимо установить кодировку UCS2 (при использовании кириллических символов), для текстового формата кодировку GSM, либо UCS2
В PDU формате, текст представлен в виде последовательности шестнадцатеричных чисел.
Описание Команда выбора кодировки текста Формат AT+CSCS=<chset> Параметр <chset>: «GSM» – кодировка ASCII «HEX» – кодировка шестнадцатеричными значениями «IRA» – международный справочный алфавит «PCCP437» – кодировка CP437 (IBM PC) «8859-1» – кодовые страницы семейства ISO 8859 «UCS2» – кодировка Unicode (2 байта на символ) Ответ OK или ERROR Пример AT+CMGF =»GSM» OK
Описание Команда чтения SMS сообщения Формат AT+CMGR=<index> Параметр <index>: номер считываемого сообщения Ответ Для текстового формата (CMGF=1): +CMGR: <stat>,<oa>,<alpha>,<scts><CR><LF><data> OK (или ERROR)
Для PDU формата (CMGF=0): +CMGR: <stat>,<alpha>,<length>,<scts><CR><LF><pdu> OK (или ERROR)
<stat> — статус SMS сообщения: 0 – для PDU формата, REC UNREAD – для текстового формата: входящее непрочитанное сообщение 1 – для PDU формата, REC READ – для текстового формата: входящее прочитанное сообщение 2 – для PDU формата, STO UNSENT – для текстового формата: неотправленное (исходящее) сообщение 3 – для PDU формата, STO SENT – для текстового формата: отправленное сообщение 4 – для PDU формата, ALL – для текстового формата: все сообщения
<alpha> – имя отправителя <scts> – отметка времени сервис-центра в формате: год/месяц/день, часы: минуты: секунды ± часовой пояс <data> – текст сообщения в ASCII символах <length> – количество символов сообщения (для PDU формата) <pdu> – информация о SMS и текст сообщения в PDU формате Пример AT+CMGR=1 +CMGR: «REC READ»,»+79123456789″,»»,»15/11/13,14:39:35+32″ GPS-START2
OK Для текстового формата кодировка ASCII (GSM) Получено сообщение: GPS-START2
AT+CMGR=1
+CMGR: «REC READ»,»+79123456789″,»»,»15/11/13,14:39:35+32″ 004700500053002D005300540041005200540032
OK Для текстового формата кодировка Unicode (UCS2) Получено сообщение: GPS-START2
AT+CMGR=1
+CMGR: 1,,28 07919730071111F1040B919721436587F90000511131419353020 A47E8B435A506A55419
OK Для PDU формата специальная 7-ми битная кодировка Получено сообщение: GPS-START2
Описание Команда отправки SMS сообщения Формат Для текстового формата (CMGF=1): AT+CMGS=<da><CR><text><ctrl-Z>
Для PDU формата (CMGF=0): AT+CMGS=<length><CR><pdu><ctrl-Z> Параметр <da> – номер на который посылается сообщение (в ASCII символах) <text> – текст сообщения в ASCII символах <length> – количество байт сообщения в PDU формате <pdu> – информация о SMS и текст сообщения в PDU формате Ответ +CMGS: <mr> OK (или ERROR)
<mr> – условный номер, присваиваемый модулем Пример AT+CMGS=»+79123456789″<CR>
Perezvoni mne<ctrl-Z>
+CMGS: 2
OK Для текстового формата Отправка сообщения «Perezvoni mne»
AT+CMGS=27<CR>
> 07919740030900F001000B919721436587F900080E 041F044004380432043504420021<ctrl-Z>
+CMGS: 2
OK Для PDU формата кодировка Unicode (UCS2) Отправка сообщения «Привет!»
AT+CMGS=22<CR>
> 07919740030900F001000B919721436587F900000A 47E8B435A506A55419<ctrl-Z>
+CMGS: 2
OK Для PDU формата специальная 7-ми битная кодировка Отправка сообщения «GPS-START2» Примечание Сначала необходимо отправить команду AT+CMGS=»+79123456789″, затем дождаться приглашения в виде символов «> » (> и пробел), после чего отправить текст сообщения. Для завершения процесса следует отправить символ <ctrl-Z> (шестнадцатеричное значение 0х1A)
Кириллические символы необходимо отправлять в кодировке Unicode (UCS2), только в формате PDU. Латинские символы можно отправлять в текстовом формате с кодировкой ASCII (GSM), либо в формате PDU с кодировкой Unicode (UCS2), или при помощи специальной 7-ми битной кодировки символами ASCII
Описание Команда удаления SMS сообщений Формат AT+CMGS=<index>,<delflag> Параметр <index> – порядковый номер удаляемого сообщения, для удаления одного сообщения <delflag> можно не указывать
<delflag>: 0 – удалить сообщение с номером <index> 1 – удалить все прочитанные сообщения 2 – удалить все прочитанные и отправленные сообщения 3 – удалить все прочитанные, отправленные и неотправленные сообщения 4 – удалить все сообщения Ответ OK или ERROR Пример AT+CMGD=1 OK Удалить сообщение с номером 1
AT+CMGD=1,4
OK Удалить все сообщения
Отправить сообщение в текстовом формате достаточно просто, а вот в PDU формате могут возникнуть трудности. В PDU формате SMS сообщение закодировано в виде последовательности шестнадцатеричных чисел, рассмотрим подробнее структуру этого формата:
Структура принятого SMS сообщения в формате PDU. Обозначение SCA PDU Type OA PID DCS SCTS UDL UD Длина, байты 1-12 1 2-12 1 1 7 1 0-140
Структура передаваемого SMS сообщения в формате PDU. Обозначение SCA PDU Type MR DA PID DCS VP UDL UD Длина, байты 1-12 1 1 2-12 1 1 0,1,7 1 0-140
SCA – номер SMS центра, DA – номер телефона на который отправляем сообщение, OA – номер телефона от которого получено сообщение. Каждое из этих полей состоит из 3-х частей: SCA Размер поля SCA Тип номера Номер 1 байт 1 байт От 0 до 6 байт DA, OA Длина номера Тип номер Номер 1 байт 1 байт От 0 до 6 байт
Тип номера представляет собой формат номера, например, международному формату соответствует шестнадцатеричное число 91h.
Номер формируется следующим образом (для примера возьмем +79123456789): если значение количества цифр номера нечетное, то дописываем в конце символ F, затем переставляем местами каждые две цифры, получим в итоге 9721436587F9.
“Размер поля SCA” равно количеству байт, которое занимают номер и его тип, для номера это 6 байт (9721436587F9) + тип 1 байт (91), итого 7 байт (07), в результате поле SCA будет выглядеть следующим образом: 07919721436587F9.
Для полей DA, OA, “длина номера” равна количеству цифр в номере, то есть 11 цифр для номера +79123456789, в шестнадцатеричном представлении получим 0Bh, В результате поля DA, OA будут иметь следующий вид: 0B919721436587F9.
Поле SCA можно не использовать, указав вместо него значение 00h, при этом модуль автоматически возьмет номер SMS центра из СИМ карты.
PDU Type – это байт с настройками сообщения: Бит Название Назначение 7 RP 0 – путь для ответа не определен; 1 – путь для ответа определен 6 UDHI 0 – поле UD содержит сообщение; 1 – поле UD содержит сообщение и дополнительный заголовок. 5 SRR 0 – статус сообщения не запрашивается; 1 – статус сообщения запрашивается. 4,3 VPF 00 – поле VP отсутствует; 01 – зарезервировано; 10 – поле VP содержит время жизни сообщения в относительном формате; 11 – поле VP содержит время жизни сообщения в абсолютном формате. 2 RD 0 – сервисному центру следует переслать сообщение получателю, если оно имеет те же значения полей MR и DA, что и предыдущее сообщение; 1 – сервисному центру следует отклонить сообщение, если оно имеет те же значения полей MR и DA, что и предыдущее сообщение. 1,0 MTI 00 – если сообщение принято или подтверждение приема; 01 – если сообщение отправляется или подтверждение отправки; 10 — отчет о доставке или SMS-команда; 11 — зарезервировано.
Для успешной отправки сообщения, поле PDU Type в общем случае может иметь значение 01h (00000001). Поле MTI равно 01, это указывает что сообщение исходящее. Поле VPF равно 00, для упрощения, чтобы исключить поле VP из PDU сообщения. Для принятого сообщения поле MTI, как правило, равно 00.
MR – порядковый номер сообщения, определяется модулем. Для передачи сообщения необходимо установить значение 00h. PID – идентификатор протокола. Для передачи сообщения необходимо установить значение 00h.
DCS – кодировка текста сообщения: 00h – кодировка 7-бит (символы ASCII, только латинские); 04h – кодировка 8-бит (символы ASCII, только латинские); 08h – кодировка Unicode (UCS2), используется 2 байта на символ; 10h – кодировка 7-бит, сообщение выводится сразу на экран; 14h – кодировка 8-бит, сообщение выводится сразу на экран; 18h – кодировка Unicode (UCS2), сообщение выводится сразу на экран.
Специальная 7-ми битная кодировка представляет собой сжатый вид 8-ми битной кодировки. В ASCII таблице каждый символ занимает 1 байт (8 бит), но латинские символы занимают только 7 бит, самый старший незначащий бит равен нулю. Исходя из этого, придумали метод сжатия данных, в котором этот старший бит тоже используется, то есть биты ASCII символов перераспределяются таким образом, чтобы занять все старшие свободные биты. Для 8-ми битной кодировки в одно SMS сообщение помещается 140 символов, а при 7-ми битной кодировке 160. Для этих кодировок можно использовать только латинские символы, для кириллических символов необходимо использовать кодировку Unicode (справедливо и для латинских символов), где каждый символ кодируется 2-мя байтами, в одно SMS сообщение при этом поместится 70 символов.
VP – время жизни сообщения, необходимо для центра SMS сообщений, по истечении этого времени сообщение удаляется, если оно не получено абонентом. Как было сказано выше, чтобы упростить PDU сообщение, поле VP можно исключить, установив значение VPF равным 00, в поле PDU Type.
SCTS – время получения сообщения SMS центром, может отсутствовать. UDL – значение длины поля UD в байтах, то есть размер текста сообщения. UD – текст сообщения.
Рассмотрим пример отправляемого сообщения “Привет” в PDU формате:
AT+CMGS=27 07919740030900F001000B919721436587F900080E041F044004380432043504420021
Число 27 после названия команды (CMGS) означает, что длина PDU сообщения без учета поля SCA равна 27 байт.
07919740030900F0 – закодированный номер SMS центра (+79043090000); 01 – байт с настройками PDU сообщения (PDU Byte); 00 – порядковый номер сообщения (MR); 0B919721436587F9 – закодированный номер, на который отправляем сообщение (+79123456789); 00 – идентификатор протокола (PID); 08 – кодировка текста сообщения (DCS), кодировка Unicode (UCS2); 0E – длина текстового сообщения (UDL), 14 байт. 041F044004380432043504420021 – текст сообщения (UD), “Привет”.
Как было сказано выше, поле SCA с номером SMS центра можно исключить из PDU сообщения, указав вместо него значение 00, модуль автоматически возьмет номер из СИМ карты.
Если вы собираетесь отправлять SMS в текстовом виде и латинскими символами, сначала надо настроить формат сообщений командой AT+CMGF=1$0D (1=текстовый формат, $0D это возврат каретки в программе Terminal v1.9, ну то есть символ ), потом настраиваем кодировку текста сообщения командой AT+CSCS=»GSM»$0D (GSM — кодировка ASCII). Далее вводим команду для отправки сообщения: AT+CMGS=»+79XXXXXXXXX»$0D (+79XXXXXXXXX — номер абонента кому шлем SMS), после этого модуль выдаст приглашение в виде символов > (> и пробел), далее вводим текст сообщения в конце которого вводим символы $1A (то есть символ ctrl-Z), тем самым говоря модулю что сообщение окончено, после этого в случае успеха модуль выдаст сообщение +CMGS: и OK.
cat smsd.conf # Example smsd.conf. Read the manual for a description devices = GSM1 logfile = /var/log/smsd.log loglevel = 5 [GSM1] device = /dev/ttyS4 incoming = yes baudrate = 38400 # аппаратное управление потоком rtscts = no mode = new smsc = 79282000002
Ссылки
http://radiolaba.ru/microcotrollers/gsm-modul-neoway-m590-opisanie-i-komandyi-upravleniya.html