Kamis, 02 Juni 2016

SIM800L : Control LED / Relay menggunakan SMS (Dengan Format Tertentu)

Menggunakan SMS Untuk Control LED / Relay via Module SIM800L

  


Disini saya akan memberikan Contoh Sketch Sederhana untuk Mengontrol LED/Relay melaui SMS yang dikirim dari ponsel anda ke Module SIM800L yang terpasang pada Arduino.




Cara Kerjanya adalah :
1.SIM800L kita setting program Auto Reading incoming SMS 
2.Kemudian content SMS yang terbaca akan di-Index dan dicari kecocokan dengan settingan pada program yang kita buat.
3.Jika ada kecocokan Content SMS dari hasil Index maka akan Memenuhi syarat Fungsi if untuk menjalankan program.

Berikut contoh sketch program kendari 2 LED via SMS SIM800L menggunakan library GSM Seeeduino 

Wiring SIM800L <--> Arduino Uno
RXD <--> D8
TXD <--> D7
VCC <--> 3.7V melalui stepdown dari 5V Arduino
GND <--> GND

LED Merah (+) ==> D5
LED Biru (+) ==> D6
LED Merah & Biru (-) ==> GND
 

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
#include <gprs.h>
#include <softwareserial.h>
 
#define TIMEOUT    5000
#define LED_PIN    13
#define ON 1
#define OFF 0

const int MERAH = 5;
const int BIRU = 6;
 
int StatusMerah;
int StatusBIRU;
GPRS gprs;
 
void setup() {
  pinMode (MERAH , OUTPUT);
  pinMode (BIRU , OUTPUT);
  Serial.begin(9600);
  while(!Serial);
 
  Serial.println("Starting SIM800 Auto Read SMS");
  gprs.preInit();
  delay(1000);
 
  while(0 != gprs.init()) {
      delay(1000);
      Serial.print("init error\r\n");
  } 
 
  //Set SMS mode to ASCII
  if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
   
  //Start listening to New SMS Message Indications
  if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
 
  Serial.println("Init success");
}
 
//Variable to hold last line of serial output from SIM800
char currentLine[500] = "";
int currentLineIndex = 0;
 
//Boolean to be set to true if message notificaion was found and next
//line of serial output is the actual SMS message content
bool nextLineIsMessage = false;
 
void loop() {
  //Write current status to LED pin
  digitalWrite(MERAH, StatusMerah);
  digitalWrite(BIRU, StatusBIRU);
   
  //If there is serial output from SIM800
  if(gprs.serialSIM800.available()){
    char lastCharRead = gprs.serialSIM800.read();
    //Read each character from serial output until \r or \n is reached (which denotes end of line)
    if(lastCharRead == '\r' || lastCharRead == '\n'){
        String lastLine = String(currentLine);
         
        //If last line read +CMT, New SMS Message Indications was received.
        //Hence, next line is the message content.
        if(lastLine.startsWith("+CMT:")){
           
          Serial.println(lastLine);
          nextLineIsMessage = true;
           
        } else if (lastLine.length() > 0) {
           
          if(nextLineIsMessage) {
            Serial.println(lastLine);
             

// ########## MEMBACA KONTEN SMS DAN MENCARI+MENGARTIKAN KONTEN SMS KE PROGRAM #########
            //Kendali LED MERAH
            if(lastLine.indexOf("MERAH ON") >= 0){
              StatusMerah = 1;
              Serial.println("LED MERAH DINYALAKAN");} 
              else if(lastLine.indexOf("MERAH OFF") >= 0) {
              StatusMerah = 0;
              Serial.println("LED MERAH DIMATIKAN");}
            //Kendali LED BIRU
            if(lastLine.indexOf("BIRU ON") >= 0){
              StatusBIRU = 1;
              Serial.println("LED BIRU DINYALAKAN");} 
              else if(lastLine.indexOf("BIRU OFF") >= 0) {
              StatusBIRU = 0;
              Serial.println("LED BIRU DIMATIKAN");}
             
            nextLineIsMessage = false;
          }
           
        }
         
        //Clear char array for next line of read
        for( int i = 0; i < sizeof(currentLine);  ++i ) {
         currentLine[i] = (char)0;
        }
        currentLineIndex = 0;
    } else {
      currentLine[currentLineIndex++] = lastCharRead;
    }
  }
}


Setelah Wiring OK dan Sketch Program Selesai di Upload coba kirim SMS dengan Format :

MERAH ON 

Maka LED Merah akan menyala

MERAH OFF

Maka LED Merah akan mati
BIRU ON 

Maka LED Biru akan menyala

BIRUOFF


Maka LED Biru akan mati
MERAH ON BIRU ON

Maka Kedua LED akan menyala

MERAH OFF BIRU OFF

Maka Kedua LED akan mati


 Tampilan pada Serial Monitor Arduino



Apabila ingin Menambahkan Fungsi SMS Balasan ke Nomor Pengirim Tambahkan Syntax Void Send SMS 


 gprs.sendSMS("089666699999","LED MERAH DINYALAKAN");
 
Void/syntax Send SMS diletakan menggantikan Serial.print atau setelah Serial.print

Apabila ingin mengganti LED dengan Relay Module Arduino (low -active)

Cukup merubah definisi ON dan OFF

 

//Control LED
#define ON 1 
#define OFF 0
 
//Control Relay
#define ON 0
#define OFF 1
 
Hal ini Diperlukan karena Relay Module Arduino membutuhkan Logika LOW / "0" untuk ON
Untuk Keyword SMS dan isi SMS Balasan Silahkan disesuaikan.  

30 komentar:

  1. Mas mau nanya ini punya saya kok init erro yah?

    BalasHapus
  2. Init error kemungkinan module sim800L bermasalah..bisa pada tegangan atau jaringan atau wiring..selama init belum success maka program akan berhenti dan tidak akan diblanjutkan ke void lool

    BalasHapus
    Balasan
    1. Komentar ini telah dihapus oleh pengarang.

      Hapus
    2. hello dani ardan. macam mana mau selesaikan masalah init error. perlukah saya menukar sim800l yang baru..harap dapat membantu..terima kasih

      Hapus
  3. knp yg saya muncul low memory ya ga?

    BalasHapus
  4. knp yg saya muncul low memory ya gan?

    BalasHapus
  5. mas mau kursus saya bisa ga :D

    BalasHapus
  6. mau nanya gan, itu beli step downnya di mana ya ?
    kebetulan mau bikin project dengan sim800l juga
    hehehe

    BalasHapus
  7. nah.. kl untuk menambahkan tombol apabila ditekan mengirim sms bagaimana Pak.. sy baru belajar tp sy tertarik..

    BalasHapus
  8. Sim800L saya coba menggunakan perintah AT Command normal tidak ada masalah terus saya lanjutkan aplikasi kontrol led meggunakan sms saya cek di serial monitor di arduino muncul init error , saya cek tegangan di sim800L 3,8 Volt , cek wiring normal tidak ada yang salah . Kira-2 apa ya penyebabnya ? mohon bantuannya terimakasih.

    BalasHapus
  9. Terimakasih... tanpa ada rubah program... suksees

    BalasHapus
  10. Trus kalu mau buat projek kendali led dengan nomor tertentu gimana mas?
    Misalnya nomor saya aja yang bisa berfungsi di project. itu kan lebih aman

    BalasHapus
  11. kalau masukin nomer telponnya gimana?
    maksudnya buat privasi hanya nomer saya yang bisa nerima printah / instruksi
    dari SMS dengan Nomor yang sudah terdaftar di sistem dan mengabaikan Instruksi SMS dari Nomor yang tidak terdaftar pada sistem program ?

    BalasHapus
  12. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  13. gan kalo led merah dinyalan selama 2 detik kemudian off sendiri tanpa kirim sms untuk mematikan hrs rubah coding yg mana?trims

    BalasHapus
  14. gan modul sim 800l pnya ane kok kedip kedip kenceng ya lednya. apa karna gk dapet sinyal? saya pake kartu t*komsel 4G. apa mungkin harus ganti kartu dengan yg 3G?

    BalasHapus
  15. Mas klo mau lihat status lampu yg on sm yg off gmn mas??

    BalasHapus
  16. #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    min solusinya dong. terimakasih. sudah saya copy paste sesuai arahann tetapi malah seperti inii

    BalasHapus
  17. mas kalo codingan read sms nya bisa digabung dengan codingan lain gak? saya coba gabungin sama codingan gps, codingan readnya gak jalan

    BalasHapus
  18. mas, sya mau tanya kalo untuk membalas sms secar otomatis apa bila ada sms masuk (tanpa saya harus menyimpan no tlp tujuan di code arduino), code nya seperti apa? mohon bntuannya

    BalasHapus
  19. ko error truss yah udah atur semua sesuai yang di buat di atas

    gmana itu solusinya gan
    program nya error

    mohon bantuannya gan

    BalasHapus
  20. Mas mau tnay. Klo pakai arduino uno bisa success tpi klo pakai arduino mega error init nya,untuk rx tx arduino mega pakai pin brp?

    BalasHapus
  21. Mas mau tnay. Klo pakai arduino uno bisa success tpi klo pakai arduino mega error init nya,untuk rx tx arduino mega pakai pin brp?

    BalasHapus
  22. Mohon Maaf,,, Jika Terjadi Init error Maka untuk TX sama RX di atas terbalik... harusx RX di Pin D7 dan TX di Pin D8. dan saya sudah uji coba dan berhasil jalan..tq...

    BalasHapus
  23. kenapa ya saya sudah pasang rx di pin D7 dan tx di pin D8 tapi saya coba kirim sms gk ngerespon, padahal udah init success..untuk suplay power sim800l saya menggunakan 5 volt dari arduino. saya pernah tes gunain stepdown conveter dengan output 3,7 - 4.2 tp gk bisa untuk miscall sementara kalao pakai yang 5 volt baru bisa...

    BalasHapus
    Balasan
    1. Pastikan dulu jaringan selular di Sim800l nya dapat signal atw tidak. dengan melihat led merah berkedip cepat atw lambat. dan kalau kedipan lambat berarti sim800l sudah mendapat signal..tak lupa jua dengan cara hubungi no yang ada di Sim800l... jika ada nada panggil atw tidak?? dan pastikan juga Library sudah terintal dengan benar..

      Hapus
  24. ini kalo di arduino nano gak bisa ya mas

    BalasHapus
  25. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  26. Kenapa sim800l led kuning yang ada pada sim800l tidak bisa berkedip ya gan

    BalasHapus
  27. kalo ngirim ke website gimana ya caranya?

    BalasHapus

Copyright © 2014 Belajar Arduino | Designed With By Blogger Templates | Distributed By Gooyaabi Templates
Scroll To Top