- Необхідні матеріали:
- Модуль 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”, і ваш модуль відповість “OK”.
Ці команди AT добре пояснено в його технічному паспорті, і їх можна знайти тут в офіційному паспорті. Добре! Добре! Це таблиця даних на 271 сторінку, і її прочитання може зайняти кілька днів. Отже, я дав декілька найважливіших команд AT, щоб ви змогли це швидко запустити.
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 = ”DEL ALL” |
Видалити всі повідомлення з SIM-картки |
AT + CMGL = "ВСЕ" |
Читати всі повідомлення з SIM-карти |
AT + CMGF = 1 |
Встановити конфігурацію SMS. “1” призначений лише для текстового режиму |
AT + CMGS = “+91 968837XXXX” > CircuitDigest Text
|
Надсилає 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”, “SERVER IP”, “PORT” |
Використовується для встановлення IP-з'єднання TCP |
AT + CIPSEND |
Ця команда використовується для надсилання даних на сервер |
Кругова діаграма:
Схема підключення модуля взаємодії GSM з мікроконтролером PIC показана нижче.
Ми просто з'єднали висновки Tx та Rx модуля GSM з виводами Rx і Tx мікроконтролера PIC 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); // утримуємо програму до тих пір, поки буфер RX не звільниться RCREG; // отримуємо значення та надсилаємо його головній функції} // _____________ Кінець функції ________________ // // ** Функція для перетворення рядка в байт ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there є символом _SIM900_putch (* st_pt ++);// обробляємо як байтові дані} // ___________ Кінець функції ______________ // // ** Кінець змінених кодів ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Вищевказані функції є універсальними і не потребують змін у будь-яких додатках. Їм пояснювали лише грубий вступ. Ви можете глибоко зануритися в них, якщо хочете через розуміння.
Тепер всередині нашої основної функції ми ініціалізуємо підключення USART і перевіряємо, чи можемо ми отримати «ОК», коли ми відправляємо «AT», використовуючи наведений нижче рядок коду
виконайте {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Модуль не знайдено"); } while (! SIM900_isStarted ()); // зачекаємо, поки GSM поверне "OK" 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: ГОТОВ" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Виявлено SIM-карту"); __delay_ms (1500);
Функція SIM900_isReady () надішле “AT + CPIN?” на GSM і чекає відповіді “+ CPIN: ГОТОВИЙ” від нього. Якщо так, це поверне 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 поверне "OK" 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, ввівши в поле "OK" і натиснути Enter і ПОС відповість на нього. Подібним чином ми можемо спробувати для всіх команд AT.
Здійснення та отримання дзвінків за допомогою GSM та PIC:
Як тільки ви зрозумієте, як працює код та апаратне забезпечення, просто завантажте наведену нижче програму на PIC та увімкніть модуль. Якщо все працює нормально, на рідкокристалічному дисплеї повинно відображатися повідомлення “Module Detected”, “SIM SIM” та “Call Placed”. Щойно ви побачите “Здійснено дзвінок”, ви отримаєте вхідний дзвінок на номер, вказаний у програмі.
Ви також можете спробувати зателефонувати на номер, присутній у модулі GSM, і на РК-дисплеї з'явиться повідомлення "Вхідний дзвінок", що вказує на те, що SIM-телефон викликається.
Повна робота проекту показана у відео нижче. Сподіваюся, ви зрозуміли проект і вам сподобалось його робити. Якщо у вас виникли проблеми з тим, щоб щось працювати, опублікуйте своє запитання в розділі коментарів або на наших форумах, і я буду радий вам допомогти.