AT-команды GSM модема SIM900

В предыдущей статье – GSM модем SIM900 – рассмотрели, как запаять данный модем. Сейчас разберемся, как его подключить к компьютеру и пообщаемся с ним по средством AT команд.

SIM900 подключенный к компьютеру

SIM900 подключенный к компьютеру

Начнём с подключения к компьютеру, т.к. с него проще всего вести диалог с модулем. В нём нет нечего сложного, если модуль собран по схеме приведенной в предыдущей статье или подобной. Берем любой преобразователь интерфейса, например cp2102, ft232, max232 и подключаем к USB или COM порту компьютера. Открываем любую терминальную программу, я же предпочитаю свою – AL Terminal (кстати, её версию обновил). На компьютере подключаемся к COM порту со скорость 9600 (по умолчанию для SIM900), к которому подключен модуль и общаемся. Если питать от компьютера, через преобразователь интерфейса, т.е. от USB порта компьютера, то подключаем толстым USB кабелем, т.к. рабочие токи модуля могут быть в районе полу ампера, а кратковременные пики могут достигать 2А. Для питания модуля от 5В перемычкой JUMP1 нужно подать питание через стабилизатор, а не шунтировать его. Если питать от батареи (3,2-4,7В), то шунтируем стабилизатор.

Диалог происходит по средством AT команд. Мы шлём модулю нужную команду или запрос, а он её выполняет и отвечает. Самая простая команда AT, на которую модуль тут же ответит OK, если модуль подключен и исправен.

Почти все команды имеют 3 режима:

  • тестовый =? – модуль ответит поддерживает ли он команду и возможные её параметры
  • чтение ? – ответом будет текущие параметры для этой команды
  • запись = записываем новые значения для команды.

A/ — повтор предыдущей команды

В статье, идёт речь о GSM модуле SIM900 (B09). Напоминаю, т.к. есть ещё и другие разновидности этого модуля и формат команд с ними может немного отличаться.

Управление портом

По умолчанию модуль настроен 9600 8N1, 9600 – скорость, 8 – бит в посылки, N – нет контроля чётности, 1- стоп бит.

Команда

Ответ

Описание

AT+IPR? +IPR: 0
OK
Скорость порта:
0 – автоматически
1200
2400
4800
9600
19200
38400
57600
115200
AT+ICF? +ICF: 3,3
OK
Настройки передачи.
Первый параметр:
Бит в посылке/чётность/стоп бит
1 – 8/0/2
2 – 8/1/1
3 – 8/0/1
4 – 7/0/2
5 – 7/1/1
6 – 7/0/1
Второй параметр – чётность:
0 – нечётный
1 – чётный
3 – нет
AT+IFC? +IFC: 0,0
OK
Контроль передачи данных
Первый параметр – терминалом от модуля
Второй параметр – модулем от терминала
0 – нет контроля
1 – программный
2 – аппаратный

Информация и состояние

Информация о модуле

Команда

Ответ

Описание

AT+GCAP +GCAP:+FCLASS,+CGSM
OK
Возможности модуля
AT+GMM SIMCOM_SIM900
OK
Идентификатор модуля
AT+GMR Revision:1137B09SIM900M64_ST
OK
Ревизия
AT+GSN 01322600XXXXXXX
OK
IMEI

Информация о состояние модуля

Команда

Ответ

Описание

AT+COPS? +COPS: 0,0,"MTS-RUS"
OK
Информация об операторе
AT+COPS=? +COPS: (2,"MTS RUS","","25001"),(1,"MOTIV","MOTIV","25035"),(1,"Utel","Utel","25039"),,(0,1,4),(0,1,2)
OK
Доступные операторы
AT+CPAS +CPAS: 0
OK
Информация о состояние модуля
0 – готов к работе
2 – неизвестно
3 – входящий звонок
4 – голосовое соединение
AT+CREG? +CREG: 0,1
OK
Тип регистрации сети
Первый параметр:
0 – нет кода регистрации сети
1 – есть код регистрации сети
2 – есть код регистрации сети + доп параметры
Второй параметр:
0 – не зарегистрирован, поиска сети нет
1 – зарегистрирован, домашняя сеть
2 – не зарегистрирован, идёт поиск новой сети
3 – регистрация отклонена
4 – неизвестно
5 – роуминг
AT+CSQ +CSQ: 17,0
OK
Уровень сигнала:
0 -115 дБл и меньше
1 -112 дБл
2-30 -110..-54 дБл
31 -52 дБл и сильнее
99 – нет сигнала.
AT+CCLK? +CCLK: "00/01/01,04:21:27+00"
OK
Текущая дата и время телефона.
AT+CBC +CBC: 0,95,4134
OK
Монитор напряжения питания модуля
Первый параметр:
0 – не заряжается
1 – заряжается
2 – зарядка окончена
Второй параметр:
1-100 % — уровень заряда батареи
Третий параметр:
Напряжение питание модуля (VBAT), мВ
AT+CADC? +CADC: 1,7
OK
Значение АЦП (до 2,8В)

Настройки

Вызовов

Команда

Ответ

Описание

AT+CLIP=1 OK АОН
1 – вкл / 0 – выкл
AT+GSMBUSY=0 OK Запрет входящих звонков
0 – разрешены
1 – запрещены
ATS0=0 OK Автоответ
0 – ручной
1-более – автомотический после заданного количества звонков

СМС

Команда

Ответ

Описание

AT+CMGF=1 OK Текстовый режим
1 – включить
0 – выключить
см. примечание
AT+CSCS= "GSM" OK Кодировка текстового режима
Доступны следующие кодировки:
IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1
см. примечание
AT+CSCB=0 OK Приём специальных сообщений
0 – разрешен (по умолчанию)
1 – запрещен

Остальные

Команда

Ответ

Описание

ATE0 OK ЭХО
1 – вкл (по умолчанию) / 0 – выкл
ATV1 OK Формат ответа модуля
0 – только ответ
1 – полный ответ с ЭХО (по умолчанию)
AT+CMEE=0 OK Информация об ошибках
0 – отключён (по умолчанию)
1 – код ошибки
2 – описание ошибки
AT+CCLK="13/09/25,13:25:33+05" OK Установка часов
«yy/mm/dd,hh:mm:ss+zz»
Где:
год/месяц/дата,
часы:минуты:секунды
+часовой пояс
AT+CPIN=XXXX Ввод PIN кода
ATZ0 Сброс настроек до по умолчанию (не до заводских)
0 или 1 – выбор профиля
AT&F Сброс настроек до заводских
AT&W OK Сохранение настроек для текущего профиля
Параметр 0 или 1 — выбор профиля
Параметр указывать сразу за командой (AT&W0)
AT+CPOWD=1 NORMAL POWER DOWN Выключение модуля
0 – срочное
1 – нормальное
AT+CFUN=1,1 Энергосберегающий режим и перезагрузка
Первый параметр:
0 – минимальный функционал
1 – нормальный режим (по умолчанию)
2 – выключения цепей приёма и передачи сигнала
Второй параметр:
0 – выполнить без перезагрузки
1 – перезагрузить (доступно только в нормальном режиме, т.е. параметры = 1,1)

Телефонные звонки

Команда

Ответ

Описание

ATD+790XXXXXXXX; OK Позвонить на номер +790XXXXXXXX;
NO DIALTONE
BUSY
NO CARRIER
NO ANSWER
Нет сигнала
Если вызов отклонён
Повесили трубку
Нет ответа
ATDL OK Позвонить по последнему исходящему номеру
ATA OK Ответить на звонок
ATH0 OK Повесить трубку/ разорвать соединение
RING Входящий звонок
AT+CLIP=1 OK см. настройки
RING

+CLIP: "+790XXXXXXXX",145,"",,"",0

Входящий звонок с включенным АОН
Где:
Первый параметр – номер телефона входящего звонка
2 – тип входящего номера
129 – не определен
161 – национальный
145 – интернациональный
177 – сетевой, специальный

СМС

Команды приведены для текстового режима и в GSM кодировке.

Команда

Ответ

Описание

AT+CMGS="+790XXXXXXXX"
>Test sms. alex-exe.ru
>
+CMGS: 15
OK
Отправка СМС.
Указываем номер получателя в кавычках и отправляем модулю с символом переноса строки (13 в ASCII).
После приглашения «>» вводим текст сообщения.
Для отправки в конце сообщения отправляем символ SUB (26 в ASCII) или ESC (27) для отмены.
AT+CMGF=1
AT+CSCS= "GSM"
Режим и кодировка.
см. настройки и примечание
+CMTI: "SM",4 Уведомление о приходе СМС.
Второй параметр номер пришедшего СМС.
AT+CMGL="REC UNREAD" +CMGL: 4,"REC UNREAD","+790XXXXXXXX","","13/09/24,23:02:22+24"
Test2.
OK
Чтение групп СМС.
Всего 5 групп:
REC UNREAD – входящие непрочитанные
REC READ – входящие прочитанные
STO UNSENT – Пользовательские непрочитанные
STO SENT – пользовательские прочитанные
ALL – прочитать все сообщения
AT+CMGR=2 +CMGR: "REC READ","+790XXXXXXXX","","13/09/21,11:57:46+24"
Test sms. alex-exe.ru
OK
Чтение SMS сообщений.
Запрос:
Первый параметр – номер сообщения.
Второй параметр (необязателен):
0 – обычный режим (по умолчанию)
1 – не изменять статус сообщения
Ответ:
Первый параметр – группа сообщений, см предыдущий пункт.
Второй параметр – номер отправителя
3 – дата отправки
Далее следует текс сообщения.
AT+CMGDA="DEL SENT" OK Удаление групп СМС:
DEL READ — прочитанные
DEL UNREAD — не прочитанные
DEL SENT — отправленные
DEL UNSENT — не отправленные
DEL INBOX — полученные
DEL ALL — всех сообщения
AT+CMGD=4 OK Удаление СМС.
Первый параметр – номер сообщения
Второй параметр:
0 – удаление указанного сообщения (по умолчанию)
1 – удаление прочитанных сообщений
2 – удаление прочитанных и отправленных сообщений
3 – удаление прочитанных, отправленных и не отправленных сообщений
4 – удаление всех сообщений
AT+CSCA? +CSCA: "+79126313431",145
OK
Возвращает номер сервис центра отправки сообщений.

Тоновый набор (DTMF)

Тоновые сигналы: 0-9,#,*,A-D

Команда

Ответ

Описание

AT+VTD=3 OK Длительность тоновых сигналов для AT+VTD.
Значение параметра 1..255
AT+VTS="1,4,#,A,6,7,0" OK Отправить последовательность тоновых сигналов (до 20).
Длительность задается командой AT+VTS.
AT+CLDTMF=7, "1,4,#,A,6,7,0" OK Проиграть на модуле (через аудио выход) тоновые сигналы.
Первый параметр — длительность 1-100
Второй параметр – строка тоновых сигналов, до 20.

AT+VTD и AT+VTS команды, как мне кажется, работаю не корректно. VTD – должна устанавливать длительность тонового сигнала, а не паузу между ними, в то время когда тоновый сигнал в AT+VTS проигрывается быстро.

USSD

Команды приведены для текстового режима и в GSM кодировке.

Команда

Ответ

Описание

AT+CUSD=1,"#100#" OK
+CUSD: 0,"Balance:240,68r ",
USSD запрос
Первый параметр – режим обработки операции:
0 – выполнить запрос, ответ проигнорировать
1 – выполнить запрос, вернуть ответ
2 – отменить запрос
Второй параметр – запрос в кавычках.
ATD#100#; OK
+CUSD: 0,"Balance:240,68r ",
Упрощенный USSD запрос (работает только при GSM кодировке)

Отмечу, что есть 2 варианта USSD запроса: начиная с * и начиная с #. В первом варианте ответ приходит на русском языке, во втором в латинице, если оператор такой запрос поддерживает и не ответит так же, как и в первом случае.
Режим отображения такой же, как и для СМС.

Примечание по текстовому режиму и кодировке

От текстового режима (PDU или текстовый) и кодировки модуля зависит формат ввода номеров, USSD запросов, входящих и исходящих СМС.

Самый геморройный и универсальный вариант – это PDU режим, т.к. в нём можно без проблем отправлять и принимать любые текстовые данные, но из-за его «геморойности» рассматривать его не буду.

Самый простой вариант – GSM кодировка. В нём номера вводятся привычным цифровым методом, исходящие и исходящие сообщения, как СМС, так и USSD в латинице отображаются, как им и полагается. С кириллицей дела обстоят посложнее, модуль входящие сообщения с ней отображает в UNICOD, точнее в HEX значениях UNICOD. С исходящими сообщениями дела обстоят сложнее!

Второй вариант, посложнее – UCS2 кодировка. Входящие и исходящие сообщения, USSD запросы, номера телефонов в запросах – всё пишется в UNICOD. Упрощенные USSD запросы не работают.

Другие варианты мной плохо опробованы, но у них тоже всё идёт в своей кодировке.

Пример (номер телефона заменён на +79012345678, добавлены переносы):

Кодировка
и
режим

Запрос

Ответ

PDU AT+CMGR=2 +CMGR: 1,"",38
07919720780110F0000B919710325476F800003190121
175644215D4F29C0E9AB7E72E50985DC6B7CAF8B24B5E07

OK
AT+CMGR=3 +CMGR: 1,"",59
07919720780110F0000B919710325476F800083190122
185134228005400650073007400200073006D00730020
0032002E0020042204350441044200200441043C0441

OK
GSM AT+CMGR=2 +CMGR: "REC READ","+79012345678","","13/09/21,11:57:46+24"
Test sms. alex-exe.ru

OK
AT+CMGR=3 AT+CMGR=3
+CMGR: "REC READ","+79012345678","","13/09/21,12:58:31+24"
005400650073007400200073006D007300200032
002E0020042204350441044200200441043C0441

OK
AT+CUSD=1,"#100#" OK

+CUSD: 0,"Balance:240,68r ",
UCS2 AT+CMGR=2 +CMGR: "REC READ","002B0037003900300031
0032003300340035003600370038","","13/09/21,11:57:46+24"
005400650073007400200073006D0073002E0020
0061006C00650078002D006500780065002E00720075

OK
AT+CMGR=3 +CMGR: "REC READ","002B00370039003000310032
003300340035003600370038","","13/09/21,12:58:31+24"
005400650073007400200073006D007300200032
002E0020042204350441044200200441043C0441

OK
AT+CUSD=1,"00230031
003000300023"
OK

+CUSD: 0,"00420061006C0061006E00630065003A0032
00340030002C0036003800720020",64

Текст сообщений выданного на запрос «AT+CMGR=3» — «Test sms 2. Тест смс»

Кратко о UNICOD.

В юникоде символы кодируются в шестнадцатиричке записанной в текстовом виде, при этом первые 127 символов просто переводятся в HEX, а вот к кириллице добавляется 350h.

Пример: 1 – 0031, G – 0047, z — 007A, Ы — 042B, я — 044F

Для кодировки и раскодировки UNICOD на скорую руку была написана небольшая программка – скачать .

В статье привёл значительную часть основных команд GSM модуля SIM900 из огромного списка поддерживаемых им. Для большинства задач все приведенные команды не будут нужны, а хватит только малой их части. В одной из следующих статьей рассмотрю, как пользоваться GPRS AT-командами и пример его использования на примере простенькой домашней сигнализации. Так же бы было интересно достать и посмотреть прошивку «All-in-One».

Так же может быть интересно:

Статья обновлена 2 октября 2013 года

74 комментария »

Alex_EXE | 26.09.2013 | Связь | 57 383 просмотров

74 комментария на « AT-команды GSM модема SIM900»

  1. nolimitcrew пишет 25.08.2016 в 03:01 #

    Добрый день. Нужна помощь
    Проверял модуль через пример GSM_GPRSLibrary_AT
    1. Использовал:
    gprsSerial.print("AT+CMGF=1");
    gprsSerial.println("AT+CMGS = "+37529*****"");
    модуль отправляет смс
    2. Если использовать
    gprsSerial.print("AT+CMGF=1\r");
    gprsSerial.println("AT+CMGS = \"+37529*****\"");
    отвечает ERROR
    Если в скетче использовать мой вариант, ошибка при заливке скетча
    exit status 1
    expected ‘)’ before string constant)
    Если использовать второй авриант, скетч заливается, но смс не приходят.
    В чем дело!

  2. Олег пишет 05.09.2016 в 05:37 #

    Приходят с модуля СМС с лишними символами и текстом с телефоном. Что сделать чтобы был только текст сообщения?

  3. Дядя Вова пишет 24.11.2016 в 23:05 #

    Простите за тупость, но как поставить символ sub в конце текста смс ?

  4. Alex_EXE пишет 25.11.2016 в 02:47 #

    SUB — ASCII символ с кодом 1A в hex или 26 в целочисленном виде.
    Если для работы с модулем используете свою прошивку для МК или программу для ПК то нужно в модуль отправить соответствующий байт.
    Если же использовать терминальную программу, то она должна уметь отправлять такой символ каким-либо способом или в ней должна быть возможность отправлять не только текстовые данные, но и произвольные байты. Как такое можно делать в различных терминальных программах не подскажу. Для подобных задач в своё время написал свою собственный терминал — AL Terminal. В программе можно одновременно с текстовыми данными отправлять произвольные байты — при вводе команды введите символ $, далее откроется спец меню, так же можно в правое верхнее поле ввести код символа в десятичном виде и нажать «Отправить код».

Комментарии RSS

Оставьте отзыв