- Необходимые материалы:
- Модуль GSM:
- Связь с модулем GSM с помощью AT-команд:
- Принципиальная электрическая схема:
- Программирование микроконтроллера PIC:
- Моделирование:
- Совершение и прием звонков с использованием GSM и PIC:
Модули GSM интересны в использовании, особенно когда нашему проекту требуется удаленный доступ. Эти модули могут выполнять все действия, которые может выполнять наш обычный мобильный телефон, такие как совершение / получение звонка, отправка / получение SMS, подключение к Интернету с помощью GPRS и т. Д. Вы также можете подключить к этому модулю обычный микрофон и динамик и разговаривать на своем мобильные звонки. Это откроет двери для множества творческих проектов, если его можно будет связать с микроконтроллером. Следовательно, в этом руководстве мы узнаем, как мы можем связать модуль GSM (SIM900A) с нашим микроконтроллером PIC, и продемонстрируем это, совершая и принимая вызов с помощью модуля GSM. Ранее мы связали его с Arduino и Raspberry Pi для звонков и обмена сообщениями:
- Звонок и сообщение с использованием Arduino и модуля GSM
- Звонок и текст с использованием Raspberry Pi и модуля GSM
Необходимые материалы:
- Микроконтроллер PIC (PIC16F877A)
- GSM модуль (SIM900 или любой другой)
- Соединительные провода
- Адаптер 12 В
- PicKit 3
Модуль GSM:
Модуль GSM можно использовать даже без микроконтроллера, используя командный режим AT. Как показано выше, модуль GSM поставляется с адаптером USART, который может быть напрямую подключен к компьютеру с помощью модуля MAX232, или контакты Tx и Rx могут использоваться для подключения его к микроконтроллеру. Вы также можете заметить другие контакты, такие как MIC +, MIC-, SP +, SP- и т. Д., К которым можно подключить микрофон или динамик. Модуль может питаться от адаптера 12 В через обычный цилиндрический разъем постоянного тока.
Вставьте SIM-карту в слот модуля и включите его, вы должны заметить, что загорается индикатор питания. Теперь подождите около минуты, и вы должны увидеть красный (или любой другой цвет) светодиод, мигающий один раз каждые 3 секунды. Это означает, что ваш модуль смог установить соединение с вашей SIM-картой. Теперь вы можете продолжить подключение вашего модуля к телефону или любому микроконтроллеру.
Связь с модулем GSM с помощью AT-команд:
Как вы уже догадались, модуль GSM может обмениваться данными через последовательный порт и понимать только один язык, а именно « AT-команды ». Что бы вы ни хотели сказать или спросить модулю GSM, это должно происходить только через AT-команды. Например, если вы хотите узнать, активен ли ваш модуль. Вы должны спросить (отправить) команду типа «AT», и ваш модуль ответит «ОК».
Эти AT-команды хорошо объяснены в его техническом паспорте и могут быть найдены здесь, в его официальном техническом описании. Хорошо! Хорошо! Это таблица данных на 271 страницу, и вам может потребоваться несколько дней, чтобы ее прочитать. Итак, я привел несколько наиболее важных AT-команд ниже, чтобы вы могли как можно скорее это запустить.
В |
Отвечает OK для подтверждения |
AT + CPIN? |
Проверить качество сигнала |
AT + COPS? |
Найти имя поставщика услуг |
ATD96XXXXXXXX; |
Звоните на конкретный номер, заканчивается точкой с запятой |
AT + CNUM |
Найдите номер SIM-карты (может не работать для некоторых SIM-карт) |
ATA |
Ответить на входящий звонок |
ATH |
Завершить текущий входящий звонок |
AT + COLP |
Показать номер входящего звонка |
AT + VTS = (число) |
Отправьте номер DTMF. Вы можете использовать любой номер на своей мобильной клавиатуре для (номер) |
AT + CMGR |
AT + CMGR = 1 читает сообщение с первой позиции |
AT + CMGD = 1 |
Удалить сообщение с первой позиции |
AT + CMGDA = "УДАЛИТЬ ВСЕ" |
Удалить все сообщения с SIM-карты |
AT + CMGL = "ВСЕ" |
Читать все сообщения с SIM-карты |
AT + CMGF = 1 |
Установите конфигурацию SMS. «1» - только текстовый режим. |
AT + CMGS = «+91 968837XXXX» > Текст CircuitDigest
|
Отправляет SMS на конкретный номер здесь 968837XXXX. Когда вы увидите «>», начните вводить текст. Нажмите Ctrl + Z, чтобы отправить текст. |
AT + CGATT? |
Чтобы проверить подключение к Интернету на SIM-карте |
AT + CIPSHUT |
Чтобы закрыть TCP-соединение, то есть отключить от Интернета |
AT + CSTT = «APN», «имя пользователя», «пройти» |
Подключитесь к GPRS с вашим APN и ключом доступа. Можно получить у поставщика сети. |
AT + CIICR |
Проверьте, есть ли на SIM-карте пакет данных |
AT + CIFSR |
Получите IP сети SIM |
AT + CIPSTART = «TCP», «IP СЕРВЕРА», «ПОРТ» |
Используется для установки TCP IP-соединения |
AT + CIPSEND |
Эта команда используется для отправки данных на сервер |
Принципиальная электрическая схема:
Схема подключения для взаимодействия модуля GSM с микроконтроллером PIC показана ниже.
Мы просто сопрягли контакты Tx и Rx модуля GSM с контактами Rx и Tx PIC MCU PIC16F877A соответственно. Это установит последовательное соединение между ними. Кроме того, не забудьте заземлить оба модуля GSM и PIC. Мы также использовали ЖК-дисплей, чтобы узнать состояние нашего модуля GSM. После завершения подключения ваше оборудование будет выглядеть примерно так, как показано ниже.
Плата PIC Perf была создана для нашей серии руководств по PIC, в которых мы узнали, как использовать микроконтроллер PIC. Возможно, вы захотите вернуться к этим руководствам по микроконтроллерам PIC с использованием MPLABX и XC8, если вы не знаете, как записать программу с помощью Pickit 3, поскольку я пропущу всю эту основную информацию.
Программирование микроконтроллера PIC:
Полную программу для этого проекта можно найти внизу этого руководства. Здесь я объясню некоторые важные функции и фрагменты кода. Эта программа также имеет коды ЖК-дисплея, которые были взяты из раздела «Взаимодействие ЖК-дисплея с микроконтроллером PIC». Вы можете посетить это руководство, если вам интересно узнать, как ЖК-дисплей может использоваться с микроконтроллером PIC.
Как было сказано ранее, мы собираемся взаимодействовать между PIC и GSM с помощью AT-команд в последовательном режиме связи. Итак, сначала мы должны инициализировать коммуникационный модуль USART в нашем микроконтроллере PIC с помощью Initialize _SIM900 (); функция. Внутри этой функции мы объявляем контакты Tx и RX и инициализируем асинхронный прием и передачу со скоростью 9600 бод и 8-битным режимом.
// *** Инициализировать UART для SIM900 ** // void Initialize_SIM900 (void) {// **** Установка контактов ввода / вывода для UART **** // TRISC6 = 0; // Вывод TX установлен как выход TRISC7 = 1; // Вывод RX установлен как вход // ________ Установлены выводы ввода / вывода __________ // / ** Инициализировать регистр SPBRG для требуемой скорости передачи и установить BRGH для быстрой_скорости ** / SPBRG = 129; // SIM900 работает со скоростью 9600 бод, поэтому 129 BRGH = 1; // для высокой скорости передачи // _________ Конец настройки скорости передачи _________ // // **** Включить асинхронный последовательный порт ******* // SYNC = 0; // Асинхронный SPEN = 1; // Включить контакты последовательного порта // _____ Асинхронный последовательный порт включен _______ // // ** Давайте подготовимся к передаче и приему ** // TXEN = 1; // разрешить передачу CREN = 1; // разрешить прием // __ Модуль UART включен и готов к передаче и приему __ // // ** Выбрать 8-битный режим ** // TX9 = 0; // выбран 8-битный прием RX9 = 0;// Выбран 8-битный режим приема // __ Выбран 8-битный режим __ //} // ________ Модуль UART Инициализирован __________ //
Теперь нам нужно читать и записывать информацию из / в наш модуль GSM. Для этого мы используем функции _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Эти функции используют регистры буфера передачи и приема, такие как TXREG и RCREG, для последовательного чтения или записи данных.
// ** Функция для отправки одного байта даты в UART ** // void _SIM900_putch (char bt) {while (! TXIF); // удерживаем программу, пока буфер TX не освободится TXREG = bt; // Загружаем буфер передатчика с полученным значением} // _____________ Конец функции ________________ // // ** Функция для получения одного байта даты от UART ** // char _SIM900_getch () {if (OERR) // проверка на наличие ошибки { CREN = 0; // В случае ошибки -> Сбросить CREN = 1; // В случае ошибки -> Сброс} while (! RCIF); // удерживаем программу до освобождения буфера приема return RCREG; // получить значение и отправить его в основную функцию} // _____________ Конец функции ________________ // // ** Функция для преобразования строки в байт ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // если есть является символом _SIM900_putch (* st_pt ++);// обрабатываем его как байтовые данные} // ___________ Конец функции ______________ // // ** Конец измененных кодов ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Вышеуказанные функции универсальны и не требуют изменения для каких-либо приложений. Им объяснили только грубое вступление. Вы можете глубоко погрузиться в них, если хотите, через понимание.
Теперь внутри нашей основной функции мы инициализируем соединение USART и проверяем, можем ли мы получить «OK» при отправке «AT», используя следующую строку кода.
сделать {Lcd_Set_Cursor (2,1); Lcd_Print_String («Модуль не найден»); } while (! SIM900_isStarted ()); // ждем, пока GSM ответит "ОК" Lcd_Set_Cursor (2,1); Lcd_Print_String («Модуль обнаружен»); __delay_ms (1500);
Функция SIM900_isStarted (); отправит «AT» в GSM и ждет от него ответа «OK». Если да, он вернет 1 иначе 0;
Если модуль не обнаружен или если есть какие-либо проблемы с подключением, то на ЖК-дисплее будет отображаться «Модуль не найден», в противном случае он покажет, что модуль обнаружен, и перейдите к следующему шагу, где мы проверяем, может ли SIM-карта быть обнаружена с помощью приведенного ниже строка кода.
/ * Проверяем, обнаружена ли SIM-карта * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String («SIM-карта не найдена»); } while (! SIM900_isReady ()); // ждать, пока GSM не отправит обратно "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String («Обнаружена SIM-карта»); __delay_ms (1500);
Функция SIM900_isReady () отправит «AT + CPIN?» к GSM и ждет от него ответа «+ CPIN: READY». Если да, он вернет 1 иначе 0;
Если SIM-карта будет обнаружена, на ЖК-дисплее будет отображаться обнаруженная SIM-карта. Затем мы можем попробовать совершить звонок с помощью команды « ATD mobilenumber ; ». Здесь в качестве примера я использовал свой номер как ATD93643159XX;. Вы должны заменить там номер своего мобильного телефона.
/ * Совершение телефонного звонка * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Здесь мы выполняем вызов на номер 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Выполнение вызова…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // ждем, пока ESP вернет "ОК" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Вызов выполнен…."); __delay_ms (1500);
После выполнения вызова на ЖК-дисплее отобразится «Вызов выполнен», и вы должны получить входящий вызов на этот указанный номер.
Вы также можете позвонить на мобильный номер, подключенный к модулю GSM, и получить уведомление об этом на ЖК-экране y, используя приведенный ниже код.
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Проверяем, есть ли входящий звонок {Lcd_Set_Cursor (2,1); Lcd_Print_String («Входящий вызов !!.»); }}
Когда модуль GSM обнаруживает входящий вызов, он отображает входящий вызов во второй строке ЖК-модуля. Функция _SIM900_waitResponse () проверяет входящие данные от модуля GSM. Когда он получит SIM900_RING, что эквивалентно «RING» из-за waitResponce () , мы отобразим статус «Входящий вызов».
Вы можете создать свои собственные функции, подобные этой, для выполнения практически всех типов активации с помощью модуля GSM. Если вы хотите, чтобы все было жестко запрограммировано, вы можете просто использовать функцию __SIM900_print () для отправки любой AT-команды, как показано ниже.
_SIM900_print ("AT + CPIN? \ R \ n");
Помните, что после всех ваших команд следует ставить «\ r \ n», чтобы указать, что команда завершается.
Моделирование:
Как только вы поймете, как работает программа, вы можете попробовать моделировать и внести изменения в соответствии со своими потребностями. Моделирование сэкономит вам много времени. Моделирование выполнено с использованием Proteus и выглядит как показано ниже.
Как видите, мы использовали опцию виртуального терминала в Proteus, чтобы проверить, отвечает ли Программа ожидаемым образом. Мы можем ввести значения через всплывающее диалоговое окно. Например, как только мы нажмем «Выполнить», появится черное диалоговое окно, подобное приведенному выше, и отобразится AT, это означает, что модуль GSM отправил AT, теперь мы можем ответить на PIC, набрав в поле «ОК» и нажав Enter. и ПОС ответит на это. Точно так же мы можем попробовать для всех AT-команд.
Совершение и прием звонков с использованием GSM и PIC:
Как только вы поймете, как работает код и оборудование, просто загрузите приведенную ниже программу на PIC и включите модуль. На ЖК-дисплее должны отображаться «Обнаружен модуль», «Обнаружена SIM-карта» и «Вызов выполнен», если все работает нормально. Как только вы увидите «Вызов отправлен», вы получите входящий звонок на номер, указанный в программе.
Вы также можете попробовать позвонить по номеру, указанному в модуле GSM, и на вашем ЖК-дисплее отобразится «Входящий вызов», чтобы указать на SIM-карту.
Полная работа проекта показана на видео ниже. Надеюсь, вы поняли проект и вам понравилось. Если у вас есть какие-либо проблемы с тем, чтобы что-то работало, разместите свой вопрос в разделе комментариев или на наших форумах, и я буду рад вам помочь.