В первой части мы рассмотрели «железную» часть проекта, в этой части мы приступим к экспериментам с устройством.
Модуль 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=1 //запрос только времени
+QGSMLOC:0,2013/03/31,12:07:03 //ответ модуля
Каким образом определяются координаты? Они вычисляются на стороне оператора по известным координатам ближайших базовых станций и мощности сигнала. Точность определения координат хуже, чем у GPS, конечно. Если верить полученным координатам и картам Яндекса, я нахожусь на соседней улице. Зато, в отличие от GPS, работает в помещении. Здесь тоже есть один нюанс: эта функция заработала только с одной SIM-картой из трёх.
Заключение
Конечно, в посте были рассмотрены далеко не все возможности модуля, однако я постарался охватить те темы, которые, на мой взгляд, будут наиболее интересны разработчику устройств с применением gsm-модулей.
«Телефон», который я представил вашему вниманию, конечно, можно улучшить, если прикрутить к нему микроконтроллер, дисплей, реализовать различные функции, которые мы привыкли видеть в «настоящих» телефонах. Однако вряд ли у меня найдётся на это достаточное желание. Но, как я надеюсь, приведенной информации достаточно, чтобы понять, что разработка устройств на основе GSM-модулей — не такое уж сложное дело.
К тому же, в практической деятельности разработчика наиболее часто встаёт задача именно передачи данных. В этом случае можно использовать модуль без «телефонной» составляющей, например Quectel M95, более дешёвый.
Модули M10-TE-A и M95
Модуль M10 со снятой крышкой
В предыдущем посте была приведена ссылка на архив с PDF-документацией на модуль. Я продублирую её здесь:
скачать архив
Буду рад ответить на ваши вопросы, также приветствуются конструктивная критика и пожелания.
Спасибо за внимание.
Автор: 32bit_me