Звонки, SMS и GPRS с помощью GSM-модуля Neoway M590
Сегодня поговорим о GSM-модуле Neoway M590. С его помощью можно делать и принимать звонки, посылать и принимать SMS, а также выходить в интернет по GPRS. Цена модуля на AliExpress составляет всего лишь 140 рублей с доставкой в Россию (2.3$). Для сравнения, ближайшие аналоги в лице модулей SIM800C и SIM800L обойдутся вам в 290 и 460 рублей соответственно.
Пайка и подключение
Модуль продается в виде конструктора из платы и компонентов, которые нужно припаять к этой плате. Собрать модуль не сложно по картинкам, изображающим модуль в собранном виде. Быть может, понадобится еще приложить щупы мультиметра, чтобы понять, какой стороной припаивать светодиод. Если ранее вам не доводилось паять SMD-компоненты, это не сложно. Как это делается, можно посмотреть на YouTube, или прочитать в дополнении в конце заметки Как я спаял свою первую электронную схему.
Что нужно учитывать при подключении:
- Для активации модуля контакт K нужно подсоединить к земле, при помощи перемычки, или припаяв;
- Модуль питается от 5 В и может потреблять довольно большой ток (200 мА и выше). Поэтому, если запитать его, скажем, от Arduino, он может не работать. Лично я запитал его от лабораторного блока питания;
- Модуль использует 3.3-вольтовую логику. Я просто выставил соответствующую перемычку на адаптере с FT232. В общем случае либо вся логика в цепи должна быть 3.3-вольтовой (например, бывают такие модификации Arduino), или же следует использовать преобразователь логических уровней;
- Взаимодействие с модулем происходит по UART на скорости 115200 бод. Я использовал screen, и, соответственно, команду
screen /dev/ttyUSB0 115200; - Модулю нужна полноразмерная SIM-карта, которыми сейчас мало кто пользуется. В вашем телефоне, скорее всего, используется какая-нибудь Nano SIM, или вроде того. Соответственно, понадобится переходник и кусочек двухстороннего скотча. На AliExpress переходник стоит менее 30 рублей (0.5$), в российских интернет-магазинах он обойдется где-то в 250 рублей, в салонах связи – примерно в 500 рублей. В теории можно обойтись без адаптера, положившись на ловкость рук, но с адаптером намного удобнее;
Спаянный и подключенный к компьютеру модуль:

Это что касается подключения. Теперь поговорим об UART-интерфейсе.
Основные AT-команды, звонки и SMS
Будучи готовым, модуль присылает строчку:
+PBREADY
Проверяем, что мы подключены к сети:
AT+COPS?
Ответ:
+COPS: 0,0,"MTS-RUS"
OK
Теперь, допустим, мы хотим отправить SMS. Делается это так:
AT+CSCS="GSM"
OK
AT+CMGF=1
OK
AT+CMGS="+79161234567"
> This is a test message.^Z
+CMGS: 117
OK
Здесь ^Z означает нажатие Ctr+Z. Этому сочетанию соответствует символ с кодом 26 в десятичной системе счисления.
Чтение входящих SMS:
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+79161112233","","17/06/13,20:31:59+18"
This is a test message.
+CMGL: 2,"REC READ","+79164445566","","17/06/13,22:45:12+18"
Test SMS
OK
Удаление входящего SMS с заданным id:
AT+CMGD=1
OK
Можно позвонить на заданный номер:
ATD+79161234567;
OK
Если взяли трубку, придет:
CONNECT
Когда трубку положили, придет:
NO CARRIER
Такой же ответ придет в случае, если звонок был сброшен.
Положить трубку на своей стороне мы можем так:
ATH
OK
Чтобы принимать звонки, для начала скажем:
AT+CLIP=1
OK
Эта команда включает +CLIP нотификации. Помимо прочего, через них работает АОН (определитель номера). Теперь при входящем звонке где-то раз в 5 секунд нам будет приходить:
RING
+CLIP: "79161234567",145,,,"",0
Ответить на звонок можно командой ATA. Сбросить входящий звонок можно уже рассмотренной выше командой ATH.
Выход в интернет через GPRS
Проверяем, есть ли подключение к GPRS:
AT+CGATT?
+CGATT: 1
OK
Указываем параметры подключения:
AT+XISP=0
OK
AT+CGDCONT=1,"IP","internet.mts.ru"
OK
AT+XGAUTH=1,1,"mts","mts"
OK
AT+XIIC=1
OK
Эти параметры я взял с сайта МТС. У вашего оператора они могут отличаться.
На сервере запускаем netcat:
nc -l -p 31337
Модулю говорим:
AT+TCPSETUP=1,46.101.123.45,31337
OK
+TCPSETUP:1,OK
AT+TCPSEND=1,5
>
Здесь нужно ввести пять символов, которые собираемся послать по TCP. Эхо тут отсутствует, поэтому вводимых символов мы не увидим. Далее:
OK
+TCPRECV:1,7,Hello!
AT+TCPCLOSE=1
+TCPCLOSE:1,OK
Как видите, передача данных в обе стороны превосходно работает. При желании не составляет труда написать свой HTTP-клиент (или сервер), или реализовать любой другой сетевой протокол.
Заключение
Как видите, модуль можно легко интегрировать с Arduino, Raspberry Pi, да и вообще, практически любой электроникой. Полный список AT-команд описан в документе M590 AT Commands Set [PDF].
С помощью GSM модуля можно делать офигительные штуки. Слать самому себе нотификации о различных событиях, сделать двухфакторную аутентификацию, GPS-трекер (см заметку Работа с GPS-модулем на базе NEO-6M из Arduino) умный дом, управляемый при помощи звокнов и SMS, сообщающего погоду IRC/Slack/Gitter-бота, и так далее. Просто безграничный простор для творчества!
Дополнение: Существует модуль с поддержкой 3G и со встроенным GPS, называется SIM5320. Однако он не слишком дешев (~30$), и у меня пока нет опыта работы с ним.