Wednesday, November 12, 2014

Send SMS jilid I

Proyek pertama yang menggunakan fungsi GSM adalah mengirim SMS. Karena akan menggunakan fungsi GSM, maka pindahkan jumper dari 'Ardu' ke 'GSM'. Sedangkan Serial Select menggunakan serial emulator VRx dan VTx. VRx adalah pin D2 dan VTx adalah pin D3 seperti yang digunakan oleh Official GSM SHIELD Arduino. Hardware serial Rx dan Tx digunakan sebagai download program dan debug.


Persiapan hardwarenya belum cukup. Lho kok?
Modul GSM kadang memerlukan arus hingga 2A berupa burst. Malah pusing saya Mas, burst itu apa?
Burst itu berupa pulsa-pulsa yang rapat dan hanya singkat. Tambah ngak ngerti saya Mas. Wislah pokok intinya tidak dapat hanya mengandalkan sumber daya dari USB. Harus ada sumber yang lain, yaitu dari battray atau catu daya. Lebih bagus lagi ada kedua-duanya. Catu daya disarankan 2A, kalo terpaksa 1A cukuplah, tapi ada kemungkinan bisa mati tuh GSM karena kurang daya.


 Satu lagi yang sangat plenting, eh PENTING. Jangan lupa pasang SIMCARD pada soketnya. Bahasa kerennya SIMCAR DHOLDER. Pakai SIM yang masih hidupya, dan di isi dulu pulsanya. jangan cuma 2000 hehe... Nanti alatnya ngak jalan anda ngoceh bau di telinga saya panjang lebar, ternyata SIMnya ngak ada isi. Lak yo capedeh saya. Mana obat kuping mahal lagi he....



Program kirim SMS menggunakan program yang ada dalam 'libraries GSM' Oficial Arduino. Buka sample 'SendSMS.ino'. Dari folder tempat menyimpan Arduino, pilih libraries, GSM, examples, SendSMS lalu SendSMS.ino.
Kalo di Komputer saya ada di folder berikut;




 Ini dia penampakannya;

Mas yg mana sih? Wis buka Arduino-mu, terus copy/paste program di bawah ini ke Sketch-nya


/*

 SMS sender



 This sketch, for the Arduino GSM shield,sends an SMS message 

 you enter in the serial monitor. Connect your Arduino with the 

 GSM shield and SIM card, open the serial monitor, and wait for 

 the "READY" message to appear in the monitor. Next, type a 

 message to send and press "return". Make sure the serial 

 monitor is set to send a newline when you press return.



 Circuit:

 * GSM shield 

 * SIM card that can send SMS



 created 25 Feb 2012

 by Tom Igoe



 This example is in the public domain.



 http://arduino.cc/en/Tutorial/GSMExamplesSendSMS



 */



// Include the GSM library

#include <GSM.h>



#define PINNUMBER ""



// initialize the library instance

GSM gsmAccess;

GSM_SMS sms;



void setup()

{

  // initialize serial communications and wait for port to open:

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for Leonardo only

  }

  

  Serial.println("SMS Messages Sender");



  // connection state

  boolean notConnected = true;



  // Start GSM shield

  // If your SIM has PIN, pass it as a parameter of begin() in quotes

  while(notConnected)

  {

    if(gsmAccess.begin(PINNUMBER)==GSM_READY)

      notConnected = false;

    else

    {

      Serial.println("Not connected");

      delay(1000);

    }

  }

  

  Serial.println("GSM initialized");

}



void loop()

{



  Serial.print("Enter a mobile number: ");

  char remoteNum[20];  // telephone number to send sms

  readSerial(remoteNum);

  Serial.println(remoteNum);

    

  // sms text

  Serial.print("Now, enter SMS content: ");

  char txtMsg[200];

  readSerial(txtMsg);

  Serial.println("SENDING");

  Serial.println();

  Serial.println("Message:");

  Serial.println(txtMsg);

  

  // send the message

  sms.beginSMS(remoteNum);

  sms.print(txtMsg);

  sms.endSMS(); 

  Serial.println("\nCOMPLETE!\n");

}



/*

  Read input serial

 */

int readSerial(char result[])

{

  int i = 0;

  while(1)

  {

    while (Serial.available() > 0)

    {

      char inChar = Serial.read();

      if (inChar == '\n')

      {

        result[i] = '\0';

        Serial.flush();

        return 0;

      }

      if(inChar!='\r')

      {

        result[i] = inChar;

        i++;

      }

    }

  }

}

Upload program ke GSMduino, setelah 'Done Uploding' buka 'Serial Monitor', shortcart-nya tekan  Ctrl+Shift+M


 Led NET juga akan berkedip.

 Sekarang kerjaan kita menunggu. Lho kok menunggu? Sama seperti menghidupkan HP, HP harus melakukan inisialisasi, mencari jaringan, mendaftar kejaringan dan lain sebagainya. Tugas kita adalah selalu lihat Led NET apakah mati. Jika mati ada dua kemungkinan:
  1. Power suplay tidak sanggup memberikan arus hingga 2A, sehingga tegangan droup ke 3.2V. Oh iya belum kasih tau ya. Kalo tegangan droup sampai 3.2V atau dibawahnya, modul GSM akan mati dengan sendirinya.
  2.  Terjadi RESET mikro 2 kali.
Kasus yang pertama solusinya ya ganti adaptor sebagai power suplay yang lebih besar amper-nya.
Kasus yang ke dua solusinya tekan tombol RESET sekali lagi, dan tunggu hingga Led NET menyala.






Lho kok ngak praktis!! Harus campur tangan manusia. Gimana ini, mau di pasang di atas Gunung Merapi buat log data!

Sik-sik Mas Bro. Sampai di sini ngelmu kita masih seperti bayi, harus disuapi, harus digendong hehe.... entar kita bahas mengapa begitu, mengapa begini. Entar juga Anda lebih Jago dari saya, saya JAMIN!* (syarat dan ketentuan berlaku)
Syaratnya mau belajar, ketentuannya buat modulnya, ehe..m.. kalo malas buat, boleh beli dari saya hehe.... modus.


Wokeh kita tangguhkan dahulu masalah di atas, nanti kita bahas. Sekarang kita lanjutkan.

Serial monitor tadi jangan di tutup ya. Tunggu hingga Serial monitor menampilkan pesan seperti ini;


Nah kalo sudah ada kata-kata 'Enter a mobile number:', silahkan ketik nomor HP anda. Nomor tersebut yang akan dikirimi SMS.


Contoh di atas adalah dengan nomor saya (ganti dengan nomor HP anda). Jangan dikirim macem-macem ya nomor saya. Atau dibom SMS hehe...
Lalu tekan 'Send'


 Ketikan isi SMS yang ingin dikirim, lalu tekan 'Send'



 Wala.... SMS diterima di HP anda, Syaratnya SIMCARD ada pulsanya hehe...

Karena satu loop program telah terlewati, maka loop program akan berulang dari atas. Sekarang anda dapat mengirim SMS yang lain.
Bagai mana belajarnya? Asik bukan? Masih kuat? Atau semakin semangat. Kalo semakin semangat syukurlah.

 Mari kita bahas jalannya Program di atas. Sebelumnya, karena program ini menggunakan program official Arduino, maka anda dapat melihat referensi class-class yang digunakan  pada halaman web berikut.

Awal program GSM.h di include. Pada file GSM.h itulah semua kelas yang menangani GSM berada. PINNUMBER berisi string kosong, karena SIMCARD-nya tidak memakai PIN. Dua class yang dipakai pada program ini di inisialisasi di awal. class itu adalah class GSM dan class GSM_SMS, seperti berikut;

// initialize the library instance
GSM gsmAccess;
GSM_SMS sms;

Dibuat object baru dari class 'GSM' dengan nama 'gsmAccess' dan object 'sms' dari class 'GSM_SMS'.'gsmAccess' bertugas mengurusi, menghidupkan, mematikan modul GSM. Sedangkan object 'sms' bertugas mengurusi segala sesuatu tentang SMS.

Seperti biasanya Arduino memiliki 2 prosedur utama yaitu 'setup' dan 'loop'. Pada prosedur 'setup' berisi inisialisasi-inisialisasi program dan pada prosedur 'loop' berisi looping utama program. Hal pertama yang dilakukan dalam prosedur 'setup' adalah inisialisasi hardware serial sebagai debug.

 
// initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
}


Berikutnya adalah menjalankan 'gsmAccess' yang merupakan class GSM.

  

// Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);

    }
  }

Pada procedur 'gsmAccess.begin(PINNUMBER)', dilakukan :
  1. Proses inisialisasi serial emulator untuk GSM. Serial ini akan digunakan untuk mengirim dan menerima perintah-perintah AT Command dari mikro ke modul GSM. Serial emulator ini menggunakan Pin digital 2&3. Pin ini tetap, tidak dapat diubah. Bautrate yang digunakan 9600bps, dan tidak dapat diubah juga.
  2. Proses menghidupkan modul GSM. Proses ini dilakukan dengan memberi logika rendah selama minimal 2detik ke Pin PWRKEY pada modul GSM. Karena Pin PWRKEY di kendalikan dengan sebuah transistor, maka logika dari mikro adalah HIGH untuk minimal 2detik. Oh iya. selain dengan program, proses menghidupkan modul GSM juga dapat dilakukan dengan menekan tombol 'START'.
  3. Proses menunggu hingga modul GSM masuk ke jaringan. Pertama dengan mengirim perintah "AT/r", dan harus dijawab "OK". ditunggu hingga di jawab. Setelah itu akan mengirim perintah "AT+CREG?/r", yang akan dijawab apakah hubung ke jaringan atau belum. Jika belum hubung maka perintah AT+CREG?/r" akan dikirim lagi. "AT+CREG?/r" adalah perintah AT Command untuk menanyakan keadaan hubungan modul GSM dengan jaringan GSM.
Nah setelah prosedur 'setup' selesai, maka program akan beranjak pada prosedur 'loop'. Pada prosedur loop hal yang pertama dilakukan adalah meminta input data nomor GSM yang akan dikirimi SMS. Input yang diminta melalui serial hardware, yaitu serial port yang digunakan sebagai debug.

 
Serial.print("Enter a mobile number: ");
  char remoteNum[20];  // telephone number to send sms
  readSerial(remoteNum);
  Serial.println(remoteNum);

   

Karena serial yang digunakan untuk debug terhubung  dengan  'Serial Monitor', jadi proses memasukan nomor dilakukan melalui 'Serial Monitor'.
Proses selanjutnya adalah meminta kalimat yang akan dikirim lewat SMS. kalimat ini juga diminta lewat serial debug, maka kalimat tersebut juga dimasukan melalui 'Serial Monitor'.

  
// sms text
Serial.print("Now, enter SMS content: ");
  char txtMsg[200];
  readSerial(txtMsg);

 

Setelah proses menerima kalimat yang akan dikirim selesai, proses selanjutnya adalah mengirim SMS.

  
// send the message
sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  sms.endSMS(); 
  Serial.println("\nCOMPLETE!\n");


Komplit sudah prosesnya. Program akan kembali ke atas loop, yaitu meminta nomer GSM yang akan di kirimi SMS.

 Karena sudah capek, masalah pencat-pencet RESET di atas kita bahas pada posting berikutnya ya. Anda yang baca semoga puas dan minta lagi hehe... kasihan dunk saya yang membahas. capekkkk....
Ngak lama lagi kita lanjutkan bahasan kita kok :)


Benarkan, program contoh official Arduino bisa jalan pada GSMduino :).

No comments: