Kontrol Arduino+SIM800L via SMS

Kembali lagi untuk mengujicoba Modul GSM murah meriah SIM800l. Percobaan kali ini adalah melakukan kendali dan pemantauan jarak jauh via SMS. Teknologi SMS walaupun udah ketinggalan namun tetap dapat diaplikasikan pada projek kita karena memiliki beberapa keunggulan. Secara tidak semua sudut di area kita dapat tercover oleh sinnyal 3G/4G


Arduino SMS Control, Arduino SMS monitoring, control Arduino via SMS, Arduino SIM800l SMS relay control, mengendalikan arduino dengan SMS, Kendali jarak jauh Arduino dengan SMS


Untuk uji coba sederhana, mari kita buat kinerja yang simpel seperti kendali relay yang dipadukan dengan pemantauan sensor magnetic switch. Pengaplikasiannya adalah untuk mengendalikan lampu (AC) dan pemantauan keadaan pintu rumah.

Arduino SIM800 SMS relay control
Adapun beberapa komponen yang akan dibutuhkan dalam pembuatan sistem ini adalah:
  • Arduino (Uno/Nano)
  • SIM800L GSM Module
  • Relay (1 Channel)
  • Sensor Magnetic Switch
  • Resistor 330 ohm + Led
  • Module DC Step Down LM2596
Wiring/Skematic
SMS control Arduino SIM800l
*Disarankan tegangan VCC untuk SIM800L berkisar antara 3.7V. Atur melalui Lm2596

Arduino Program
Sebelum ke pemrogramannya, harap install terlebih dahulu library Adafruit_FONA. Install bisa dilakukan via library manager ya. Saya menggunakan library versi  1.3.8
SMS control Arduino SIM800l
Untuk keperluan testing, dapat dicoba melalui program sample yang telah ada di File - Examples - Adafruit FONA Library - Fona Test. Pastikan konfigurasi pin TX, RX, dan reset telah disesuaikan. Serta pengaturan baudrate. Setelah program selesai diupload, pengetesan dilakukan via serial monitor. kita dapat melakukan beberapa pengetesan yang disesuaikan dengan fitur dari modul SIM800l yang kita gunakan seperti baca SMS, cek jumlah SMS, call, delete SMS, send USSD (cek pulsa), dll.
Arduino SIM800 SMS relay control
SMS control Arduino SIM800l

SMS control Arduino SIM800l

Program SMS kontrol Arduino+SIM800l
Di percobaan ini, kita akan melakukan kontrol relay untuk menghidupkan dan mematikan lampu. Untuk alurnya adalah sebagai berikut
 
Arduino control SMS SIM800L
Dalam percobaan ini saya menggunakan kartu 3. Perbedaannya adalah saat pengecekan saldo pulsa dan pengambilan nilai saldo tersebut yang digunakan untuk mengaktifkan Led tanda kalau pulsa mau habis. akan saya bahas dibawah ya. Untuk program Kontrol Arduino via SMS dapat di lihat dibawah ini:
 
Secara spesifik, Carakerja dari program yang pertama adalah setting SIM800l agar notifikasi aktif. Mari cek bagian setup! 
Arduino SMS SIM800L
Selanjutnya adalah memastikan Sim Card dapat menerima SMS. Caranya dengan menghapus seluruh SMS yang tersimpan di kartu. Jadi pastiin sebelum mencoba ini, SMS penting sudah di pindah ke memori Hp. Urutannya adalah mengecek jumlah sms yang ada di slot dengan fungsi check_to_delete(), saat terdapat sms yang tersimpan di kartu maka lanjut ke fungsi Delete_All_SMS()
SIM800L arduino SMS control
Ok, selanjutnya masuk ke main program. proses pertama adalah mendeteksi apabila ada notifikasi. Apabila notifikasi sms maka proses lanjut ke fungsi pembacaan SMS tersebut. 
SMS control Arduino SIM800l
Dari proses pembacaan SMS, akan dilakukan scaning karakter kunci(dinyalain, dimatiin, dll) untuk proses pengontrolan. Proses scnning menggunakan fungsi strstr() dan strcasecmp() dengan melakukan komparasi antara data pesan SMS dan kata kunti pengontrolan. Untuk format SMS balasan saya buat beberapa pilihan random, atau dapat juga langsung ditulis seperti di pesan balasan untuk cek pulsa.
SMS control Arduino SIM800l
dibagian akhir dari fungsi utama, adalah melakukan pengecekan pulsa. Jadi setelah melakukan pengiriman pesan respon, kita melakukan pengecekan pulsa untuk mengetahui sisa saldo.
SMS control Arduino SIM800l
Prose cek saldo dilakukan dengan panggilan USSD ke *111# untuk kartu 3 (silahkan disesuaikan untuk operator lain). Perlu diperhatikan format respon dari panggilan USSD yang dilakukan. sebagai contoh hasil respon dari panggilan ke *111# adalah Bal Rp 3354 . Karena nilai saldo digunakan sebagai komparator untuk mengontrol LED indikator maka bagaimana caranya untuk mengambil nilai nominal saldo ini. Caranya adalah dengan melakukan parsing data dan hasilnya di convert ke interger. Proses parsing menggunakan fungsi strtok() dengan delimiter " Rp " >> menggunakan spasi. Nah untuk format respon dari operator lain silahkan untuk didesain lagi atau dapt kita diskusikan di kolom komentar.
Arduino SIM800 SMS relay control
Nah, setelah selesai mengirim pesan balasan, lanjut ke proses selanjutnya adalah menghapus pesan yang telah di baca. Hal ini untuk menjaga agar sim card dapat selalu menerima SMS.
Hasil dari contoh program diatas adalah sebagaimana gambar dibawah ini. Next post untuk bagian 2, mari kita coba untuk menggabungkan fungsi monitoring kedalam sistem ini. Trims , semoga bermanfaat
SMS control Arduino SIM800l
Arduino SIM800 SMS relay control
SMS control Arduino SIM800l

*Perbaikan Kecil di Library
Sebenernya bukan masalah yang spesial, yaitu status failed setelah fungsi mengirim SMS. Soalnya, beberapa setelahnya SMS masuk ke nomor yang dituju, yang artinya pesan sebenarnya dapat terkirim dengan sukses.
SMS control Arduino SIM800l
 Karena library Adafruit FONA ini masih dalam proses pengembangan dan diperuntukkan buat modul GSM nya adafruit, maka perlu disesuaikan beberapa fungsi untuk modul SIM800l versi terjangkau. Fungsi yang saya coba edit (disesuaikan) adalah fungsi untuk mengirim SMS. Silahkan edit file  Adafruit_FONA.cpp yang ada di folder tempat library terinstall , misal:
 (C:\Users\User\Documents\Arduino\libraries\Adafruit_FONA_Library) 
Arduino SIM800 SMS relay control
tambahkan klousul else(887) setelah if (line 881). Didalamnya tambahkan fungsi readline (yang di kotakin). Setelah selesai menambahkan kode seperti gambar diatas, jangan lupa disimpan. Nah setelah ditambahkan fungsi diatas, insyaallah status pengiriman akan seperti ini
SMS control Arduino SIM800l




28 Komentar

  1. om mau tanya agar tidak selalu cek pulsa setelah menerima perintah gemana caranya? saya coba hapus
    cek_pulsa_stat=1;
    }
    delay(6000);
    sms_delete(slot);
    delay(5000);
    if(cek_pulsa_stat != 1){
    check_pulsa();
    }
    else{
    cek_pulsa_stat=0;

    bisa gak ada cek pulsa, tapi balasan smsnya tidak bisa dibaca jika ini di hapus

    BalasHapus
    Balasan
    1. Silahkan hapus pada bagian yang ini saja ya..

      if(cek_pulsa_stat != 1){
      check_pulsa();
      }
      else{
      cek_pulsa_stat=0;
      }

      Hapus
    2. ok om mantap sudah bisa, makasih sharing ilmunya moga berkah ilmunya aminnn

      Hapus
  2. Bang, kalo imei tidak terdaftar di kemenperin gimana cara daftarinnya ya?

    BalasHapus
    Balasan
    1. Wah.. kurang tau klo itu gan... modul baru gan?

      Hapus
    2. sudah bisa bang. ternyata pasang elco langsung dapat sinyal

      Hapus
    3. wah ... boleh juga tuh..

      Hapus
    4. Maaf gan ikut nimbrung, cara buat dapet sinyal klo tdk kedaftar di kemenperin gmna?

      Hapus
  3. Bang, caranya cek sinyal lewat sms gimana ya?

    BalasHapus
  4. Kalo yg 4 relay ada codingnya ga?

    BalasHapus
  5. Maaf, mau tanya bos..
    Kalau untuk mengirim sms ke hp pakai nomor simp**i, hasil cek saldonya, gimana kodingnya?, soalnya saya coba utak atik variabelnya, hasil berbeda antara di serial monitor dan yang diterima di hp.
    Saya pakai kartu provider plat merah ya alias simp**i.
    Mohon bantuannya.
    Terimakasih.

    BalasHapus
    Balasan
    1. Wah, kebetulan saya bukan user simpat* jadi kurang tau klo mau parsing buat menangkap nilai nominal saldo. Yang jelas pastikan format balasan saat melakukan panggilan USSD cek pulsa. nah sebagai contoh diatas parameternya adalah " Rp " => ada spasi pada kanan dan kiri Rp. Klo gak salah format balasan dari cek pulsa dari simpat* adalah Rp34678 => Rp tanpa spasi. maka silahkan ubah proses parsing pada fungsi check_pulsa :
      char * strtokIndx;
      strtokIndx = strtok(replybuffer," Rp"); //sebelah kiri " Rp"
      strtokIndx = strtok(NULL," Rp"); //sebelah kanan " Rp" =>ini saldo yang diambil
      balance = atoi(strtokIndx); //convert ke int, simpan ke balance

      Hapus
    2. Terimakasih infonya mas, saya coba oprek dikit sketchnya..
      Oh iya, mohon izin dioprek ya sketch nya.
      Sukses selalu untuk mas Ryo.

      Hapus
  6. alhamdulillah ,, ilmunya bermanfaat banget kak... succes teroos ka

    BalasHapus
  7. maaf mau tanya untuk modul sim800l apakah masih bisa digunakan pada tahun skrang mas?
    karena saya sudah coba tidak bisa

    BalasHapus
    Balasan
    1. kebetulan punya saya masih berfungsi normal gan.. kmrn ada diskusi terkait imei yang diblokir, cm saya tdk mengalami hal tsb

      Hapus
  8. Bisa order alat nya om

    BalasHapus
    Balasan
    1. bisa sih gan.. cm gak bisa cepet ngerjainnya.. santuy soalnya

      Hapus
  9. Bang mau tanya, pada serial monitor couldn't find fona. Kenapa ya?

    BalasHapus
    Balasan
    1. pastikan tegangan supply untuk modul SIM800 sudah sesuai. selanjutnya pastikan koneksi komunikasi serialnya (TX,RX)

      Hapus
  10. permisi master,mau bertanya,bagaimana cara menampilkan data sensor di balasan sms?

    BalasHapus
    Balasan
    1. silahkan buat handling untuk perintah baca sensor .. misal tambahkan program nya di setelah line 150

      if (strcasecmp(smsBuffer, "req data sensor") == 0) {
      //pada baris ini silahkan isi program baca sensor .... nilai sensor
      disimpan pada variabel data_sensor

      Serial.println("Sending reponse...");
      String respon_dt_sensor = "Suhu saat ini : ";
      respon_dt_sensor += data_sensor;
      respon_dt_sensor.toCharArray(message, 100) ;
      if (!fona.sendSMS(callerIDbuffer, message)) {
      Serial.println(F("Failed"));
      } else {
      Serial.println(F("Sent!"));
      }
      }

      Hapus
  11. permisi bg, ini sms nya bisa pakai paket data kah? atau modul SIM800L ini bisa terkoneksi ke internet kah?

    BalasHapus
    Balasan
    1. maksudnya gmn ya gan? klo sms menggunakan pulsa biasa ya (atau silahkan pilih paket sms). modul sim800l juga bisa terkoneksi ke internet kecepatannya sebatas GPRS saja ya.. contohnya bisa dichek disini => https://www.arducoding.com/2020/06/kontrol-arduino-via-thingspeak.html

      Hapus
    2. maksud saya itu bisa berkomunikasi menggunakan kuota internet atau tidak bg. seperti misal saya mengirim perintah dari aplikasi buatan "hidupkan lampu", nah aplikasi saya ini terkoneksi dengan internet, dan mau mengirim data via module sim800L ini, bisa atau tidak?

      Hapus
    3. bisa gan, silahkan bisa dicoba dari tutorial berikut https://www.arducoding.com/2020/06/kontrol-arduino-via-thingspeak.html

      Hapus