В первой части мы рассмотрели «железную» часть проекта, в этой части мы приступим к экспериментам с устройством.


Модуль M10-TE-A, основа нашего телефонного аппарата.


Приступаем к работе

Итак, подключаем устройство к COM-порту компьютера (я воспользовался для этого преходником COM-USB). Запускаем терминал (можно стандартный терминал Windows, но я пользуюсь программой Putty), подаем питание на устройство. Нажимаем кнопку включения питания модуля, светодиод состояния сети начинает часто мигать.

По периоду мигания светодиода можно различать состояния устройства:
светодиод выключен — модуль не работает
64ms on/800ms off — сеть не найдена
64ms on/2000ms off — сеть найдена
64ms on/600ms off — обмен по GPRS

Вводим в терминал символы «AT» до тех пор, пока не получим ответ. Это нужно для того, чтобы модуль автоматически определил скорость обмена. Нажимаем Enter, получаем ответ:
+CME ERROR: 3
Теперь модуль готов к приему команд.
Несмотря на то, что пока сеть не найдена, уже можно проверить работу некоторых AT-команд. Мы рассмотрим работу только некоторых, наиболее интересных команд, полный их список приведен в документации на модуль.
Обратите внимание, что некоторые команды заканчиваются знаком вопроса, некоторые — нет. Их нужно вводить в точности так, как они приведены здесь.
Также для большей компактности текста из ответов модуля удалены пустые строки.

Итак,

Первые шаги

Информация о производителе модуля:
AT+GMI

//Ответ:
Quectel_Ltd
Quectel_M10
Revision: MTK 0828
OK

Идентификация модуля:
AT+GMM

//Ответ:
Quectel_M10
OK

Ревизия модуля и версия софта:
AT+GMR

//Ответ:
Revision: M10BR06A06N32
OK

Глобальный идентификатор:
AT+GOI

//Ответ:
M10
OK

Получить IMEI:
AT+GSN

//Ответ:
xxxxxxxxxxxxxxx  //15-и значный номер
OK

Проверка состояния сети:
AT+CREG?

//Ответ:
+CREG: 0,2
OK

здесь «2» означает, что устройство не нашло сеть, но находится в состоянии поиска.
Также мы можем узнать о наличии SIM-карты:
AT+QSIMDET?

//Ответ:
+QSIMDET: 0,0
OK

Первый ноль означает, что режим детектирования карт выключен. Попробуем включить режим детектирования наличия SIM-карты:
AT+QSIMDET=1

//Ответ: (SIM-карта не вставлена)
+CME ERROR:10   
OK

//Ответ: (SIM-карта вставлена)
+CME ERROR:11   
OK

Ошибка 11 означает, что не введён PIN-код.

Команда выключения модуля:
AT+QPOWD=1

//Ответ:
NORMAL POWER DOWN

Снова включаем модуль кнопкой и двигаемся дальше. Теперь можно ввести PIN-код (если SIM-карта того требует, конечно).
Ввод PIN-кода:
AT+CPIN=XXXX (PIN-код)

//Ответ:
+CPIN: READY
OK
Call Ready
+CMTI: "SM",3

Последняя строка означает, что нам пришли SMS-ки!
Сейчас можно посмотреть, к какому оператору вы подключены:
AT+QSPN?

//Ответ:
+QSPN: "MegaFon",0
OK

Проверяем качество сигнала:
AT+CSQ

//Ответ:
+CSQ:18,0
OK

Первое число означает уровень сигнала: 0 соответствует -113dBm или меньшему уровню, 31 соответствует уровню -51dBm или больше. Второе число обозначает интенсивность ошибочных бит в канале (от 0 до 7), где 0 соответствует наилучшему значению.

Переходим к более интересной части.

Отправка SMS

Отправим на наше устройство SMS с текстом «Hello world». В окне терминала появляется строка:
+CMTI: "SM",6

Это означает, что у нас целых 6 SMS.
Чтение SMS осуществляется командой
AT+CMGR=6

, где 6 — индекс SMS-сообщения в памяти. В ответ получаем длинную строку цифр. Её можно расшифровать любым онлайн-декодером SMS PDU (Protocol Data Unit). Для того, чтобы получать и отправлять SMS в текстовом виде, установим текстовый режим SMS:
AT+CMGF=1

//Ответ:
OK

Теперь повторим команду AT+CMGR=6, (где 6 — номер сообщения в памяти, вы должны ввести нужное вам значение), и видим сообщение в удобочитаемой форме:
+CMGR: "REC READ","xxxxxxxxxxxx","","2013/03/29 21:15:14+24"
Hello world
OK


Теперь попробуем отправить SMS с устройства:
AT+CMGS="+7xxxxxxxxxx" //номер телефона в кавычках

После ввода команды модуль переходит в режим ввода текста. Вводим «Hello world» и нажимаем Ctrl-Z для выхода из режима ввода текста. Сообщение отправлено:
+CMGS:11 //11 - номер SMS


Звонки

Позвоним на устройство. Слышим рингтон, в терминале появляется строка RING.
Снять трубку:
ATA

Положить трубку:
ATH

Позвоним с устройства:
ATDxxxxxxxxxxxx //номер вводится без пробела и кавычек

Для того, чтобы разговаривать через гарнитуру, переключаем устройство на второй набор аудиовходов/выходов:
AT+QAUDCH=1

Проверяем… Да, разговаривать вполне можно!

Модем

Разумеется, никакой Plug'n'Play работать не будет, поэтому модем в системе Windows придётся устанавливать руками. Приведем пример (Windows7 Домашняя Расширенная). Заходим в Диспетчер устройств/Действие/Установить старое устройство/Далее/Установка оборудования, выбранного из списка вручную/Далее/Модемы/Не определять тип модема (выбор из списка)/Далее/Стандартный модем 56000 bps/Далее.
Выбираем COM-порт, нажимаем Далее/Готово.
Теперь находим в Диспетчере Устройств наш модем, открываем Свойства/Диагностика/Опросить модем.
Мы должны увидеть примерно следующее:



Также, возможно, вам нужно будет вручную вписать некие команды, требуемые вашим оператором для настройки gprs. Это делается в том же окне свойств моде��а, во вкладке «Дополнительные параметры связи». Там же есть кнопка «Изменить умолчания», где можно настроить управление потоком (должна быть выбрана опция «отсутствует»).

Теперь, теоретически, можно настроить соединение в соответствии с настройками вашего оператора, ввести номер (*99#) и работать в интернете.
Однако, к сожалению, соединения не происходит. Смотрим журнал обмена на вкладке «Диагностика» (в свойствах модема), и видим следующее. Модем «подвисает» на команде:
ATS7=60L0M1&KN1X4

К сожалению, многочисленные попытки настроить подключение результата не дали. Но, например, модуль Quectel M95 совершенно нормально работает в качестве внешнего модема.

Передача данных

Возможны два режима передачи данных: прозрачный (transparent) и непрозрачный (non-transparent). В непрозрачном режиме каждая отправка и прием данных с сервера осуществляется отдельной командой. Этот режим мы рассматривать не будем. Наиболее интересным является прозрачный режим. В этом режиме устанавливается прямой канал с TCP или UDP сокетом, и через порт UART модуля можно отправлять и получать данные. Соединение устанавливается командой
AT+QIOPEN="TCP","xxx.xxx.xxx.xxx",23 

, где «TCP» — протокол, xxx.xxx.xxx.xxx — IP-адрес (в кавычках), 23 — порт
после установления соединения модем отвечает «OK» и переходит в режим приема/передачи данных. По завершении обмена модем пишет «CLOSED».

Координаты и время

Да, можно определить координаты и точное время и без GPS. Для этого предназначена команда AT+QGSMLOC. Проделаем следующее:
AT+QIFGCNT=0 //активируем GPRS
OK //ответ модуля
AT+QICSGP=1,"CMNET" //настройка APN
OK //ответ модуля
AT+QGSMLOC=1 //запрос долготы, широты и времени
+QGSMLOC:0,60.xxxxxx,56.xxxxxx,2013/03/31,12:06:24 //ответ модуля
OK //ответ модуля
AT+QGSMLOC=2 //запрос только времени
+QGSMLOC:0,2013/03/31,12:07:03 //ответ модуля

Каким образом определяются координаты? Они вычисляются на стороне оператора по известным координатам ближайших базовых станций и мощности сигнала. Точность определения координат хуже, чем у GPS, конечно. Если верить полученным координатам и картам Яндекса, я нахожусь на соседней улице. Зато, в отличие от GPS, работает в помещении. Здесь тоже есть один нюанс: эта функция заработала только с одной SIM-картой из трёх.

Заключение

Конечно, в посте были рассмотрены далеко не все возможности модуля, однако я постарался охватить те темы, которые, на мой взгляд, будут наиболее интересны разработчику устройств с применением gsm-модулей.
«Телефон», который я представил вашему вниманию, конечно, можно улучшить, если прикрутить к нему микроконтроллер, дисплей, реализовать различные функции, которые мы привыкли видеть в «настоящих» телефонах. Однако вряд ли у меня найдётся на это достаточное желание. Но, как я надеюсь, приведенной информации достаточно, чтобы понять, что разработка устройств на основе GSM-модулей — не такое уж сложное дело.
К тому же, в практической деятельности разработчика наиболее часто встаёт задача именно передачи данных. В этом случае можно использовать модуль без «телефонной» составляющей, например Quectel M95, более дешёвый.



Модули M10-TE-A и M95



Модуль M10 со снятой крышкой

В предыдущем посте была приведена ссылка на архив с PDF-документацией на модуль. Я продублирую её здесь:
скачать архив

Буду рад ответить на ваши вопросы, также приветствуются конструктивная критика и пожелания.

Спасибо за внимание.