- Bahan yang Diperlukan:
- Modul GSM:
- Berkomunikasi dengan modul GSM menggunakan perintah AT:
- Rajah Litar:
- Mengaturcara anda PIC Microcontroller:
- Simulasi:
- Membuat dan Menerima panggilan menggunakan GSM dan PIC:
Modul GSM menarik untuk digunakan terutamanya apabila projek kami memerlukan akses jarak jauh. Modul-modul ini dapat membuat semua tindakan yang dapat dilakukan oleh telefon bimbit biasa kami, seperti membuat / menerima panggilan, mengirim / menerima SMS, menyambung ke internet menggunakan GPRS dll. Anda juga dapat menyambungkan mikrofon dan pembesar suara biasa ke modul ini dan berbicara pada panggilan mudah alih. Ini akan membuka banyak projek kreatif jika dapat dihubungkan dengan Mikrokontroler. Oleh itu, dalam tutorial ini kita akan belajar bagaimana kita dapat Memadankan modul GSM (SIM900A) dengan mikrokontroler PIC kita dan akan menunjukkannya dengan membuat dan menerima panggilan menggunakan Modul GSM. Kami sebelumnya menghubungkannya dengan Arduino dan Raspberry Pi untuk membuat panggilan dan pesanan:
- Panggilan dan Mesej menggunakan Arduino dan GSM Module
- Panggilan dan Teks menggunakan Mod Raspberry Pi dan GSM
Bahan yang Diperlukan:
- Pengawal Mikro PIC (PIC16F877A)
- Modul GSM (SIM900 atau yang lain)
- Menyambung wayar
- Penyesuai 12V
- PicKit 3
Modul GSM:
Modul GSM dapat digunakan walaupun tanpa mikrokontroler dengan menggunakan mod perintah AT. Seperti yang ditunjukkan di atas modul GSM dilengkapi dengan penyesuai USART yang dapat dihubungkan secara langsung ke komputer dengan menggunakan modul MAX232 atau pin Tx dan Rx dapat digunakan untuk menghubungkannya ke Mikrokontroler. Anda juga dapat melihat pin lain seperti MIC +, MIC-, SP +, SP- dll di mana mikrofon atau Pembesar suara boleh disambungkan. Modul ini dapat dihidupkan oleh penyesuai 12V melalui bicu tong DC biasa.
Masukkan kad SIM anda di slot modul dan hidupkan, anda akan melihat LED kuasa menyala. Sekarang tunggu sebentar, dan anda akan melihat LED merah (atau warna lain) berkelip LED setiap 3 saat. Ini bermaksud bahawa Modul anda dapat membuat sambungan dengan kad SIM anda. Sekarang anda boleh meneruskan menghubungkan modul anda dengan Telefon atau Mikrokontroler mana pun.
Berkomunikasi dengan modul GSM menggunakan perintah AT:
Seperti yang anda duga, modul GSM dapat berkomunikasi melalui komunikasi Serial dan hanya dapat memahami satu bahasa dan itu adalah " perintah AT ". Apa pun yang anda ingin ceritakan atau tanyakan kepada modul GSM, ia hanya boleh melalui perintah AT. Contohnya jika anda ingin mengetahui sama ada modul anda aktif. Anda harus bertanya (kirim) arahan seperti "AT" dan modul anda akan menjawab "OK".
Perintah AT ini dijelaskan dengan baik dalam lembaran datanya dan boleh didapati di sini dalam lembar data rasminya. Baik! Baik! Ini adalah lembaran data halaman 271 dan anda mungkin memerlukan masa berhari-hari untuk membacanya. Oleh itu, saya telah memberikan beberapa arahan AT yang paling penting di bawah ini agar anda segera dapat menjalankannya.
AT |
Balas dengan OK untuk Pengakuan |
AT + CPIN? |
Periksa Kualiti isyarat |
DI + COPS? |
Cari nama pembekal perkhidmatan |
ATD96XXXXXXXX; |
Panggil ke nombor tertentu, diakhiri dengan titik koma |
AT + CNUM |
Cari nombor kad SIM (mungkin tidak berfungsi untuk beberapa SIM) |
ATA |
Jawab Panggilan Masuk |
ATH |
Tangguhkan panggilan masuk semasa |
AT + COLP |
Tunjukkan nombor panggilan masuk |
AT + VTS = (nombor) |
Hantar nombor DTMF. Anda boleh menggunakan sebarang nombor pada papan kekunci telefon bimbit anda untuk (nombor) |
AT + CMGR |
AT + CMGR = 1 membaca mesej pada kedudukan pertama |
AT + CMGD = 1 |
Padamkan mesej pada kedudukan pertama |
AT + CMGDA = "DEL SEMUA" |
Padamkan Semua mesej dari SIM |
AT + CMGL = "SEMUA" |
Baca semua pesanan dari SIM |
AT + CMGF = 1 |
Tetapkan konfigurasi SMS. "1" adalah untuk mod teks sahaja |
AT + CMGS = "+91 968837XXXX" > Teks CircuitDigest
|
Menghantar SMS ke nombor tertentu di sini 968837XXXX. Apabila anda melihat ">" mulailah memasukkan teks. Tekan Ctrl + Z untuk menghantar teks. |
AT + CGATT? |
Untuk memeriksa sambungan internet pada kad SIM |
AT + CIPSHUT |
Untuk menutup sambungan TCP, bermaksud memutuskan sambungan internet |
AT + CSTT = "APN", "nama pengguna", "Lulus" |
Sambung ke GPRS dengan kunci APN dan Lulus anda. Boleh dapatkan dari Network Provider. |
AT + CIICR |
Periksa sama ada kad SIM mempunyai pek data |
AT + CIFSR |
Dapatkan IP rangkaian SIM |
AT + CIPSTART = "TCP", "SERVER IP", "PORT" |
Digunakan untuk menetapkan sambungan TCP IP |
AT + CIPSEND |
Perintah ini digunakan untuk mengirim data ke pelayan |
Rajah Litar:
Gambar rajah sambungan untuk modul GSM Interfacing dengan mikrokontroler PIC ditunjukkan di bawah.
Kami hanya menghubungkan pin Tx dan Rx modul GSM dengan pin Rx dan Tx masing-masing PIC MCU PIC16F877A. Ini akan mewujudkan hubungan Serial antara kedua-duanya. Oleh itu, jangan lupa untuk meraikan modul GSM dan PIC. Kami juga telah menggunakan paparan LCD untuk mengetahui status modul GSM kami. Setelah sambungan selesai, perkakasan anda akan kelihatan seperti di bawah.
PIC Perf board dibuat untuk siri tutorial PIC kami, di mana kami belajar bagaimana menggunakan mikrokontroler PIC. Anda mungkin ingin kembali ke tutorial PIC Microcontroller menggunakan MPLABX dan XC8 jika anda tidak tahu cara membakar program menggunakan Pickit 3, kerana saya akan melangkau semua maklumat asas tersebut.
Mengaturcara anda PIC Microcontroller:
Program lengkap untuk projek ini terdapat di bahagian bawah tutorial ini. Di sini saya akan menerangkan beberapa fungsi penting dan potongan kod. Program ini juga mempunyai kod LCD yang berasal dari Interfacing LCD dengan PIC Microcontroller, anda boleh mengunjungi tutorial itu jika anda ingin tahu bagaimana LCD dapat digunakan dengan PIC microcontroller.
Seperti yang dinyatakan sebelumnya, kami akan berkomunikasi antara PIC dan GSM menggunakan perintah AT melalui mod komunikasi Serial. Oleh itu, pertama kita harus menginisialisasi modul komunikasi USART dalam mikrokontroler PIC kita dengan menggunakan Initialize _SIM900 (); fungsi. Di dalam fungsi ini, kami menyatakan pin Tx dan RX dan menginisialisasi penerimaan dan penghantaran Asinkron pada kadar 9600 baud dan mod 8-bit.
// *** Memulakan UART untuk SIM900 ** // batal Initialize_SIM900 (batal) {// **** Menetapkan pin I / O untuk UART **** // TRISC6 = 0; // TX Pin ditetapkan sebagai output TRISC7 = 1; // RX Pin ditetapkan sebagai input // ________ Pin I / O set __________ // / ** Permulaan daftar SPBRG untuk kadar baud yang diperlukan dan tetapkan BRGH untuk kadar baud_ cepat ** / SPBRG = 129; // SIM900 beroperasi pada kadar 9600 Baud sehingga 129 BRGH = 1; // untuk kadar baud_rate tinggi // _________ Akhir tetapan kadar baud _________ // // **** Dayakan port bersiri tak segerak ******* // SYNC = 0; // SPEN segerak = 1; // Aktifkan pin port bersiri // _____ Port siri tidak segerak diaktifkan _______ // // ** Mari bersiap sedia untuk penghantaran & penerimaan ** // TXEN = 1; // aktifkan penghantaran CREN = 1; // aktifkan penerimaan // __ modul UART ke atas dan siap untuk penghantaran dan penerimaan __ // // ** Pilih mod 8-bit ** // TX9 = 0; // Penerimaan 8-bit dipilih RX9 = 0;// Mod penerimaan 8-bit dipilih // __ mod 8-bit dipilih __ //} // ________ modul UART Dimulakan __________ //
Sekarang kita perlu membaca dan menulis maklumat dari / ke modul GSM kita. Untuk ini kami menggunakan fungsi _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Fungsi-fungsi ini menggunakan Transmitter dan menerima buffer register seperti TXREG dan RCREG untuk membaca atau menulis data secara bersiri.
// ** Fungsi untuk menghantar satu bait tarikh ke UART ** // batal _SIM900_putch (char bt) {while (! TXIF); // tahan program sehingga penyangga TX bebas TXREG = bt; // Muatkan penyangga pemancar dengan nilai yang diterima} // _____________ Tamat fungsi ________________ // // ** Fungsi untuk mendapatkan satu bait tarikh dari UART ** // char _SIM900_getch () {if (OERR) // periksa Ralat { CREN = 0; // Sekiranya ralat -> Tetapkan semula CREN = 1; // Sekiranya ralat -> Tetapkan semula} semasa (! RCIF); // tahan program sehingga penyangga RX bebas RCREG; // terima nilai dan hantarkan ke fungsi utama} // _____________ Tamat fungsi ________________ // // ** Fungsi untuk menukar rentetan ke bait ** // batal SIM900_send_string (char * st_pt) {sementara (* st_pt) // jika ada ialah char _SIM900_putch (* st_pt ++);// memprosesnya sebagai data bait} // ___________ Tamat fungsi ______________ // // ** Akhir Kod yang diubah ** // batal _SIM900_print (uns chared const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Fungsi di atas bersifat universal dan tidak perlu diubah untuk sebarang aplikasi. Mereka dijelaskan hanya untuk memberi pengenalan kasar. Anda dapat menyelami lebih mendalam jika anda mahu melalui pemahaman.
Sekarang di dalam fungsi utama kita, kita menginisialisasi sambungan USART dan memeriksa apakah kita dapat menerima "OK" ketika kita mengirim "AT" dengan menggunakan baris kod di bawah ini
lakukan {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul tidak dijumpai"); } sementara (! SIM900_isStarted ()); // tunggu sehingga GSM menghantar kembali "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul Dikesan"); __delay_ms (1500);
Fungsi SIM900_isStarted (); akan menghantar "AT" ke GSM dan menunggu jawapan "OK" darinya. Sekiranya ya, ia akan mengembalikan 1 yang lain 0;
Sekiranya modul tidak dikesan atau jika ada masalah sambungan maka LCD akan menunjukkan "Modul tidak dijumpai", yang lain akan menunjukkan Modul dikesan dan terus ke langkah seterusnya di mana, kami periksa sama ada kad SIM dapat dikesan di bawah garis kod.
/ * Periksa sama ada kad SIM dikesan * / lakukan {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM tidak dijumpai"); } sementara (! SIM900_isReady ()); // tunggu sehingga GSM menghantar kembali "+ CPIN: SIAP" Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM Dikesan"); __delay_ms (1500);
Fungsi SIM900_isReady () akan menghantar "AT + CPIN?" ke GSM dan menunggu jawapan "+ CPIN: SIAP" daripadanya. Sekiranya ya, ia akan mengembalikan 1 yang lain 0;
Sekiranya kad SIM dijumpai, kami akan mendapat SIM yang dikesan dipaparkan di LCD. Kemudian, kita boleh mencuba membuat panggilan dengan menggunakan perintah " ATD mobilenumber ; ”. Di sini sebagai contoh saya telah menggunakan nombor saya sebagai ATD93643159XX;. Anda mesti mengganti nombor telefon bimbit anda di sana.
/ * Buat Panggilan Telefon * / lakukan {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Di sini kita membuat panggilan ke nombor 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Melakukan Panggilan…."); } sementara (_SIM900_waitResponse ()! = SIM900_OK); // tunggu sehingga ESP menghantar kembali "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Panggilan Dilakukan…."); __delay_ms (1500);
Setelah panggilan dibuat, LCD akan memaparkan Call Placed dan anda akan menerima panggilan masuk ke nombor yang ditentukan.
Anda juga boleh menghubungi nombor telefon bimbit yang disambungkan ke modul GSM dan diberitahu mengenainya di skrin LCD anda menggunakan kod di bawah
sementara (1) {if (_SIM900_waitResponse () == SIM900_RING) // Periksa sama ada terdapat panggilan masuk {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Panggilan Masuk !!."); }}
Apabila modul GSM mengesan panggilan masuk, ia akan memaparkan panggilan masuk pada baris kedua modul LCD. Fungsi _SIM900_waitResponse () akan memeriksa data masuk dari modul GSM. Ketika menerima SIM900_RING, yang setara dengan "RING" karena waitResponce () , kami akan menampilkan status "Panggilan masuk".
Anda boleh membuat fungsi anda sendiri seperti ini untuk melakukan hampir semua jenis pengaktifan menggunakan modul GSM. Sekiranya anda ingin mempunyai perkara yang dikodkan keras, anda boleh menggunakan fungsi __SIM900_print () untuk menghantar arahan AT seperti ini di bawah.
_SIM900_print ("AT + CPIN? \ R \ n");
Ingatlah bahawa semua perintah anda harus diikuti dengan "\ r \ n" untuk menunjukkan bahawa perintah itu akan berakhir.
Simulasi:
Setelah anda memahami bagaimana program ini berfungsi, anda boleh mencuba simulasi dan membuat perubahan yang sesuai dengan keperluan anda. Simulasi akan menjimatkan banyak masa. Simulasi dilakukan menggunakan Proteus dan seperti di bawah.
Seperti yang anda lihat, kami telah menggunakan pilihan terminal maya di Proteus untuk memeriksa apakah Program ini bertindak balas seperti yang diharapkan. Kita dapat memasukkan nilai melalui kotak dialog pop timbul. Sebagai contoh sebaik sahaja kita tekan lari, kotak dialog hitam seperti di atas akan muncul dan memaparkan AT, ini bermaksud ia telah mengirim modul GSM AT, sekarang kita dapat membalas PIC dengan mengetik di kotak sebagai "OK" dan tekan enter dan PIC akan bertindak balas terhadapnya. Begitu juga kita boleh mencuba semua perintah AT.
Membuat dan Menerima panggilan menggunakan GSM dan PIC:
Setelah anda memahami bagaimana kod dan perkakasan berfungsi, muat naik program di bawah ke PIC dan hidupkan modul. LCD anda harus memaparkan "Module Detected", "SIM Terdeteksi" dan "Call Placed" jika semuanya berjalan lancar Sebaik sahaja anda melihat "Panggilan ditempatkan", anda akan mendapat panggilan masuk ke nombor yang ditentukan dalam program ini.
Anda juga boleh mencuba memanggil ke nombor yang ada dalam modul GSM dan LCD anda akan memaparkan "Panggilan masuk" untuk menunjukkan bahawa SIM sedang dipanggil.
Kerja-kerja projek yang lengkap ditunjukkan dalam video di bawah. Semoga anda memahami projek ini dan seronok melakukannya. Sekiranya anda mempunyai masalah dalam menyelesaikan sesuatu, hantarkan soalan anda di bahagian komen atau di Forum kami dan saya dengan senang hati akan membantu anda.