GSM/GPRS модуль SIM900. Часть вторая.


AT Команды.
С внешним миром модуль общается посредством AT команд. Пользователи модемов должны их помнить:) Все команды делятся на базовые, большинство из которых появились еще во времена U.S. Robotics, так называемые S-команды, родом оттуда же и расширенных, добавленных в стандартах GSM07.05-07.07. Практически все команды работают в 3 режимах — тестовом, чтения и записи.
В тестовом режиме возвращается OK, если команда поддерживается или возможные значения данных в параметре команды. Тестовый режим определяется окончанием команды в виде '=?'
В режиме чтения возвращаются текущие значения параметра, отличается от тестового наличием в конце просто символа '?'
И в режиме записи после '=' идут новые значения параметров.
Количество параметров при чтении и записи не обязательно должно совпадать.
Как пример:
AT+CFUN=? тестовый режим, вернет +CFUN: (0,1,4),(0-1), что значит у нее 2 параметра. Первый может принимать значение 0,1 или 4, а второй может быть в интервале 0-1.
AT+CFUN? режим чтения, у меня возвращает +CFUN: 1, все хорошо.
AT+CFUN=4,0 запись, приемо/передатчик выключается без перезагрузки модуля.
Все команды могут вводиться как строчными, так и прописными буквами.
Включение.
При включении модуль должен выдать 00 49 49 49 49 FF FF FF FF в шестнадцатеричном режиме, у меня выдает обычно только последние один-два FF. Ну да ладно, смысловой нагрузки в них нет.
RDY
+CFUN: 1
Где
- 0 — минимальная функциональность
- 1 — полная функциональность
- 4 — отключен приемо/передатчик
+CPIN: READY
и если установлен, то
+CPIN: SIM PIN
На что надо ответить через
AT+CPIN=pin
В любом случае в ответ получим:
OK
Call Ready
Модуль готов к работе.
Управление портом.
Вначале работы необходимо задать режимы работы com порта. Для этого есть несколько основных команд:
AT+IPR=9600 — скорость порта.
Можно выбрать: 0, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
0 — автовыбор. Стоит по умолчанию и для правильной работы первый посылаемый символ должен быть прописной буквой 'A'.
AT+IFC=0,0 — режим управления потоком в обе стороны.
0, Без контроля.
1, Программный режим (XON/XOFF). Имеются проблемы в использовании, лучше не использовать
2, Аппаратный. Управление через CTS, DTR и т.д.
AT+ICF=3,3 — устанавливает режим передачи.
Первое число — биты данных/четность/стоп биты
- 8/0/2
- 8/1/1
- 8/0/1, стоит по умолчанию.
- 7/0/2
- 7/1/1
- 7/0/1
- 0, нечетный
- 1, четный
- 3, нет
Информационные команды.
Тут собраны разнообразные команды, выдающие информацию о самом модуле и его текущем состоянии.
Команды информации о модуле.
AT+GMM — идентификатор модуля.
Вернет: SIMCOM_SIM900D, или какой именно у Вас модуль. Можно убедиться, что не обманули и не подсунули другой, более дорогой модуль.
AT+GOI — более короткий идентификатор модуля.
У меня SIM900D
AT+GMR — версия прошивки. Может пригодится при желании использовать новые фишки.
Мой порадовал меня строкой: Revision:1137B06SIM900D64_ST
После прошивки строка поменялась на: Revision:1137B07SIM900M64_ST
AT+GSV — команда 3-in-1.
Вернет и производителя модуля и его модель и версию прошивки:
SIMCOM_Ltd
SIMCOM_SIM900
Revision:1137B07SIM900M64_ST
AT+GSN — вернет IMEI модуля. Между прочим весьма полезная информация. Можно использовать для идентификации модуля в удаленной программе.
Команды получающие текущее состояние.
AT+CSQ — информация о качестве сигнала.
Вернет два числа +CSQ: 21,0
21, — уровень сигнала. Может быть в диапазоне 0..31 или 99. Чем больше тем лучше, но 99 значит его отсутствие. После прошивки значение почему то изменилось до 27.
0, — так называемый RXQUAL. Изменяется от 0 до 7, чем число меньше тем лучше.
AT+CREG=1 — разрешить выдачу сообщения о смене регистрации в сети.
Может принимать значения 0..2, где
- 0, — запрет выдачи сообщений.
- 1, — разрешить сообщение о смене статуса регистрации.
- 2, — разрешает выдачу сообщений, плюс выдает еще немного невнятной информации
Вернется что-то вроде +CREG: 0,1
Где:
0, — нет сообщения о смене регистрации в сети.
1, — текущее состояние.
- 0 — не зарегистрирован, поиск сети не ведется,
- 1 — зарегистрирован в своей домашней сети,
- 2 — не зарегистрирован, идет поиск сети,
- 3 — регистрация отклонена,
- 4 — модуль сам не знает что происходит
- 5 — зарегистрирован в роуминге.
AT+CSPN? — информация об операторе из сим-карты. Может пригодится для автоматической настройки GPRS. Команда только для чтения.
+CSPN: «Beeline», 0
AT+COPS? — информация об операторе, в сети которого зарегистрирован модуль. Мне выдало в ответ +COPS: 0,0,«Beeline»", что значит 0 — автоматический выбор сети (первый 0), 0 — длинный тестовый формат имени (второй 0), и само названия оператора.
Еще можно сделать запрос в виде AT+COPS=? После достаточно долгого обдумывания вам выдадут список найденных сетей. У меня нашлось следующее:
+COPS: (2,«MegaFon RUS»,«MegaFon»,«25002»),(1,«MTS-RUS»,«MTS»,«25001»),(1,«Beeline»,«Beeline»,«25099»),,(0,1,4),(0,1,2)
AT+CPAS — информация о текущем состоянии телефона.
Может вернуть +CPAS: 0
- 0, — готов к труду и обороне
- 2, — не известно что делает. Ответ и выполнение команд не гарантируется.
- 3, — идет входящий звонок.
- 4, — есть голосовое соединение.
AT+CCLK? — получить текущее время. Вернет текущее время в виде: +CCLK: «11/04/11,01:46:33+00»
AT+CCLK=«yy/mm/dd,hh:mm:ss+zz» — установить время. Обязательно в таком формате и с ведущими нулями.
Самостоятельно время не устанавливается, нужно делать все ручками.
Сервисные команды.
На самом деле эти команды управляют эхом, полнотой информации об ошибке и подобные.
ATE0 режим эха
- 0, выключен
- 1, включен. Стоит по умолчанию.
- 1, полный текстовый ответ с эхом (если включен). Стоит по умолчанию.
- 0, возврат только кода ответа.
AT+CMEE=0 — уровень информации об ошибке. Может быть 0..2.
- 0, — отключено. Будет просто писать ERROR.
- 1, — код ошибки. Будет возвращать цифровой код ошибки.
- 2, — описание ошибки. Напишет что именно ему не нравится в команде.
Команды набора номера.
Все они пришли еще от модемов и ничего нового в них нет.
ATD1234567; — позвонить по номеру
ATD>1; — позвонить по 1 номеру из сим карты
ATDL — позвонить по последнему набранному номеру
В ответ можем получить:
BUSY
NO DIALTONE
NO CARRIER
NA ANSWER
CONNECT
AT+CLIP=1 — архи полезный параметр. Включает режим CLI (Calling Line Identification) или то, что по русски зовется АОН. После его включения при входящем вызове выдает не просто сообщение RING, а еще добавляет строку типа
+CLIP: "+7XXXXXXXXXX",145,"",,"",0 или
+CLIP: "+7XXXXXXXXXX",145,"",,«main»,0
Где
- "+7XXXXXXXXXX", номер абонента
- 145, формат номера в сообщении. 145 — интернациональный формат, 129 — неизвестный (например при русских символах)
- 0, — данные верны, 1, — данные не дает оператор 2, — данные недоступны из за ограничений сети.
- «main», — имя записи в записной книжке
ATH0 — разорвать все соединения. Может принимать значения 0..5, указывающие какие виды связи нужно разорвать.
ATS0=0 — количество звонков до авто поднятия трубки. 0 — только вручную.
AT+GSMBUSY=1 — запрет всех входящих звонков.
- 1, — запретить все входящие звонки
- 0, — разрешить входящие
СМС.
По умолчанию все сообщения сохраняются на сим карту. При поступлении сообщения придет сообщение:
+CMTI: «SM»,1
1, — номер полученного сообщения.
Настройки режимов приема смс.
AT+CSCA — номер сервис центра отправки сообщений. Берется автоматом из сим карты, но вдруг понадобится. Можно читать и писать. Вот что мне выдал для билайна:
+CSCA: "+79037011111",145
AT+CMGF — формат сообщений, 0-1.
- 0, — режим PDU, управление кодом команды. Вывод сообщения в HEX коде. Режим по умолчанию
- 1, — текстовый режим. Команды текстовые. Вывод сообщения в текстовом виде.
AT+CSCB=1, прием широковещательных сообщений. Это та гадость, через которую сейчас срут все операторы. По умолчанию включена, для исправления этой недоработки используем указанную команду.
Работа с смс.
AT+CMGL — чтение смс. Не удобная команда, лучше использовать следующую. Только команда на запись в формате AT+CMGL=stat,mode где
stat (режим PDU/текстовый):
- 0/«REC UNREAD» — не прочитанные сообщений.
- 1/«REC READ» — прочитанные сообщений.
- 2/«STO UNSENT» — не отправленные.
- 3/«STO SENT» — отправленные.
- 4/«ALL» — все сообщения.
- 0, — обычный режим.
- 1, — не изменять статус сообщения
AT+CMGR=1,0 — чтение смс. Команда только на запись.
- 1, — номер смс
- 0, — обычный режим или 1, — не изменять статус.
AT+CMGDA=«DEL ALL» — удаление всех смс определенного типа. Тоже команда так себе, следующая получше будет.
- «DEL READ» — прочитанных
- «DEL UNREAD» — не прочитанных
- «DEL SENT» — отправленных
- «DEL UNSENT» — не отправленных
- «DEL INBOX» — полученных
- «DEL ALL» — всех сообщений
1, — номер сообщения
0, — режим удаления
- 0 — удаление указанного сообщений. Работает по умолчанию, можно использовать просто AT+CMGD=2
- 1 — удаление только всех прочитанных сообщений
- 2 — удаление прочитанных и отправленных сообщений
- 3 — удаление всех прочитанных, отправленных и не отправленных сообщений
- 4 — удаление всех сообщений
AT+CMGS=«ХХХХХХХХХХХ» — отправка смс. Так же зависит от AT+CMGF. После ввода команды выдает приглашение ">" после чего можно вводить текст сообщений. Завершается символом ESC или Ctrl-Z.
Теперь как влияет установки значения командой AT+CMGF.
Для CMGF=0
Сообщение с интернет-портала мегафон:
+CMGR: 0,"",35
07919762020012F10414D0F7FBDDD52E9FC3E6B71B0000114010107565610DD4F29C0E6A97E7F3F0B9EC02
Сообщение с интернет-портала билайн:
+CMGL: 2,1,"",34
07919730071111F10414D04937BD2C7797E9D3E6140000114010713564610CD4F29C0E6A97E7F3F0B90C
Сообщение с моего основного телефона:
+CMGL: 1,0,«4D31B76E»,31
07919730071111F1040B919760472105F50000114010811095610DD4F29C0E6A97E7F3F0B9EC02
И те же сообщения для CMGF=1
+CMGR: «REC UNREAD»,«www.megafon»,"",«11/04/01,01:57:56+16»
Test message.
+CMGL: 2,«REC UNREAD»,«InternetSMS»,"",«11/04/01,17:53:46+16»
Test message
+CMGL: 1,«REC UNREAD»,"+7XXXXXXXXXX",«Main»,«11/04/01,18:01:59+16»
Test message.
В общем, если не хочется заняться героическим преодолеванием трудностей, то используем CMGF=1 и забываем о существовании русских символом.
USSD запросы.
Для проверки баланса и разных настроек обычно используются ussd запросы. Очень часто запросы начинающиеся со '*' возвращают ответ в юникоде, на родном языке. К счастью, многие телефоны не понимают этой кодировки и для них были введены запросы начинающиеся с '#'. Они возвращают ответ в стандартном ascii.
Сделать запрос можно 2 способами.
Первый, используя специальную команду:
AT+CUSD=1,"#102#"
1, — режим обработки ответа
- 0 — выполнить запрос, полученный ответ проигнорировать
- 1 — выполнить запрос, ответ вернуть в терминал
- 2 — отменить операцию
Второй выглядит как обычный набор номера. Результат всегда возвращается в терминале. Но работает не на всех версиях прошивки.
ATD#102#;
Ответное сообщение приходит в сообщении +CUSD:
Вот что сообщает билайн, на *102#:
+CUSD: 0,«04110430043B0430043D04410020003100340037002E0038003000200440»,72
И то же самое, но на #102#:
+CUSD: 0,«Vash balans 147.80 rub. Bonus: 0.00 rub. Dopolnitel'nye balansy: #106#», Ъ
Так же как и с смс не изображаем героев и используем запросы с #, а не со *. Практически все операторы понимают запросы в обоих форматах.
Телефонная книга.
Данные на карте хранятся подобно массивам, с индексами начинающимися с 1. В принципе данные могут храниться не только на сим-карте, но и в других местах, например в памяти телефона. Но в данном случае эти знания нам не особо актуальны:)
AT+CPBS=«SM» — выбрать как основную память сим-карту. Данный режим стоит по умолчанию.
AT+CPBS? — сообщит тип памяти, количество имеющихся записей и их максимальное количество. Например:
+CPBS: «SM»,3,250 значит, что на сим-карте есть 3 записи из 250 возможных.
Чтение данных.
AT+CPBR=1 — считывает запись с индексом 1.
AT+CPBR=2,5 — считать записи со 2-о по 5-ю.
AT+CPBF=«что ищем» — поиск информации. У меня работало очень нестабильно. Мог найти запись, а мог и нет. Отчего это зависит не очень понятно. На версии B07 поиск стал гораздо стабильней.
AT+CPBF — выдача всех записей на карте.
В любом случае информация идет в виде:
+CPBF: (или +CPBR) 2,"+7ХХХХХХХХХХ",145,«Home», где
2, — номер (индекс) записи.
+7ХХХХХХХХХХ", — номер.
145, — формат имени.
- 129 — неизвестный (например при русских символах),
- 161 — национальный формат (в римских цифрах что ли?),
- 145 — интернациональный формат,
- 177 — формат, определяемый сетью.
AT+CPBW=4,"+71234567890",145,«Test» — записать контакт на сим-карту.
4, — индекс, куда записываем.
AT+CPBW=4 — стереть запись с указанным номером.
Используя эти команды вполне можно организовать несложное управление обогревателем на даче или то же не менее простую охранную сигнализацию для нее же. Для более сложных задач лучше использовать сетевые возможности модуля.
Сеть.
Модуль содержит два блока — APPTCP, через который идет работа с TCP/UDP и блока SAPBR, работающий с FTP/HTTP. В принципе общение с ними весьма простое, для примера приведу общение по ftp. Общение по http будет в другой статье, с уже с готовым устройством и реальной задачей.

GPRS.
Настройка и установка GPRS соединения:
AT+SAPBR=3,1,«CONTYPE»,«GPRS»
AT+SAPBR=3,1,«APN»,«internet.beeline.ru»
AT+SAPBR=3,1,«USER»,«beeline»
AT+SAPBR=3,1,«PWD»,«beeline»
AT+SAPBR=1,1 — установка GPRS связи
AT+SAPBR=2,1 — полученный IP адрес
+SAPBR: 1,1,«10.229.9.115»
AT+SAPBR=4,1 — текущие настройки соединения
AT+SAPBR=0,1 — разорвать GPRS соединение
FTP.
Параметры ftp соединения
AT+FTPSERV=«ftp.site.ru» — адрес ftp сервера
AT+FTPUN=«login» — логин
AT+FTPPW=«password» — пароль
AT+FTPPUTPATH="/" — путь
AT+FTPPUTNAME=«test.txt» — имя файла
AT+FTPMODE=1 — режим работы ftp
- 1, — пассивный. Стоит по умолчанию
- 0, — активный.
- A, — только ASCII символы.
- I, — двоичный режим.
- «APPE» — добавить в конец файла
- «STOR» — создать файл. Если файл существует, то он будет перезаписан.
- «STOU» — создать уникальный файл. Если файл существует, то будет создан файл с заданным именем и дополненный в имени цифрами.
+FTPPUT:1,1,1260 — сессия на запись открыта. Максимальная длина записи 1260 байт.
AT+FTPPUT=2,10 — запись 10 символов.
+FTPPUT:2,10 — после появления приглашения нужно ввести 10 символов. Эха не будет.
AT+FTPPUT:2,0 — закрытие ftp соединения.
Для чтения все практически аналогично, только PUT меняется на GET. Так AT+FTPPUTPATH становится AT+FTPGETPATH.
AT+FTPGET=1 — открытие ftp соединения.
+FTPGET:1,1 — данные для чтения доступны.
AT+FTPGET=2,10 — чтение 10 байт данных. Если данных меньше, то вернется сколько есть.
+FTPGET:2,10 — сколько данных будет для считывания.
Повторное чтение, если указатель стоит на конце файла вернет +FTPGET:2,0.
AT+FTPGET:2,0 — закрытие ftp соединения.
Я не привел и половины имеющихся команд, например команд управления чувствительностью микрофона, генерации сигналов dtmf или измерения напряжения на AC0. Я ими не пользовался, а в тупую переводить даташит не хочется. Так же многие команды дублируются аналогичными. Все они есть в мануалах.

- +5
- 11 апреля 2011, 04:33
- PRC
Если кому нужны модемы
то
вот я брал на ебее
и еще есть тут и + работают наложенным платежем
www.electronshik.ru/
пысы это не реклама-просто сам хотел взять у диллеров но там сложности возникли
дорого да и доставка спецпочтой+еще и от юрлица оплата вроди как должна быть
то
вот я брал на ебее
и еще есть тут и + работают наложенным платежем
www.electronshik.ru/
пысы это не реклама-просто сам хотел взять у диллеров но там сложности возникли
дорого да и доставка спецпочтой+еще и от юрлица оплата вроди как должна быть
очень интересная статья, пользы куча… вопрос: когда выйдет третья часть? Есть ли у вас опыт по использованию TCP/UPD для передачи данных на компьютер?
Именно tcp я особенно не трогал. У меня везде динамические ip и его использование добавляет кучу дополнительных проблем. Пока обошелся только ftp и http. Про последний писать не стал, т.к. с ним иногда появляются какие-то не очень внятные проблемы.
а если динамические IP использовать только на передачу пакетов на статический IP? алгоритм сильно упроститься?
Конечно. Модуль получает свой динамический ip и конектится к компу командой — AT+CIPSTART=«TCP»,«127.0.0.1»,«80». Если вернет «CONNECT OK» значит связь установлена и можно гнать данные.
Тем более у меня дома интернет еще и через роутер идет.
Тем более у меня дома интернет еще и через роутер идет.
то есть мы устанавливаем gprs соединение, получаем у оператора динамический IP затем соединяемся с IP компа где нить в амереке командой AT+CIPSTART=«TCP»,«127.0.0.1»,«80» и если в ответ «CONNECT OK» то гоним данные?! правильно?
В статье ошибка. ATD#102#; — такое не пройдёт в случае с SIM900 — он, как и Sagem, такое не переваривает. Только через AT+CUSD. И ещё — запросы вида "#xxx#" не все опсосы понимают. Чтобы универсально — надо через "*xxx#"
- tzirulnicov
- 18 сентября 2011, 18:57
- ↓
Кстати, к слову говоря, at+cusd зависит от at+cscs — если к примеру там «ucs2», то надо не at+cusd=1,"*100#", а AT+CUSD=1,«002A0031003000300023» — немало людей об это спотыкается)
- tzirulnicov
- 18 сентября 2011, 19:05
- ↑
- ↓
С прошивки 06 или 07 уже понимают.
И что приходит на запрос в виде *102# я тоже написал. Разбираться в этих кодах геморойней, чем отправить #102#. Что касается всех операторов — тут я не знаю. Мегафон и билайн такой запрос вполне понимают.
И что приходит на запрос в виде *102# я тоже написал. Разбираться в этих кодах геморойней, чем отправить #102#. Что касается всех операторов — тут я не знаю. Мегафон и билайн такой запрос вполне понимают.
Проверил — запрос #102# не поддерживается ни МТС ни Мегафоном. Мегафон отвечает ошибкой (+CUSD: 2) а МТС строкой «YOU HAVE NOT SUBSCRIBED TO VOICE MESSAGING. CONTACT YOUR SERVICE PROVIDER.».
МТС понимает "#100#", Мегафон — нет, только через звёздочку. Так что для проверки баланса выход похоже один — парсить ucs на микроконтроллере. Либо ответ cusd в буфер и оттуда без обработки ucs кидать в ответную смс пользователю.
МТС понимает "#100#", Мегафон — нет, только через звёздочку. Так что для проверки баланса выход похоже один — парсить ucs на микроконтроллере. Либо ответ cusd в буфер и оттуда без обработки ucs кидать в ответную смс пользователю.
- tzirulnicov
- 02 октября 2011, 16:00
- ↑
- ↓
Уточните плз, следующее:
в статье написано
> Все настройки этих команд сохраняются в энергонезависимой памяти. Так что их можно делать только один раз.
Это как понимать? В буквальном смысле — ! один! раз? Тут описка или это так на самом деле?
… перенастроить нельзя потом?
Это как то не логично.
По идее должна быть возможность перенастроить его в любой момент.
А то как то одноразовое устройство получается.
в статье написано
> Все настройки этих команд сохраняются в энергонезависимой памяти. Так что их можно делать только один раз.
Это как понимать? В буквальном смысле — ! один! раз? Тут описка или это так на самом деле?
… перенастроить нельзя потом?
Это как то не логично.
По идее должна быть возможность перенастроить его в любой момент.
А то как то одноразовое устройство получается.
Такой вот вопрос! Подключение к ком порту происходит напрямую (т.е. проводками от ком порта до модуля)?
И как реализовать автоответ аппаратным способом? Т.е. припаял, обпаял и работает (мне нужна только функция зврнилки на данный момент). Все pdf прошерстил, есть только матрица поключения клавиатуры, но чегото не срабатывает.
И как реализовать автоответ аппаратным способом? Т.е. припаял, обпаял и работает (мне нужна только функция зврнилки на данный момент). Все pdf прошерстил, есть только матрица поключения клавиатуры, но чегото не срабатывает.
hi all
пара засад, хелп плиз
1 в каком формате писать получателя смс? "+7926..." или «8926...»...?
2 и что то смс не отправляет. как делал
после приглашения писал текст и посылал enter
потом посылал гексагональный 0x1b (27, или escape).
ОК питет, а смс не получаю
3 симка содержит до 20 смсок, при этом сначала думал, что когда удаляю — они встают по порядку, но нет, они не самосортируются, приходится следить за тем, какая смс самая древняя и ее удалять. Если симка содержит 20 смс ок, то sim новую не принимает. Кто — то навел тут порядок?
пара засад, хелп плиз
1 в каком формате писать получателя смс? "+7926..." или «8926...»...?
2 и что то смс не отправляет. как делал
после приглашения писал текст и посылал enter
потом посылал гексагональный 0x1b (27, или escape).
ОК питет, а смс не получаю
3 симка содержит до 20 смсок, при этом сначала думал, что когда удаляю — они встают по порядку, но нет, они не самосортируются, приходится следить за тем, какая смс самая древняя и ее удалять. Если симка содержит 20 смс ок, то sim новую не принимает. Кто — то навел тут порядок?
1 в каком формате писать получателя смс? "+7926..." или «8926...»...?Без особой разницы, но первый вариант сработает из любой страны мира, а второй — только из России (так, например, если посылать SMS-ку на 8926xxxxxxx из США, то она уйдет на +1926xxxxxxx, а не +7926xxxxxxx).
Пасиб, понял. Теперь все- таки не отправляет, я и карточки разные пробовал. Даю команду на отправку, сим дает приглашение >, фигачу тест смс, с 0х0В в конце, сим отвечает «ОК», а в одном из примеров я видел ответ типа
+СMGS:180
OK
смски не приходят. Или не отправляются?
+СMGS:180
OK
смски не приходят. Или не отправляются?
Комментарии (63)
RSS свернуть / развернуть