Sebelumnya di channel youtube kita sudah bahas cara akses Telegram BOT dengan menggunakan ESP8266. Ada sedikit kekurangan untuk beberapa project yang membutuhkan koneksi internet tanpa jaringan WIFI. Sekarang kita akan bahas bagaimana cara pemprogram akses dengan memanfaatkan komunikasi SIM800OL agar dapat mengakses internet tanpa harus menggunakan WIFI dan hanya menggunakan kartu Perdana Telekomunikasi dengan menggunakan Paket Data.
SIM800L disini yang akan saya gunakan adalah SIM800L V2, dimana secara kestabilan dan berdasarkan pengalaman menggunakan SIM800L yang kecil merah sangat tidak saya rekomendasikan, karena susahnya dapat sinyal dan kendal-kendala aneh lain. Berikut perbedaan SIM800L V1 dan V2:
Skematik
Silahkan kalian rakit rangkaian berikut untuk melakukan komunikasi dengan Arduino Uno dan SIM800L berlaku juga dengan V1, sesuaikan saja konfirgurasi Pinnya.
Menggunkan module LM2596 sebagai stepdown untuk mendapatkan arus lebih dari 2A bisa menggunakan versi ini atau Arduino bisa menggunkan jalur supply regulator yang terpisah
Daftar Telegram BOT
Karena cara daftar telegram bot sudah pernah saya jelaskan di video saya di youtube. Kalian bisa tonton dulu cara daftarnya di video bawah ini:
Program AT Command
Untuk cek koneksi ke SIM800l dan cek kondisi module apakah aman, kalian bisa menggunakan program dibawah ini untuk memastikanya:
AT Command GPRS
Berikut daftar AT Command untuk melakukan koneksi GPRS dengan SIM800L
// Set Koneksi AT+SAPBR=3,1,"CONTYPE","GPRS" // Set APN, cari sendiri jenis APN perdana kalian, saya pakai XL AT+SAPBR=3,1,"APN","internet" // Set Settingan Diatas AT+SAPBR=1,1 // Initialisasi ke HTPP AT+HTTPINIT AT+HTTPPARA="CID",1 // Karea AT+HTTPPARA="URL","http://tryiot.online/telegram.php?token=BOT_TOKEN_KALIAN&chat_id=CHAT_ID)KALIAN&text=FansElectronics" AT+HTTPACTION=0 AT+HTTPREAD AT+HTTPTERM AT+SAPBR=0,1
Dengan menggunakan program di atas kalian dapat mengirim perintah AT Command secara langsung melalui Serial Monitoring ARDUINO IDE.
Program PHP
Karena SIM800L terkadang terkendala koneksi SSL dan TSL 1.0 biasanya saya jembatanin menggunakan website pribadi saya untuk konekasinya:
<?php if(isset($_GET['token']) && isset($_GET['chat_id']) && isset($_GET['text'])){ $text = $_GET['text']; $token = $_GET['token']; $chat_id = $_GET['chat_id']; $json = file_get_contents('https://api.telegram.org/bot'.$token.'/sendMessage?chat_id='.$chat_id.'&text='.$text.'&parse_mode=Markdown'); } else if(isset($_GET['token']) && isset($_GET['limit']) && isset($_GET['offset'])){ $token = $_GET['token']; $limit = $_GET['limit']; $offset = $_GET['offset']; $json = file_get_contents('https://api.telegram.org/bot'.$token.'/getUpdates?limit='.$limit.'&offset='.$offset); }else{ $json = json_encode([]); } echo $json . '@';
Buat file php upload ke hosting kalian, kalau kurang paham coba aja pakai api dari saya ini:
- KIRIM PESAN: “http://tryiot.online/telegram.php?token=BOT_TOKEN_KALIAN&chat_id=CHAT_ID_KALIAN&text=PESAN TEXT
- BACA PESAN: http://tryiot.online/telegram.php?token=BOT_TOKEN_KALIAN&limit=1&offset=0
Program Kirim dan Baca Telegram Tanpa Delay
Berikut ini program Kirim dan Baca pesan Telegram tanpa delay disetiap AT Commandnya, agak tidak menggangu alur kerja program lain juga.
//--------------------------------------------------------------------------- #include <ArduinoJson.h> #include <SoftwareSerial.h> // Define PIN #define LED 13 // Define LOGIKA #define ON 1 #define OFF 0 //--------------------------------------------------------------------------- const String bot_token = "BOT_TOKEN"; const String chat_id = "CHAT_ID"; //--------------------------------------------------------------------------- String response, json, message, send_message; long offset; int step_cmd; bool send_telegram, response_cmd; unsigned long response_timeout; StaticJsonDocument<1000> doc; SoftwareSerial SIM(8,9); //--------------------------------------------------------------------------- void setup() { Serial.begin(9600); // Serial KE PC SIM.begin(9600); // Serial ke SIM } //--------------------------------------------------------------------------- void loop() { if (send_telegram) sendTelegram(); // Jika saat Kirim Pesan, akan dibaca else readTelegram(); // Jika Tidak ada kirim pesan, baca pesan masuk // if (message == "!LEDON") { // Pesan Masuk !RLYON Serial.println("LED ON"); sendMessage("LED ON"); digitalWrite(LED, ON); message = ""; } else if (message == "!LEDOFF") { // Pesan Masuk !RLYOFF Serial.println("LED OFF"); sendMessage("LED OFF"); digitalWrite(LED, OFF); message = ""; } // LANJUT PROGRAM UTAMA KALIAN, TANPA DELAY, TETEP LOOPING } //--------------------------------------------------------------------------- //------------------------------------------------------------------------------- void sendMessage(String msg) { step_cmd = 1; send_message = msg; send_telegram = true; } //------------------------------------------------------------------------------- void sendCommand(String cmd) { SIM.println(cmd); response_cmd = true; response_timeout = millis(); } //------------------------------------------------------------------------------- void sendTelegram() { if (step_cmd == 1 && !response_cmd) sendCommand("AT+HTTPTERM"); if (step_cmd == 2 && !response_cmd) sendCommand("AT+SAPBR=0,1"); else if (step_cmd == 3 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); else if (step_cmd == 4 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"APN\",\"internet\""); else if (step_cmd == 5 && !response_cmd) sendCommand("AT+SAPBR=1,1"); else if (step_cmd == 6 && !response_cmd) sendCommand("AT+HTTPINIT"); else if (step_cmd == 7 && !response_cmd) sendCommand("AT+HTTPPARA=\"CID\",1"); else if (step_cmd == 8 && !response_cmd) sendCommand("AT+HTTPPARA=\"URL\",\"http://tryiot.online/telegram.php?token=" + bot_token + "&chat_id=" + chat_id + "&text=" + send_message + "\""); else if (step_cmd == 9 && !response_cmd) sendCommand("AT+HTTPACTION=0"); else if (step_cmd == 10 && !response_cmd) sendCommand("AT+HTTPTERM"); else if (step_cmd == 11 && !response_cmd) sendCommand("AT+SAPBR=0,1"); // SETELAH COMMAND DIKIRIN, TUNGGU RESPONSE if (response_cmd) { // WAITING RESPON if (SIM.available() > 0) { // Tunggu Serial Masuk response = SIM.readString(); // Baca Semua Response if (response.indexOf("OK") or response.indexOf("ER")) { // Jika Response OK Serial.println(response); // Jika Response OK response_cmd = false; // step_cmd++; // } // } // // Waktu Tunggu if (millis() - response_timeout > 3000) { // TIMEOUT REPONSE response_cmd = false; // step_cmd++; // } // } // // Jika Step selesai if (step_cmd > 11) { step_cmd = 1; send_telegram = false; response_cmd = false; } } //------------------------------------------------------------------------------- void readTelegram() { if (step_cmd == 1 && !response_cmd) sendCommand("AT+SAPBR=0,1"); else if (step_cmd == 2 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); else if (step_cmd == 3 && !response_cmd) sendCommand("AT+SAPBR=3,1,\"APN\",\"internet\""); else if (step_cmd == 4 && !response_cmd) sendCommand("AT+SAPBR=1,1"); else if (step_cmd == 5 && !response_cmd) sendCommand("AT+HTTPINIT"); else if (step_cmd == 6 && !response_cmd) sendCommand("AT+HTTPPARA=\"CID\",1"); else if (step_cmd == 7 && !response_cmd) sendCommand("AT+HTTPPARA=\"URL\",\"http://box-paket.online/telegram.php?token=" + bot_token + "&limit=1&offset=" + String(offset) + "\""); else if (step_cmd == 8 && !response_cmd) sendCommand("AT+HTTPACTION=0"); else if (step_cmd == 9 && !response_cmd) sendCommand("AT+HTTPREAD"); else if (step_cmd == 10 && !response_cmd) sendCommand("AT+HTTPTERM"); else if (step_cmd == 11 && !response_cmd) sendCommand("AT+SAPBR=0,1"); // SETELAH COMMAND DIKIRIN, TUNGGU RESPONSE if (response_cmd) { // WAITING RESPON if (SIM.available() > 0) { // Tunggu Serial Masuk response = SIM.readString(); // Baca Semua Response if (response.indexOf("OK") or response.indexOf("ER")) { // Jika Response OK Serial.println(response); // Jika Response OK if (step_cmd == 9) { // json = parsingJSON(response); // Serial.print("JSON: "); // Serial.println(json); // Jika Response OK DeserializationError error = deserializeJson(doc, json); // if (!error) { // Jika JSON BENAR Serial.println(F("JSON PARSING BERHASIL")); // if (doc["ok"] == true) { // JSON OK true Serial.println(F("BERHASIL PARSING JSON")); // String update_id = doc["result"][0]["update_id"]; // UPDATE ID String msg = doc["result"][0]["message"]["text"]; // if (update_id != "null") { // offset = update_id.toInt() + 1; // message = msg; // Serial.println("UPDATE ID: " + update_id); // Serial.println("OFFSET ID: " + String(offset)); // Serial.println("MESSAGET : " + message); // } // } // } else { // Serial.println(F("JSON PARSING GAGAL")); // Serial.print(F("deserializeJson() failed: ")); // Serial.println(error.f_str()); // } // } // if (step_cmd != 8) { // response_cmd = false; // step_cmd++; // } // } // } // // Waktu Tunggu if (millis() - response_timeout > 10000) { // TIMEOUT REPONSE response_cmd = false; // step_cmd++; // } // } // // Jika Step selesai if (step_cmd > 11) { step_cmd = 1; send_telegram = false; response_cmd = false; } } //------------------------------------------------------------------------------- // Parsing JSON agar bersih full JSON saja String parsingJSON(String data) { String payload = ""; int len = data.length(); bool start = false; for (int i = 0; i < len; i++) { if (!start) { if (data[i] == '{') { start = true; payload = payload + data[i]; } } else { if (data[i] == '@') break; else if (data[i] == '\n') continue; else payload = payload + data[i]; } } return payload; }
Video Tutorial Lengkap
Gimana menurut kalian? gampang dan mudah kan, adapun beberapa kendala yang kalian alami, join ke website ini dan tinggalkan komentar di bawah mari berdiskusi dengan sehat. Terma kasih semoga bermanfaaat tutorial ini. Salam Elektronik.