Программист
0,0
рейтинг
3 апреля 2013 в 05:08

Мобильный телефон своими руками. Часть 2

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


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

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

Спасибо за внимание.
Владимир @32bit_me
карма
76,5
рейтинг 0,0
Программист
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (28)

  • 0
    Очень интересно, как будет реализована работа с модулем в автоматизированом режиме, т.е. при работе с микроконтроллером. Уверен, что время на ответ на некоторых AT-командах будет разное. Да и ожидать ответ вечно нельзя, вдруг какими то помехами последний символ "\r" не отправился правильно.
    • +1
      Конечно, время разное. Команды, которые не требуют связи с оператором (например, запрос IMEI), выполняются быстро, если требуют связи (например, запрос локации), приходится ждать пару секунд. Поэтому в программе должны быть предусмотрены тайм-ауты и все возможные ветки алгоритма на случай ошибки или потери связи, вплоть до выключения и повторного включения модуля.
  • 0
    Спасибо за статьи, очень интересно! Не подскажете, где можно заказать M95?
  • 0
    Зато, в отличие от GPS, работает в помещении. Здесь тоже есть один нюанс: эта функция заработала только с одной SIM-картой из трёх.


    я думаю, это из-за того, что оно должно работать только в режиме GSM/EDGE, но не 3G/H… у меня в телефоне именно так.
    • 0
      Возможно.
      Странно другое, эта функция не заработала на симке от МТС, хотя раньше я проверял эту функцию именно на МТС (правда, на другом тарифе), и всё работало.
  • 0
    В какую сумму обойдется этот аппарат?
    • 0
      см. первую часть статьи:

      Модуль Quectel M10-TE-A 665,64 р.
      Антенна 120 р.
      Держатель SIM-карты SCV-W2523X-06-LF 21,80р
      Кабель-переходник GSC-SMA — 161,86р.
      • 0
        Это все комплектующие? А как же кнопки, экран и т.п?
        • 0
          Экрана пока нет, кнопки есть, но в данный момент не используются (см. первую часть). Другие комплектующие есть, но их немного.
          Если делать с кнопками и экраном, то нужен будет ещё микроконтроллер, то есть прибавьте ещё около 1000р. на всё.
  • 0
    Правильно ли я понимаю, что для работы такого модуля потребуется ещё распайка мелочевки (по питанию, порты, стабилизатор)? Т.е. его нельзя использовать просто подключив +- и UART?
    • 0
      Да, правильно.
      См. первую часть статьи по ссылке в посте.
  • –1
    А что насчет возможности смены IMEI? Если модуль поддерживает установку IMEI, то проект имеет смысл, можно сделать телефон который не нужно выбрасывать при смене симки и который можно не палясь использовать с несколькими симками. Добавить еще направленную антену для подключения к далекой соте и получится сказка.
    • 0
      зачем выбрасывать телефон при смене симки?
      • –1
        Затем что иначе в логах слежения новая симка будет автоматически сопоставлена со старой посредством imei телефона. Для дел нужно иметь несколько мобил с левыми симками, некоторые из них периодически менять, некоторые вообще должны быть одноразовыми. Телефон позволяющий менять imei и звонить из дальней соты был бы решением многих проблем.
        • 0
          Oh my…
          • –1
            например: зарегать вебмани — нужен незасвеченный телефон (следует хранить всё время пользования счетом), зарегать гмейл и вконтакте — нужен телефон (можно одноразовый), общаться по делам — нужен телефон (следует периодически менять), общаться на бытовые темы нужен телефон (этот постоянный). Очень желательно чтобы эти телефоны ничто друг с другом не связывало.
            • 0
              facepalm.jpg
            • 0
              facepalm.jpg [2]

              нужен незасвеченный телефон (следует хранить всё время пользования счетом), зарегать гмейл и вконтакте — нужен телефон (можно одноразовый)


              http://sms-area.com
              • 0
                Домен угнали, а комментарий теперь никак не изменить. :(

                http://sms-area.org/ теперь ведет туда, куда раньше вел домен в комментарии выше.
  • 0
    Отличное начало!
    Интересно посмотреть на реальный пример с микроконтроллером, который, к примеру, отправляет по TCP через модуль данные на сервер на компе, в общем, хардкорные примеры).
    • 0
      Я разрабатывал такое устройство, с отправкой данных на сервер и всем прочим. Однако здесь по него я писать не могу, а других готовых примеров у меня нет, к сожалению, и в ближайшее время не будет. Описывать же всё это абстрактно, пожалуй, не имеет смысла. Поэтому, возможно, я напишу про такие вещи, но не скоро.
      Однако, хочу сказать, что ничего сложного здесь нет, если вы дружите с микроконтроллерами.
      • 0
        Кстати, вы разрабатывали его, используя модуль с tcp/ip стеком или нет?
        А то мне тут подвернулись дешевые mc35i без стека, только ppp, думаю, есть ли в них прок…
        • 0
          Да, эти модули имеют стек tcp/ip.
  • 0
    Подскажите, а можно ли обойтись без модуля (имеется ввиду заводского)? Например, если нужен исключительно прием смс и ничего больше. Можно ли как нибудь самому собрать?

    AT+QGSMLOC=1 //запрос долготы, широты и времени

    AT+QGSMLOC=1 //запрос только времени


    Хм, модуль чувствует это интуитивно? Потому, что разницы я не вижу.

    • 0
      1. Если нужны только определенные функции, есть модули с урезанной функциональностью. Например, M95 не имеет голосовой связи, и может только передавать данные.

      2. У меня нет информации о внутреннем устройстве модуля, поэтому по поводу его изготовления я ничего сказать не могу.

      3. Спасибо, исправил. Должно быть: AT+QGSMLOC=2 //запрос только времени
      • 0
        Уважаемый!
        Возражаю! M95 имеет полный набор функций, включая усилитель для динамика и два канала голосовой связи, а так-же имеет возможность воспроизведения потоков закодированных извне в голосовой канал и выводить соответственно. А также в этом модуле поддерживается куча недокументированных команд, по крайней мере всё то что делает M10 этот модуль понимает… И выполняет…

        И ещё главное отличие — невероятная стабильность GPRS соединения, в этом он делает многие именитые «монстры».
        • 0
          Да, вы правы. Перепутал с М75.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.