Подключение GSM модуля к микроконтроллеру PIC


GSM модули находят применение в проектах электроники, в которых требуется удаленный доступ к чему-либо. С помощью данных модулей можно выполнять те же самые функции, что и с помощью обычных сотовых телефонов: осуществление и прием вызовов, передачу/прием SMS, соединению с сетью интернет с помощью технологии GPRS и т.д. Подключив микрофон и динамик к подобному модулю вы можете превратить его в сотовый телефон. В данной статье мы рассмотрим подключение GSM модуля SIM900A к микроконтроллеру PIC и продемонстрируем передачу и прием вызовов с его помощью.

Внешний вид подключения GSM модуля к микроконтроллеру PIC

Также на нашем сайте вы можете посмотреть проекты подключения GSM модуля к другим микроконтроллерам (платам):

Необходимые компоненты

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. GSM модуль SIM900 (или любой другой) (купить на AliExpress).
  3. Держатель микросхем на 40 контактов (купить на AliExpress).
  4. Программатор PICkit 3 (купить на AliExpress).
  5. Кварцевый генератор 20 МГц (купить на AliExpress).
  6. Конденсаторы 22 пФ (2шт.), 0,1 мкФ и 10 мкФ (купить на AliExpress).
  7. Регулятор напряжения 7805 (купить на AliExpress).
  8. ЖК дисплей 16х2 (купить на AliExpress).
  9. Светодиод.
  10. Адаптер на 12V.
  11. Перфорированная плата.
  12. Соединительные провода.

GSM модуль SIM900A

GSM модуль можно использовать без микроконтроллера, управляя его работой с помощью AT команд. Внешний вид GSM модуля SIM900A показан на следующем рисунке.

Внешний вид GSM модуля SIM900A

Как видно из представленного рисунка, GSM модуль содержит в своем составе адаптер USART (последовательный порт связи), поэтому его можно напрямую подключить к компьютеру используя модуль MAX232, либо же его контакты Tx и Rx можно подключить к микроконтроллеру. Также у GSM модуля есть контакты MIC+, MIC-, SP+, SP-, к которым можно подключить микрофон и громкоговоритель (динамик) соответственно. Модуль можно запитать от адаптера 12V через стандартный разъем постоянного тока (DC barrel jack).

Когда вы вставите SIM карту в GSM модуль вы должны заметить что на нем загорится светодиод, индицирующий подачу питания. После этого подождите минуту или чуть дольше – светодиод красного (или другого) цвета должен начать мигать с интервалом 3 секунды. Это будет означать что модуль установил соединение с вашей SIM картой. После этого вы можете подключить его к компьютеру или микроконтроллеру.

Взаимодействие с GSM модулем с помощью AT команд

GSM модуль понимает только один "язык" управления им – это AT команды. К примеру, если вы хотите узнать активен модуль или нет, вы можете послать ему команду “AT”, GSM модуль должен ответить на нее “OK”.

Полный список AT команд достаточно обширен и англоязычный даташит на них включает 271 страницу. Поэтому в следующей таблице мы привели список наиболее часто используемых AT команд.

AT Отвечает OK на запрос
AT+CPIN? Проверка качества сигнала
AT+COPS? Поиск имени провайдера
ATD96XXXXXXXX; Вызов указанного номера
AT+CNUM Определение номера SIM карты (для некоторых SIM карт может не работать)
ATA Ответ на входящий вызов
ATH Отклонение входящего звонка (повесить трубку)
AT+COLP Отобразить номер входящего звонка
AT+VTS=(number) Передать DTMF номер (number)
AT+CMGR AT+CMGR=1 считывает сообщение на первой позиции
AT+CMGD=1 Удаление сообщения на первой позиции
AT+CMGDA=”DEL ALL” Удаление всех сообщений с SIM карты
AT+CMGL=”ALL” Чтение всех сообщений с SIM карты
AT+CMGF=1 Установка конфигурации SMS. “1” – только текстовый режим
AT+CMGS = “+91 968837XXXX”

>CircuitDigest Text<Ctrl+z>

Передача SMS на определенный номер, например, на 968837XXXX. Когда увидите “>” начинайте набирать текст. Для передачи текста нажмите Ctrl+Z
AT+CGATT? Проверка интернет соединения на SIM карте
AT+CIPSHUT Завершение TCP соединения, что означает отключение от интернета
AT+CSTT = “APN”,”username”,”Pass” Соединение с GPRS с помощью ваших APN и Pass key. Их можно получить у провайдера сети
AT+CIICR Проверка имеет ли ваша SIM карта пакет данных
AT+CIFSR Получить IP SIM сети
AT+CIPSTART = “TCP”,”SERVER IP”,”PORT” Установка TCP IP соединения
AT+CIPSEND Передача данных на сервер.

Далее перейдем к схеме нашего проекта.

Схема проекта

Схема подключения GSM модуля к микроконтроллеру PIC представлена на следующем рисунке.

Схема подключения GSM модуля к микроконтроллеру PICКак видите, мы соединили контакты Tx и Rx GSM модуля с контактами Rx и Tx микроконтроллера PIC, что позволит установить между ними последовательную связь. Также не забудьте соединить общие провода (ground) GSM модуля и микроконтроллера.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Перфорированную плату с установленным на нее микроконтроллером PIC мы использовали из проекта мигания светодиодом.

Внешний вид проекта мигания светодиодом с помощью микроконтроллера PIC

Объяснение программы для микроконтроллера PIC

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Код программы взаимодействие с ЖК дисплеем, если вы ранее с ним никогда не работали, то советуем прочитать статью про подключение ЖК дисплея к микроконтроллеру PIC.

Как мы отмечали ранее, управлять работой GSM модуля мы будем с помощью AT команд. Поэтому сначала нам необходимо инициализировать модуль USART в микроконтроллере PIC с помощью функции Initialize_SIM900(). Внутри этой функции мы объявим контакты Tx и RX и инициализируем асинхронную последовательную связь со скоростью 9600 бод в 8-битном режиме.

После этого нам необходимо передавать и принимать информацию от GSM модуля. Для этого мы запрограммируем функции _SIM900_putch(), _SIM900_getch(), _SIM900_send_string(), _SIM900_print(). Эти функции будут использовать буферные регистры TXREG и RCREG для считывания и записи данных.

Представленные функции являются универсальными и могут быть использованы и в других похожих проектах.

Затем внутри нашей функции main мы инициализируем соединение с USART и ждем пока GSM модуль не ответит нам “OK”, что будет означать что он готов к работе.

Функция SIM900_isStarted() будет передавать команду “AT” на GSM модуль и будет ждать от него ответа “OK” . Если она такой ответ получит, то она возвращает 1, иначе она возвращает 0.

Если GSM модуль не обнаружен или есть какие либо проблемы с его подключением, то на ЖК дисплее высветится сообщение “Module not found”. Если все нормально, то высветится сообщение о том, что модуль обнаружен. После этого мы будем проверять присутствует ли в модуле SIM карта.

Функция SIM900_isReady() будет передавать на GSM модуль команду “AT+CPIN?” и ждать от него ответа “+CPIN: READY”. При получении этого ответа она возвратит 1, иначе она возвратит 0.

При обнаружении SIM карты мы высветим соответствующее сообщение на ЖК дисплее. Затем мы будем пытаться совершить звонок используя команду “ATDmobilenumber;”. Для примера мы использовали номер ATD93643159XX. Вы можете заменить его на свой, необходимый вам номер.

При совершении вызова на экран ЖК дисплея будет выведено сообщение "Call Placed...." и вы сможете принимать входящие звонки с этого номера.

Также вы можете совершить входящий звонок на номер SIM карты, вставленной в GSM модуль. Соответствующее сообщение об этом также будет выведено на экран ЖК дисплея.

Когда GSM модуль будет обнаруживать входящий звонок он будет отображать его на второй строке ЖК дисплея. Функция _SIM900_waitResponse() будет проверять принимаемые GSM модулем данные. Когда она будет принимать SIM900_RING, что в нашем случае будет эквивалентно “RING” из-за waitResponce(), мы будем отображать на ЖК дисплее “Incoming call”.

Также вы можете создать свой собственный набор функций для работы с GSM модулем. Также вы можете использовать функцию __SIM900_print() для передачи любой AT команды на модуль, например:

Но в этом случае помните о том, что все ваши команды должны оканчиваться комбинацией символов “\r\n”, которые будут свидетельствовать о том, что команда завершена.

Моделирование работы проекта

Прежде чем приступать к сборке проекта в "реальном железе" вы можете смоделировать его работу в симуляторе Proteus. Схема проекта в данном симуляторе приведена на следующем рисунке.

Схема проекта в симуляторе Proteus

Как вы можете видеть, мы в Proteus использовали опцию виртуального терминала чтобы проверить что программа отвечает необходимым образом. Мы можем передать эти данные через всплывающее диалоговое окно (pop-up dialog box). При запуске проекта на выполнение будет появляться черное диалоговое окно, в котором вы можете вводить AT команды для их передачи на GSM модуль. Также мы можем вводить ответы модуля для микроконтроллера PIC, например, “OK”.

Тестирование работы проекта

После загрузки кода программы в микроконтроллер PIC, если все нормально, то на экране ЖК дисплея вы должны увидеть последовательно сменяемые друг друга сообщения “Module Detected”, “SIM detected” и “call Placed”. Когда вы увидите сообщение “Call placed” это значит, что вы совершаете вызов на номер, записанный в программе.

Также вы можете совершить вызов на номер SIM карты модуля, в этом случае на ЖК дисплее появится сообщение “Incoming call”.

Тестирование работы проекта

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
14 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован.