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

Модуль 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-команд. Мы рассмотрим работу только некоторых, наиболее интересных команд, полный их список приведен в документации на модуль.
Обратите внимание, что некоторые команды заканчиваются знаком вопроса, некоторые — нет. Их нужно вводить в точности так, как они приведены здесь.
Также для большей компактности текста из ответов модуля удалены пустые строки.
Итак,
Информация о производителе модуля:
Идентификация модуля:
Ревизия модуля и версия софта:
Глобальный идентификатор:
Получить IMEI:
Проверка состояния сети:
здесь «2» означает, что устройство не нашло сеть, но находится в состоянии поиска.
Также мы можем узнать о наличии SIM-карты:
Первый ноль означает, что режим детектирования карт выключен. Попробуем включить режим детектирования наличия SIM-карты:
Ошибка 11 означает, что не введён PIN-код.
Команда выключения модуля:
Снова включаем модуль кнопкой и двигаемся дальше. Теперь можно ввести PIN-код (если SIM-карта того требует, конечно).
Ввод PIN-кода:
Последняя строка означает, что нам пришли SMS-ки!
Сейчас можно посмотреть, к какому оператору вы подключены:
Проверяем качество сигнала:
Первое число означает уровень сигнала: 0 соответствует -113dBm или меньшему уровню, 31 соответствует уровню -51dBm или больше. Второе число обозначает интенсивность ошибочных бит в канале (от 0 до 7), где 0 соответствует наилучшему значению.
Переходим к более интересной части.
Отправим на наше устройство SMS с текстом «Hello world». В окне терминала появляется строка:
Это означает, что у нас целых 6 SMS.
Чтение SMS осуществляется командой
, где 6 — индекс SMS-сообщения в памяти. В ответ получаем длинную строку цифр. Её можно расшифровать любым онлайн-декодером SMS PDU (Protocol Data Unit). Для того, чтобы получать и отправлять SMS в текстовом виде, установим текстовый режим SMS:
Теперь повторим команду AT+CMGR=6, (где 6 — номер сообщения в памяти, вы должны ввести нужное вам значение), и видим сообщение в удобочитаемой форме:
Теперь попробуем отправить SMS с устройства:
После ввода команды модуль переходит в режим ввода текста. Вводим «Hello world» и нажимаем Ctrl-Z для выхода из режима ввода текста. Сообщение отправлено:
Позвоним на устройство. Слышим рингтон, в терминале появляется строка RING.
Снять трубку:
Положить трубку:
Позвоним с устройства:
Для того, чтобы разговаривать через гарнитуру, переключаем устройство на второй набор аудиовходов/выходов:
Проверяем… Да, разговаривать вполне можно!
Разумеется, никакой Plug'n'Play работать не будет, поэтому модем в системе Windows придётся устанавливать руками. Приведем пример (Windows7 Домашняя Расширенная). Заходим в Диспетчер устройств/Действие/Установить старое устройство/Далее/Установка оборудования, выбранного из списка вручную/Далее/Модемы/Не определять тип модема (выбор из списка)/Далее/Стандартный модем 56000 bps/Далее.
Выбираем COM-порт, нажимаем Далее/Готово.
Теперь находим в Диспетчере Устройств наш модем, открываем Свойства/Диагностика/Опросить модем.
Мы должны увидеть примерно следующее:

Также, возможно, вам нужно будет вручную вписать некие команды, требуемые вашим оператором для настройки gprs. Это делается в том же окне свойств моде��а, во вкладке «Дополнительные параметры связи». Там же есть кнопка «Изменить умолчания», где можно настроить управление потоком (должна быть выбрана опция «отсутствует»).
Теперь, теоретически, можно настроить соединение в соответствии с настройками вашего оператора, ввести номер (*99#) и работать в интернете.
Однако, к сожалению, соединения не происходит. Смотрим журнал обмена на вкладке «Диагностика» (в свойствах модема), и видим следующее. Модем «подвисает» на команде:
К сожалению, многочисленные попытки настроить подключение результата не дали. Но, например, модуль Quectel M95 совершенно нормально работает в качестве внешнего модема.
Возможны два режима передачи данных: прозрачный (transparent) и непрозрачный (non-transparent). В непрозрачном режиме каждая отправка и прием данных с сервера осуществляется отдельной командой. Этот режим мы рассматривать не будем. Наиболее интересным является прозрачный режим. В этом режиме устанавливается прямой канал с TCP или UDP сокетом, и через порт UART модуля можно отправлять и получать данные. Соединение устанавливается командой
, где «TCP» — протокол, xxx.xxx.xxx.xxx — IP-адрес (в кавычках), 23 — порт
после установления соединения модем отвечает «OK» и переходит в режим приема/передачи данных. По завершении обмена модем пишет «CLOSED».
Да, можно определить координаты и точное время и без GPS. Для этого предназначена команда AT+QGSMLOC. Проделаем следующее:
Каким образом определяются координаты? Они вычисляются на стороне оператора по известным координатам ближайших базовых станций и мощности сигнала. Точность определения координат хуже, чем у GPS, конечно. Если верить полученным координатам и картам Яндекса, я нахожусь на соседней улице. Зато, в отличие от GPS, работает в помещении. Здесь тоже есть один нюанс: эта функция заработала только с одной SIM-картой из трёх.
Конечно, в посте были рассмотрены далеко не все возможности модуля, однако я постарался охватить те темы, которые, на мой взгляд, будут наиболее интересны разработчику устройств с применением gsm-модулей.
«Телефон», который я представил вашему вниманию, конечно, можно улучшить, если прикрутить к нему микроконтроллер, дисплей, реализовать различные функции, которые мы привыкли видеть в «настоящих» телефонах. Однако вряд ли у меня найдётся на это достаточное желание. Но, как я надеюсь, приведенной информации достаточно, чтобы понять, что разработка устройств на основе GSM-модулей — не такое уж сложное дело.
К тому же, в практической деятельности разработчика наиболее часто встаёт задача именно передачи данных. В этом случае можно использовать модуль без «телефонной» составляющей, например Quectel M95, более дешёвый.

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

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

Модуль 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-документацией на модуль. Я продублирую её здесь:
скачать архив
Буду рад ответить на ваши вопросы, также приветствуются конструктивная критика и пожелания.
Спасибо за внимание.