- Bahan yang Dibutuhkan:
- Modul GSM:
- Berkomunikasi dengan modul GSM menggunakan perintah AT:
- Diagram Sirkuit:
- Memprogram Anda PIC Mikrokontroler:
- Simulasi:
- Melakukan dan Menerima panggilan menggunakan GSM dan PIC:
Modul GSM sangat menarik untuk digunakan terutama ketika proyek kami membutuhkan akses jarak jauh. Modul-modul ini dapat melakukan semua tindakan yang dapat dilakukan oleh ponsel biasa kita, seperti membuat / menerima panggilan, mengirim / menerima SMS, menghubungkan ke internet menggunakan GPRS, dll. Anda juga dapat menghubungkan mikrofon dan speaker normal ke modul ini dan berkomunikasi di panggilan seluler. Ini akan membuka pintu ke banyak proyek kreatif jika dapat dihubungkan dengan Mikrokontroler. Karenanya dalam tutorial ini kita akan belajar bagaimana kita dapat menghubungkan modul GSM (SIM900A) dengan mikrokontroler PIC kita dan akan mendemonstrasikannya dengan membuat dan menerima panggilan menggunakan Modul GSM. Kami sebelumnya telah menghubungkannya dengan Arduino dan Raspberry Pi untuk menelepon dan mengirim pesan:
- Panggilan dan Pesan menggunakan Arduino dan Modul GSM
- Panggilan dan SMS menggunakan Raspberry Pi dan Modul GSM
Bahan yang Dibutuhkan:
- Mikrokontroler PIC (PIC16F877A)
- Modul GSM (SIM900 atau lainnya)
- Menghubungkan kabel
- Adaptor 12V
- PicKit 3
Modul GSM:
Modul GSM dapat digunakan bahkan tanpa mikrokontroler dengan menggunakan mode perintah AT. Seperti gambar di atas modul GSM dilengkapi dengan adaptor USART yang dapat langsung dihubungkan 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 Speaker dapat dihubungkan. Modul ini dapat diberi daya oleh adaptor 12V melalui jack barel DC normal.
Masukkan kartu SIM Anda ke dalam slot modul dan nyalakan, Anda akan melihat LED daya menyala. Sekarang tunggu sekitar satu menit, dan Anda akan melihat LED merah (atau warna lainnya) Berkedip sekali untuk setiap 3 detik. Ini berarti Modul Anda dapat membuat koneksi dengan kartu SIM Anda. Sekarang Anda dapat melanjutkan dengan menghubungkan modul Anda dengan Telepon atau Mikrokontroler apa pun.
Berkomunikasi dengan modul GSM menggunakan perintah AT:
Seperti yang sudah Anda duga, modul GSM dapat berkomunikasi melalui komunikasi Serial dan hanya dapat memahami satu bahasa, yaitu “ Perintah AT ”. Apa pun yang ingin Anda sampaikan atau tanyakan ke modul GSM, sebaiknya hanya melalui perintah AT. Misalnya jika Anda ingin mengetahui apakah modul Anda aktif. Anda harus meminta (mengirim) perintah seperti "AT" dan modul Anda akan menjawab "OK".
Perintah AT ini dijelaskan dengan baik di lembar datanya dan dapat ditemukan di sini di lembar data resminya. Baik! Baik! Ini adalah lembar data 271 halaman dan Anda mungkin membutuhkan waktu berhari-hari untuk membacanya. Jadi saya telah memberikan beberapa perintah AT yang paling penting di bawah ini agar Anda dapat segera menjalankannya.
DI |
Balasan dengan OK untuk Pengakuan |
DI + CPIN? |
Periksa Kualitas Sinyal |
DI + COPS? |
Temukan nama penyedia layanan |
ATD96XXXXXXXX; |
Panggilan ke nomor tertentu, diakhiri dengan titik koma |
DI + CNUM |
Temukan nomor kartu SIM (mungkin tidak berfungsi untuk beberapa SIM) |
ATA |
Jawab Panggilan Masuk |
ATH |
Menunda panggilan masuk saat ini |
DI + COLP |
Tampilkan nomor panggilan masuk |
AT + VTS = (angka) |
Kirim nomor DTMF. Anda dapat menggunakan nomor apa pun pada keypad ponsel Anda untuk (angka) |
AT + CMGR |
AT + CMGR = 1 membaca pesan di posisi pertama |
DI + CMGD = 1 |
Hapus pesan di posisi pertama |
AT + CMGDA = ”HAPUS SEMUA” |
Hapus Semua pesan dari SIM |
AT + CMGL = ”SEMUA” |
Baca semua pesan dari SIM |
DI + CMGF = 1 |
Setel konfigurasi SMS. "1" untuk mode hanya teks |
DI + CMGS = “+91 968837XXXX” > Teks CircuitDigest
|
Mengirim SMS ke nomor tertentu di sini 968837XXXX. Saat Anda melihat ">" mulai masukkan teks. Tekan Ctrl + Z untuk mengirim teks. |
DI + CGATT? |
Untuk memeriksa koneksi internet pada kartu SIM |
DI + CIPSHUT |
Untuk menutup koneksi TCP, artinya memutuskan koneksi dari internet |
AT + CSTT = “APN”, ”nama pengguna”, ”Lulus” |
Hubungkan ke GPRS dengan APN dan kunci Pass Anda. Dapat diperoleh dari Penyedia Jaringan. |
AT + CIICR |
Periksa apakah kartu SIM memiliki paket data |
AT + CIFSR |
Dapatkan IP dari jaringan SIM |
AT + CIPSTART = “TCP”, ”SERVER IP”, ”PORT” |
Digunakan untuk mengatur koneksi TCP IP |
DI + CIPSEND |
Perintah ini digunakan untuk mengirim data ke server |
Diagram Sirkuit:
Diagram koneksi untuk modul Interfacing GSM dengan mikrokontroler PIC ditunjukkan di bawah ini.
Kami hanya menghubungkan pin Tx dan Rx dari modul GSM dengan pin Rx dan Tx dari PIC MCU PIC16F877A. Ini akan membuat koneksi Serial antara keduanya. Juga, jadi jangan lupa kesamaan antara modul GSM dan PIC. Kami juga menggunakan layar LCD untuk mengetahui status modul GSM kami. Setelah koneksi selesai, perangkat keras Anda akan terlihat seperti di bawah ini.
Papan PIC Perf dibuat untuk seri tutorial PIC kami, di mana kami mempelajari cara menggunakan mikrokontroler PIC. Anda mungkin ingin kembali ke tutorial Mikrokontroler PIC menggunakan MPLABX dan XC8 jika Anda tidak tahu cara membakar program menggunakan Pickit 3, karena saya akan melewatkan semua informasi dasar tersebut.
Memprogram Anda PIC Mikrokontroler:
Program lengkap untuk proyek ini dapat ditemukan di bagian bawah tutorial ini. Di sini saya akan menjelaskan beberapa fungsi penting dan potongan kode. Program ini juga memiliki kode LCD yang berasal dari Interfacing LCD dengan Mikrokontroler PIC, tutorial tersebut dapat Anda kunjungi jika Anda ingin mengetahui bagaimana LCD dapat digunakan dengan mikrokontroler PIC.
Seperti yang dikatakan sebelumnya, kita akan berkomunikasi antara PIC dan GSM menggunakan perintah AT melalui mode komunikasi Serial. Jadi, pertama kita harus menginisialisasi modul komunikasi USART di mikrokontroler PIC kita dengan menggunakan Initialize _SIM900 (); fungsi. Di dalam fungsi ini kami mendeklarasikan pin Tx dan RX dan menginisialisasi penerimaan dan transmisi Asinkron pada kecepatan baud 9600 dan mode 8-bit.
// *** Inisialisasi UART untuk SIM900 ** // void Initialize_SIM900 (void) {// **** Menyetel pin I / O untuk UART **** // TRISC6 = 0; // Pin TX ditetapkan sebagai keluaran TRISC7 = 1; // Pin RX disetel sebagai input // ________ Set pin I / O __________ // / ** Inisialisasi register SPBRG untuk baud rate yang diperlukan dan setel BRGH untuk baud_rate cepat ** / SPBRG = 129; // SIM900 beroperasi pada 9600 Baud rate jadi 129 BRGH = 1; // untuk baud_rate tinggi // _________ Akhir dari pengaturan baud_rate _________ // // **** Aktifkan Asynchronous serial port ******* // SYNC = 0; // Asynchronous SPEN = 1; // Aktifkan pin port serial // _____ Port serial asinkron diaktifkan _______ // // ** Mari bersiap untuk transmisi & penerimaan ** // TXEN = 1; // aktifkan transmisi CREN = 1; // aktifkan penerimaan // __ modul UART ke atas dan siap untuk transmisi dan penerimaan __ // // ** Pilih mode 8-bit ** // TX9 = 0; // Penerimaan 8-bit dipilih RX9 = 0;// Mode penerimaan 8-bit dipilih // __ Mode 8-bit dipilih __ //} // ________ Modul UART Diinisialisasi __________ //
Sekarang kita perlu membaca dan menulis informasi dari / ke modul GSM kita. Untuk ini kami menggunakan fungsi _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Fungsi-fungsi ini menggunakan Transmit dan terima buffer register seperti TXREG dan RCREG untuk membaca atau menulis data secara serial.
// ** Berfungsi untuk mengirimkan satu byte tanggal ke UART ** // void _SIM900_putch (char bt) {while (! TXIF); // tahan program sampai buffer TX bebas TXREG = bt; // Muat buffer pemancar dengan nilai yang diterima} // _____________ Akhir fungsi ________________ // // ** Fungsi untuk mendapatkan satu byte tanggal dari UART ** // char _SIM900_getch () {if (OERR) // periksa Kesalahan { CREN = 0; // Jika error -> Reset CREN = 1; // Jika error -> Reset} while (! RCIF); // tahan program sampai buffer RX adalah pengembalian bebas RCREG; // menerima nilai dan mengirimkannya ke fungsi utama} // _____________ Akhir fungsi ________________ // // ** Fungsi untuk mengubah string menjadi byte ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // jika ada adalah karakter _SIM900_putch (* st_pt ++);// memprosesnya sebagai data byte} // ___________ Akhir fungsi ______________ // // ** Akhir Kode yang dimodifikasi ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Fungsi di atas bersifat universal dan tidak perlu diubah untuk aplikasi apa pun. Mereka dijelaskan hanya untuk memberikan intro kasar. Anda dapat menyelami mereka lebih dalam jika Anda ingin melalui pemahaman.
Sekarang di dalam fungsi utama kami, kami menginisialisasi koneksi USART dan memeriksa apakah kami dapat menerima "OK" ketika kami mengirim "AT" dengan menggunakan baris kode di bawah ini
lakukan {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul tidak ditemukan"); } sementara (! SIM900_isStarted ()); // tunggu sampai GSM mengirim kembali "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modul Terdeteksi"); __delay_ms (1500);
Fungsi SIM900_isStarted (); akan mengirim "AT" ke GSM dan menunggu respon "OK" dari itu. Jika ya, itu akan mengembalikan 1 lagi 0;
Jika modul tidak terdeteksi atau jika ada masalah koneksi maka LCD akan menampilkan “Modul tidak ditemukan”, jika tidak modul akan terdeteksi dan melanjutkan ke langkah berikutnya di mana, kami memeriksa apakah kartu SIM dapat dideteksi di bawah ini baris kode.
/ * Periksa apakah kartu SIM terdeteksi * / lakukan {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM tidak ditemukan"); } sementara (! SIM900_isReady ()); // tunggu sampai GSM mengirim kembali "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM Terdeteksi"); __delay_ms (1500);
Fungsi SIM900_isReady () akan mengirim “AT + CPIN?” ke GSM dan menunggu respon “+ CPIN: READY” darinya. Jika ya, itu akan mengembalikan 1 lagi 0;
Jika kartu SIM jika ditemukan kami akan mendapatkan SIM terdeteksi ditampilkan di LCD. Kemudian, kita dapat mencoba melakukan panggilan dengan menggunakan perintah “ ATD mobilenumber ; ". Di sini sebagai contoh saya telah menggunakan nomor saya sebagai ATD93643159XX;. Anda harus mengganti nomor ponsel Anda di sana.
/ * Lakukan Panggilan Telepon * / lakukan {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Di sini kita melakukan panggilan ke nomor 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Menelepon…."); } sementara (_SIM900_waitResponse ()! = SIM900_OK); // tunggu sampai ESP mengirim kembali "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Panggilan Dilakukan…."); __delay_ms (1500);
Setelah panggilan dilakukan, LCD akan menampilkan Panggilan Dilakukan dan Anda akan menerima panggilan masuk ke nomor yang ditentukan.
Anda juga dapat menelepon ke nomor ponsel yang terhubung ke modul GSM dan mendapatkan pemberitahuan tentang itu di layar LCD Anda menggunakan kode di bawah ini
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Periksa apakah ada panggilan masuk {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Panggilan Masuk !!."); }}
Ketika modul GSM mendeteksi panggilan masuk, maka akan ditampilkan Panggilan masuk pada baris kedua modul LCD. Fungsi _SIM900_waitResponse () akan memeriksa data yang masuk dari modul GSM. Saat menerima SIM900_RING, yang setara dengan "RING" karena waitResponce () , kami akan menampilkan status "Panggilan masuk".
Anda dapat membuat fungsi Anda sendiri seperti ini untuk melakukan hampir semua jenis pengaktifan menggunakan modul GSM. Jika Anda ingin memiliki hardcode, Anda cukup menggunakan fungsi __SIM900_print () untuk mengirim perintah AT seperti ini di bawah.
_SIM900_print ("AT + CPIN? \ R \ n");
Ingatlah bahwa semua perintah Anda harus diikuti dengan "\ r \ n" untuk menunjukkan bahwa perintah tersebut dihentikan.
Simulasi:
Setelah Anda memahami cara kerja program, Anda dapat mencoba mensimulasikan dan membuat perubahan yang sesuai dengan kebutuhan Anda. Simulasi akan menghemat banyak waktu. Simulasi dilakukan dengan menggunakan Proteus dan tampilannya seperti di bawah ini.
Seperti yang Anda lihat, kami telah menggunakan opsi terminal virtual di Proteus untuk memeriksa apakah Program merespons seperti yang diharapkan. Kita dapat memasukkan nilai melalui kotak dialog pop-up. Misal begitu kita tekan run, akan muncul kotak dialog hitam seperti diatas dan menampilkan AT, artinya sudah mengirimkan modul GSM AT, sekarang kita bisa membalas PIC dengan mengetik di kotak “OK” dan tekan enter dan PIC akan menanggapinya. Demikian pula kita dapat mencoba untuk semua perintah AT.
Melakukan dan Menerima panggilan menggunakan GSM dan PIC:
Setelah Anda memahami cara kerja kode dan perangkat keras, cukup unggah program di bawah ini ke PIC dan nyalakan modul. LCD Anda harus menampilkan "Modul Terdeteksi", "SIM terdeteksi" dan "panggilan Dilakukan" jika semuanya berfungsi dengan baik. Setelah Anda melihat "Panggilan dilakukan", Anda akan mendapatkan panggilan masuk ke nomor yang ditentukan dalam program.
Anda juga dapat mencoba menelepon ke nomor yang ada di modul GSM dan LCD Anda akan menampilkan "Panggilan masuk" untuk menunjukkan bahwa SIM sedang dipanggil.
Pekerjaan lengkap proyek ini ditunjukkan pada video di bawah ini. Semoga Anda memahami proyek ini dan senang melakukannya. Jika Anda memiliki masalah dalam menyelesaikan sesuatu, posting pertanyaan Anda di bagian komentar atau di Forum kami dan saya akan dengan senang hati membantu Anda.