Отправка SMS на русском языке с помощью GSM-модулей Neoway
Выбор GSM-модулей Neoway в качестве модема обусловлен несколькими причинами: высоким качеством при низкой стоимости модулей и максимальным удобством монтажа, которое обеспечивается небольшим количеством выводов и корпусом LCC. Производитель Neoway Technology зарекомендовал себя на российском рынке как надежный поставщик и ответственный партнер. Официальным дистрибьютором компании Neoway в России является компания «ЭФО».
GSM-модули Neoway предусматривают два режима отправки SMS-сообщений: текстовый и PDU (Packet Data Unit). В текстовом режиме возможна отправка сообщений, содержащих только латинские буквы, цифры и символы. Для отправки SMS с кириллическими символами необходимо использовать режим PDU.
Переключение режимов передачи SMS осуществляется командой AT+CMGF:
AT+CMGF=0 — включение режима PDU; AT+CMGF=1 — включение текстового режима.
В режиме PDU SMS представляет собой набор данных, передаваемых модулю в виде символов ASCII.
Рассмотрим формат посылаемого SMS-сообщения и последовательность команд, подаваемых на GSM-модуль. Для примера сформируем пакет PDU SMS-сообщения, отправляемого на номер +70123456789 и содержащего слово «Привет!».
Формат передаваемого SMS-сообщения в режиме PDU
Формат передаваемого SMS представлен на рис. 1.
Краткое описание полей передаваемого SMS приведено в таблице 1.
Название поля PDU |
Длина, байт |
Краткое описание |
SCA — Service Center Address |
1–12 |
Номер телефона Центра SMS (может не указываться) |
PDU Type |
1 |
Тип PDU |
MR — Message Reference |
1 |
Порядковый номер сообщения, устанавливаемый самим модулем |
DA — Destination Address |
2–12 |
Номер телефона получателя сообщения |
PID — Protocol Identifier |
1 |
Идентификатор протокола |
DCS — Data Coding Scheme |
1 |
Кодировка сообщения |
VP — Validity Period |
0,1 или 7 |
Время жизни SMS |
UDL — User Data Length |
1 |
Длина поля User Data в байтах |
UD — User Data |
0–140 |
Сообщение |
Рассмотрим назначение отдельных полей пакета PDU передаваемого сообщения.
- SCA (Service Center Address) — номертелефонаЦентраSMS (SMSC).
Данное поле не является обязательным, так как номер SMSC хранится на SIM-карте и считывается GSM-модулями Neoway автоматически. Воспользуемся данной возможностью и не будем указывать номер Центра SMS в нашем примере, тем более что в этом случае содержимое PDU не зависит от используемой SIM-карты. Если номер SMSC в PDU не указывается, поле SCA принимает значение 00h.
Если потребуется считать номер Центра SMS из GSM-модуля, это можно сделать с помощью команды AT+CSCA?
- PDU Type — тип PDU.
– RP (Reply Path):
0 — путь для ответа не определен;
1 — путь для ответа определен, используется тот же Центр SMS (SMSC).
– UDHI (User Data Header Included):
0 — поле UD содержит только само сообщение;
1 — поле UD содержит сообщение и дополнительный заголовок.
– SRR (Status Report Request):
0 — статус сообщения не запрашивается;
1 — статус сообщения запрашивается.
– VPF (Validity Period Format):
00 — поле VP отсутствует;
01 — зарезервировано;
10 — поле VP содержит временные данные в относительном формате;
11 — поле VP содержит временные данные в абсолютном формате.
– RD (Reject Duplicates):
0 — SMSC следует переслать сообщение получателю в случае, если оно имеет те же значения полей MR и DA, что и предыдущее сообщение;
1 — SMSC следует отклонить сообщение в случае, если оно имеет те же значения полей MR и DA, что и предыдущее сообщение.
– MTI (Message Type Indicator):
00 — принимаемое сообщение (от SMSC к модулю) или подтверждение приема
(от модуля к SMSC);
01 — отправляемое сообщение (от модуля к SMSC) или подтверждение отправки (от SMSC к модулю);
10 — отчет о доставке (от SMSC к модулю) или SMS-команда (от модуля к SMSC);
11 — зарезервировано.
На рис. 2 представлены биты поля PDU Type в случае отправляемого SMS.
Для упрощения нашего примера условимся не использовать поле VP (время жизни SMS) и установим биты VPF в нулевое значение. Также в нулевое значение установим биты RP, UDHI, SRR, RD. Биты MTI отправляемого сообщения необходимо установить в значение 01. Таким образом значение байта поля PDU Type принимаем равным 01h.
- MR (Message Reference) — порядковый номер сообщения, определяется самим модулем. В PDU значение поля устанавливается равным 00h.
- DA (Destination Address) — номер телефона получателя сообщения.
Поле DA состоит из трех частей, представленных в таблице 2.
Количество цифр в номере получателя |
Тип номера получателя |
Номер получателя |
1 байт |
1 байт |
0–6 байт |
– Количество цифр в номере получателя подсчитывается без учета знака «+» и представляется в шестнадцатеричном формате. Например, для номера +70123456789 значение байта «Количество цифр в номере получателя» равняется 0Bh (11 в десятичной системе счисления).
– Тип номера получателя.
В случае международного формата номера байт «Тип номера получателя» устанавливается равным 91h, в случае местного формата — 81h.
– Номер получателя.
Поле «Номер получателя» формируется следующим образом: а) в случае международного формата номера знак «+» отбрасывается; б) если количество цифр в номере нечетное, в конце добавляется «F»; в) цифры номера попарно переставляются местами.
Например, для номера +70123456789 поле «Номер получателя» будет иметь вид: 0721436587F9h, а целиком поле DA — 0B910721436587F9h.
- PID (Protocol Identifier) — идентификатор протокола.
В нашем случае значение поля PID необходимо устанавливать в значение 00h. Подробнее об особенностях данного поля можно прочитать в ETSI GSM 03.40, пункт 9.2.3.9.
- DCS (Data Coding Scheme) — кодировка сообщения.
Для отправки сообщений кириллическими символами необходимо использовать кодировку UCS2. Поэтому значение поля DCS в нашем случае следует установить равным 08h (обычное SMS) или 18h (flash-SMS, которое сразу выводится на экран телефона вместо сохранения в памяти).
- VP (Validity Period) — время жизни сообщения.
Время жизни сообщения — время, по истечении которого сообщение уничтожается (стирается из памяти SMSC), если не было доставлено адресату.
Это поле связано с битами VPF поля PDU Type, существует три варианта их совместного использования.
– Поле VP не используется.
В этом случае длина поля VP — 0 байт, биты VPF должны быть установлены в значение 00.
– Поле VP содержит данные о времени жизни в относительном формате.
В этом случае длина поля VP — 1 байт, биты VPF должны быть установлены в значение 10 (в двоичной системе).
Возможные значения поля VP в случае использования относительного формата времени и формулы для расчета соответствующего времени жизни сообщения приведены в таблице 3.
Значение VP шестнадцатеричное |
Значение VP десятичное |
Соответствующее значению VP время |
Максимальное время жизни |
1…8F |
0…143 |
(VP + 1) × 5 минут |
12 часов |
90…A7 |
144…167 |
12 часов + (VP — 143) × 30 минут |
24 часа |
A8…C4 |
168…196 |
(VP — 166) ×1 день |
30 дней |
C5…FF |
197…255 |
(VP — 192) × 1 неделю |
63 недели |
– Поле VP содержит данные о времени жизни в абсолютном формате.
В этом случае длина поля VP — 7 байт, биты VPF должны быть установлены в значение 11 (в двоичной системе).
Назначение байт в поле VP при использовании абсолютного формата времени приведено в таблице 4.
Байт 1 |
Байт 2 |
Байт 3 |
Байт 4 |
Байт 5 |
Байт 6 |
Байт 7 |
Год |
Месяц |
День |
Час |
Минуты |
Секунды |
Часовой пояс |
При этом каждый байт содержит по два десятичных числа, переставленных местами. Например, байт 2 в случае месяца мая будет иметь значение 50h.
Год представлен последними двумя цифрами.
Часовой пояс указывает разницу между местным временем и временем по Гринвичу (GMT), выраженную в четвертях часа. При этом первый бит указывает знак этой разницы: 0 — разница положительная, 1 — разница отрицательная. То есть байт 7 в случае часового пояса GMT+3 будет иметь значение 21h.
Ранее мы условились в целях упрощения не использовать поле VP в нашем примере и установили два бита VPF поля PDU Type в значение 00 (поле VP отсутствует). Поэтому в пакете PDU нашего примера данное поле будет отсутствовать.
- UDL (User Data Length) — длина поля UD в байтах.
При использовании интересующей нас кодировки UCS2 значение поля UDL можно вычислить, умножив количество символов в передаваемом сообщении на 2 (каждый символ кодируется двумя байтами). Для сообщения «Привет!» значение поля UDL равно 0Eh (14 в десятичной системе счисления).
- UD (User Data) — сообщение.
Для отправки сообщения кириллицей необходимо использовать кодировку UCS2, в этой кодировке каждая буква или символ кодируется двумя байтами. Кодировка UCS2 представлена на рис. 3.
Сообщение «Привет!» в кодировке UCS2 имеет вид:
П — 041F р — 0440 и — 0438 в — 0432 е — 0435 т — 0442 ! — 0021 Привет! — 041F044004380432043504420021
Процесс отправки SMS-сообщения GSM-модулем Neoway
Процесс отправки SMS в режиме PDU состоит из следующих шагов:
- Включение режима PDU:
AT+CMGF=0
- Ввод команды отправки SMS с указанием количества байт в пакете PDU за исключением поля SCA.
В случае сообщения «Привет!» эта величина — 27:
AT+CMGS=27
Важно, чтобы эта команда завершалась символом ‘\r’ (0Dh), а не чем-то другим. После этого модуль выдает приглашение ‘>’ ввести данные пакета PDU.
- Ввод данных пакета PDU.
В случае сообщения «Привет!» они выглядят так:
0001000B91хххххххххххх00080E041F044004380432043504420021 (в текстовом виде),
где хххххххххххх — поле номера получателя, у которого переставлены местами цифры и добавлен символ «F» на конце в случае нечетного количества цифр в номере.
Для номера +70123456789 поле номера получателя будет иметь вид: 0721436587F9, а весь пакет PDU с сообщением «Привет!», отправляемый на данный номер:
0001000B910721436587F900080E041F044004380432043504420021
Ввод данных пакета PDU должен заканчиваться байтом 1Ah.
В случае успешной отправки SMS-сообщения ответ модуля имеет вид:
+CMGS: <Message Reference> OK,
где «Message Reference» — порядковый номер сообщения, установленный модулем (см. описание поля MR пакета PDU).
Заключение
При отправке SMS применение режима PDU позволяет не только использовать в сообщении кириллические символы, но и управлять множеством параметров самого сообщения, что может оказаться полезным для части M2M-приложений.
Применение GSM-модулей Neoway в телеметрических приложениях предоставляет возможность снизить стоимость устройств, повысить надежность, упростить процессы производства оборудования и его последующего обслуживания.
- Neoway_M660_AT_Command_Set_V3_9
- ETSI GSM Technical Specification GSM 03.40
- wless.ru