Kontrol Arduino+SIM800L via SMS
Controlling arduino via SMS with SIM800l GSM module
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.
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
Sebelum ke pemrogramannya, harap install terlebih dahulu library Adafruit_FONA. Install bisa dilakukan via library manager ya. Saya menggunakan library versi 1.3.8
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.
Program SMS kontrol Arduino+SIM800l
Di percobaan ini, kita akan melakukan kontrol relay untuk menghidupkan dan mematikan lampu. Untuk alurnya adalah sebagai berikut
Secara spesifik, Carakerja dari program yang pertama adalah setting SIM800l agar notifikasi aktif. Mari cek bagian setup!
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()
Ok, selanjutnya masuk ke main program. proses pertama adalah mendeteksi apabila ada notifikasi. Apabila notifikasi sms maka proses lanjut ke fungsi pembacaan SMS tersebut.
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.

dibagian akhir dari fungsi utama, adalah melakukan pengecekan pulsa. Jadi setelah melakukan pengiriman pesan respon, kita melakukan pengecekan pulsa untuk mengetahui sisa saldo.
dibagian akhir dari fungsi utama, adalah melakukan pengecekan pulsa. Jadi setelah melakukan pengiriman pesan respon, kita melakukan pengecekan pulsa untuk mengetahui sisa saldo.
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.
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
*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.
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)
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
28 komentar
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
if(cek_pulsa_stat != 1){
check_pulsa();
}
else{
cek_pulsa_stat=0;
}
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.
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
Oh iya, mohon izin dioprek ya sketch nya.
Sukses selalu untuk mas Ryo.
karena saya sudah coba tidak bisa
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!"));
}
}