Kirim Terima SMS dan Telpon dengan Arduino GSM Shield

Ditulis oleh agan

بِسْــــــــــــــــمِ اﷲِالرَّحْمَنِ اارَّحِيم

Halo sahabat BoArduino... Apa kabar nih? rasanya sudah lama tak berjumpa di gubuk ini.. hehe
Semoga sahabat semua masih dalam keadaan baik dan tetap bersemangat ya dalam hidup ini :)

Akhirnya saya bisa mempublish kembali artikel di blog ini, setelah vakum sementara dari bulan September 2016 yang lalu. Permohonan maaf untuk agan semua yang sudah berkunjung dan berkomentar di halaman blog ini apabila komentar kalian belum di balas atau di approve, dikarenakan saya manusia biasa. Kebetulan blog ini hanya di pegang oleh saya sendiri, jadi mohon di maklumi ya :) 

Dikesempatan hari ini saya akan membagikan sedikit pengalaman saya menggunakan Arduino GSM Shield untuk interfacing dengan Arduino. Kebetulan juga ketika saya membalaskan satu persatu dari komentar agan agan, saya lihat cukup banyak juga yang request tutorial untuk Arduino GSM shield, dan kebetulan juga saya mempunya Modul GSM Shield yang saya dapatkan dari salah satu pengunjung blog BoArduino. Terimakasih banyak saya ucapkan untuk agan Yoshua Christian Emmanuel yang telah menyumbangkan modul GSM Shield ini kepada saya untuk saya test dan bagikan pengalaman saya pada sahabat BoArduino semuanya.

Artikel ini adalah bagian awal atau bisa disebut juga Getting Started Arduino dan GSM Shield, untuk permulaan kita akan mencoba menggunakan GSM Shield ini untuk SMS dan Telpon. Di blog ini sebenarnya sudah cukup banyak artikel yang membahas tentang wireless dengan Arduino, mulai dari menggunakan Bluetooth, Internet dan lainnya, akan tetapi belum ada satupun artikel yang menggunakan GSM modul. Maka dari itu, mari kita coba ketangguhan GSM Shield ini. Oke tidak usah bertele-tele, mari langsung saja di simak dan praktikkan gan :)


Features:
  • Quad-Band 850/ 900/ 1800/ 1900 MHz
  • GPRS multi-slot class 10/8
  • GPRS mobile station class B
  • Compliant to GSM phase 2/2+Class 4 (2 W @850/ 900 MHz)
  • Class 1 (1 W @ 1800/1900MHz)
  • Control via AT commands (GSM 07.07 ,07.05 and SIMCOM enhanced AT Commands)
  • Low power consumption: 1.5mA(sleep mode)
  • Operation temperature: -40°C to +85 °C

Alat dan Bahan yang dibutuhkan :
  • 1x Arduino Uno / Genuino (Compatible)
  • 1x Simcard GSM yang Berisi Saldo Pulsa
  • 1x Mobile Phone (Untuk Pengontrol) 
  • 1x SIM900 Modul/Shield (Saya gunakan Icomsat V1.1)

Langkah - Langkahnya :
1.) Pertama, tambahkan library GSM-GPRS-GPS-Shield ke Software Arduino IDE anda.
  • Library GSM-GPRS-GPS-Shield (DOWNLOAD)
2.) Bila sudah, sekarang tancapkan GSM Shield pada Board Arduino yang anda gunakan.
3.) Lalu, pasangkan jumper RX dan TX dari GSM shield ke Pin Arduino. Lihat gambar dibawah.
4.) Jika sudah, selanjutnya pasangkan Simcard GSM anda pada Slot Simcard yang tersedia.
5.) Sekarang, tancapkan kabel USB Arduino ke Komputer/Laptop yang ente gunakan.
6.) Lalu kita akhiri dengan mengupload salah satu sketch dibawah ini pada board Arduino ente.


Mengirim SMS
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
boolean started=false;

void setup() {
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");

  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true;  
  }
  else Serial.println("\nstatus=IDLE");
  
  if(started){
    if (sms.SendSMS("+6289666xxxxxx", "Halo BoArduino :)"))
      Serial.println("\nSMS sent OK");
  }
};

void loop() 
{
}

Menerima SMS
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

void setup() {
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");
     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     }
    delsms();
};

void loop() {
     if(started) {
          sms.GetSMS(1,n,20,smsbuffer,160);
          Serial.println(n);
          Serial.println(smsbuffer);
          delay(1000);
     }
};

void delsms() {
  for (int i = 0; i < 10; i++) {
    int pos = sms.IsSMSPresent(SMS_ALL);
    if (pos != 0){
      if (sms.DeleteSMS(pos) == 1) {} else {}
    }
  }
}

Melakukan Panggilan Telepon
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "call.h"
CallGSM arduino;

void setup(){
   if (gsm.begin(2400));      
}

void loop()
{
  arduino.Call("+6289666xxxxxx");
  delay(30000);
  arduino.HangUp();
  while(1);
}

Menerima Panggilan Telepon, Lalu Mengirim SMS
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "call.h"
CallGSM call;
SMSGSM arduino;
char number[20];
byte stat=0;
int value=0;
int pin=1;
char value_str[5];

void setup()
{
     pinMode(pin, INPUT);
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");
     if (gsm.begin(2400))
          Serial.println("\nstatus=READY");
     else Serial.println("\nstatus=IDLE");
};

void loop()
{
   stat=call.CallStatusWithAuth(number,0,0);
   if(stat==CALL_INCOM_VOICE_AUTH)
   {
      call.HangUp();
      delay(2000);
      value=digitalRead(1);
      itoa(value,value_str,10);
      arduino.SendSMS("+6289666xxxx","Yah CUMI, Cuma Misscall :v");
   }
  delay(1000);
};

Menerima SMS, Lalu Melakukan Panggilan Telepon
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "call.h"
CallGSM arduino;
SMSGSM sms;
int numdata;
boolean started = false;
char smsbuffer[160];
char n[20];

void setup() {
  Serial.begin(9600);
  if (gsm.begin(2400)) {
    started = true;
  }
  delsms();
}

void loop()
{
  int pos = 0;
  if (started) {
    pos = sms.IsSMSPresent(SMS_ALL);
    if (pos) {
      sms.GetSMS(pos, n, 20, smsbuffer, 160);
      delay(2000);

      if (!strcmp(smsbuffer, "telpon ane")) {
        telponTujuan();
      }
      delsms();
    }
  }
}

void telponTujuan() {
  arduino.Call("08966628xxxx");
  delay(20000);
  arduino.HangUp();
  delsms();
}

void delsms() {
  for (int i = 0; i < 10; i++) {
    int pos = sms.IsSMSPresent(SMS_ALL);
    if (pos != 0){
      if (sms.DeleteSMS(pos) == 1) {} else {}
    }
  }
}



*Mengirim SMS dengan Arduino
Untuk mengirim SMS dari Arduino menggunakan SIM900 shield, kita bisa bebas untuk memilih menggunakan AT Command Set atau menggunakan Library GSM-GPRS-GPS-Shield yang telah dibuat oleh MarcoMartines ini. (Di tutorial ini saya menggunakan Library dari MarcoMartines).

Mengirimkan SMS dengan menggunakan Library ini, kita hanya perlu mengupload sketch mengirim SMS yang sudah saya sertakan diatas. Pastikan sebelum mengupload sketch, ente sudah menyesuaikan baris sketch dibawah ini dengan nomor telpon penerima & isi pesan text.
if (sms.SendSMS("+6289666xxxxxx", "Halo BoArduino :)"))
Dimana +6289666xxxxxx (Adalah nomor penerima) dan Halo BoArduino :) (Isi pesan text).

Atau bila ente ingin mengirimkan pesan text Halo BoArduino :) ke nomor tujuan yang nomor telponnya sudah terdaftar pada phonebook simcard ente, maka ubah menjadi seperti ini.
if (sms.SendSMS("3", "Halo BoArduino :)"))
Angka 3 pada sketch diatas itu dimisalkan adalah posisi dari nomor tujuan yang tersimpan pada phonebook simcard, jadi ente bisa mengubah angka itu sesuai nomor urut dari penerima pada phonebook simcard ente. Misalkan ada 5 kontak pada phonebook ente dengan nomor urut.
  1. Andi (089666285492)
  2. Jefri (081298112709)
  3. Agung (085672919221)
  4. Ridwan (082212244213)
  5. Chandra (089644556732)
 Jika sketch diatas kita jadikan angka 3, maka arduino mengirimkan SMS ke nomor telpon Agung.



*Menerima SMS dengan Arduino
Setelah berhasil mengirimkan SMS dengan Arduino, sekarang kita akan mencoba menerima SMS dan menampilkan Inbox simcard kita diserial monitor Arduino IDE. Pada serial monitor, nantinya kita dapat melihat info dari nomor telpon pengirim dan juga isi pesan text yang dikirimkan.

Dengan baris sketch seperti ini, kita akan membaca sms terakhir yang diterima pada simcard.
if(gsm.readSMS(isiPesanSMS, 160, nomorTelpon, 20)) {
Untuk membaca inbox simcard lebih spesifik, ente bisa menggunakan sketch dibawah ini.
if(gsm.GetSMS(2, nomorTelpon, isiPesanSMS, 160)) {
Angka 2 pada baris diatas ini adalah posisi pesan yang ingin dibaca dari simcard, misalkan di dalam inbox simcard ente ada 4 pesan. Analoginya seperti contoh dibawah ini :
  1. Dari Andi : Dimana ente? ane didepan rumah ente!
  2. Dari Jefri : Gan, apa kabar?
  3. Dari Agung : Bro, hari ini kampus libur ya?
  4. Dari Ridwan : Bray, jadi gak kita nonton film The Conjuring 2?
Maka yang dibaca dan ditampilkan di serial monitor adalah pesan pada posisi 2 tersebut.
Yaitu nomor telpon Jefri (081298112709) dan isi pesan text "Gan, apa kabar?"



*Melakukan Panggilan Telepon
Setelah kita mencoba Kirim dan Terima SMS dengan Arduino, sekarang kita akan melakukan hal yang sedikit lebih keren. Mengapa terlihat lebih keren? Karena disini kita akan melakukan panggilan telepon ke nomor tujuan yang sudah ditentukan pada sketch di Arduino.

Coba mari kita perhatikan bersama sketch sederhana dibagian loop ini.
void loop()
{
  arduino.Call("+6289666xxxxxx");
  delay(30000);
  arduino.HangUp();
  while(1);
}
Baris ini adalah baris yang akan mengeksekusi untuk melakukan panggilan ke nomor tujuan.
arduino.Call("+6289666xxxxxx");
Lalu delay selama 30 detik ini adalah lamanya arduino melakukan panggilan ke nomor tujuan.
delay(30000);
Setelah 30 detik berakhir, maka kita sudahi panggilan telpon yang kita lakukan dengan baris ini.
arduino.HangUp();
Dan kita tambahkan baris sketch dibawah ini, jika ingin mengeksekusi panggilan hanya 1 kali.
while(1);
Maka arduino akan menelpon setiap di reset saja dan tidak dilakukan berulang-ulang.
 


*Menerima Panggilan Telpon, Lalu mengirimkan SMS
Setelah berhasil melakukan panggilan telpon dengan Arduino, kita lanjut dengan menerima panggilan telpon dengan Arduino. Disini kita coba menggabungkan menerima panggilan Telpon dari nomor random dan akan menegirimkan SMS balik kepada nomor random tersebut.

Kita perhatikan pada baris sketch untuk menerima panggilan telpon dibawah ini.
stat=call.CallStatusWithAuth(number,0,0);
 if(stat==CALL_INCOM_VOICE_AUTH)
Pada sketch diatas kita isikan value setelah number dengan 0,0 maka kita akan menerima panggilan dari nomor siapapun yang mengetahui nomor telpon kita, tidak hanya dengan nomor telpon spesifik yang ada di phonebook simcard kita. Tetapi kita juga bisa mengubah pada bagian itu agar dapat menerima panggilan telpon hanya dari nomor telpon yang berada di memori phonebook simcard saja dengan mengubah sketch menjadi seperti dibawah ini.
stat=call.CallStatusWithAuth(number,1,3);
 if(stat==CALL_INCOM_VOICE_AUTH)
Nah angka 1 dan 3 diatas adalah pemilihan proses scanning pada phonebook simcard kita, bila menggunakan  sketch diatas maka yang diberi akses untuk menelpon kita tadi hanyalah nomor tujuan yang ada di phonebook list 1 sampai dengan 3 pada simcard yang ada di GSM Shield.

Misalkan isi phonebook pada simcard kita ada 4 buah, dengan list seperti berikut ini.
  1. Andi (089666285492)
  2. Jefri (081298112709)
  3. Agung (085672919221)
  4. Ridwan (082212244213)
Maka yang diberi akses untuk menelpon hanyalah Andri, Jefri dan Agung. Selain itu tidak!



*Menerima SMS, Lalu melakukan panggilan Telepon
Jika tadi kita menerima panggilan telpon terlebih dahulu, setelah itu baru mengirimkan SMS. Sekarang kita akan melakukan kebalikannya, yaitu Arduino akan menerima SMS lalu jika isi pesan SMS nya sesuai dengan sketch maka akan melakukan panggilan telpon ke nomor tujuan.
if(!strcmp(smsbuffer,"telpon ane")){
Jika Simcard yang dipasangkan pada GSM shield menerima SMS berisikan text "telpon ane" maka program akan memanggil fungsi telponTujuan() untuk di eksekusi melakukan panggilan telpon.

Lalu function delsms() adalah fungsi yang akan menghapus semua sms yang ada di simcard.




Terimakasih telah berkunjung, selamat mencoba, semoga bermanfaat.

Blog, Updated pada: 20:47:00
Comments
0 Comments

0 comments:

Post a Comment

Masih Bingung atau Hal Lainnya? Silahkan Bertanya di Kolom Komentar :)

~ Dilarang SARA
~ Dilarang PORNOGRAPHY
~ Dilarang SPAM
~ Dilarang MENINGGALKAN LINK AKTIF
~ Maaf untuk Anonymous, tidak bisa Berkomentar.

Apabila Komentar anda belum muncul, Tunggu sampai di Moderasi.
Terimakasih atas Perhatiannya.


English French German Spain Italian Dutch Russian