Telegram bukan hanya aplikasi chat, tetapi juga platform yang bisa diintegrasikan dengan perangkat IoT. Dengan menggunakan ESP8266 dan bot Telegram, kita bisa mengontrol perangkat seperti LED hanya lewat pesan.
Dalam tutorial ini, kita akan:
- Membuat bot Telegram
- Menghubungkan ESP8266 ke WiFi dan Telegram
- Mengendalikan LED dengan perintah chat
Alat dan Bahan
- ESP8266 (NodeMCU atau Wemos D1 Mini)
- LED + resistor 220 ohm
- Kabel USB
- Arduino IDE
- Internet aktif (WiFi)
Langkah 1: Buat Bot Telegram
- Buka aplikasi Telegram
- Cari akun: @BotFather
- Kirim perintah /newbot
- Ikuti instruksi dan simpan API Token yang diberikan
- Cari @userinfobot untuk mendapatkan Chat ID Anda
Instalasi Library di Arduino IDE
Buka Sketch > Include Library > Manage Libraries
- Install UniversalTelegramBot
- Install ArduinoJson
Wiring LED
- Kaki panjang LED ke pin D2 (GPIO4) ESP8266 melalui resistor 220 ohm
- Kaki pendek ke GND
Kode Program ESP8266 + Telegram
#include "esp8266wifi.h" // Library untuk koneksi WiFi pada ESP8266
#include "wificlientsecure.h" // Library untuk koneksi HTTPS (Telegram API menggunakan SSL)
#include "universaltelegrambot.h" // Library untuk berinteraksi dengan Telegram Bot
// Konfigurasi jaringan WiFi
#define WIFI_SSID "SSID_KAMU" // Nama jaringan WiFi
#define WIFI_PASSWORD "PASS_SSID" // Kata sandi WiFi
// Token bot Telegram, didapatkan dari @BotFather di Telegram
#define BOT_TOKEN "TOKEN_KAMU
// Interval waktu antara setiap pengecekan pesan baru (dalam milidetik)
const unsigned long BOT_MTBS = 1000;
// Sertifikat root untuk memverifikasi koneksi ke server Telegram
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
// Objek client untuk koneksi aman ke Telegram API
WiFiClientSecure secured_client;
// Membuat objek bot dengan token dan klien aman
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
// Waktu terakhir bot mengecek pesan
unsigned long bot_lasttime;
// Pin LED yang digunakan (D2 pada NodeMCU)
const int ledPin = D2; // GPIO4
int ledStatus = 0; // Status awal LED (mati)
/**
* Fungsi untuk menangani pesan baru dari Telegram
*/
void handleNewMessages(int numNewMessages)
{
Serial.print("handleNewMessages ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++)
{
String chat_id = bot.messages[i].chat_id; // ID obrolan
String text = bot.messages[i].text; // Isi pesan
String from_name = bot.messages[i].from_name; // Nama pengirim
if (from_name == "")
from_name = "Guest"; // Jika tidak ada nama, gunakan Guest
// Perintah untuk menghidupkan LED
if (text == "/ledon")
{
digitalWrite(ledPin, HIGH); // Hidupkan LED
ledStatus = 1;
bot.sendMessage(chat_id, "Led HIDUP", "");
}
// Perintah untuk mematikan LED
if (text == "/ledoff")
{
ledStatus = 0;
digitalWrite(ledPin, LOW); // Matikan LED
bot.sendMessage(chat_id, "Led MATI", "");
}
// Perintah untuk mengetahui status LED
if (text == "/status")
{
if (ledStatus)
{
bot.sendMessage(chat_id, "Saat ini Led HIDUP", "");
}
else
{
bot.sendMessage(chat_id, "Saat ini Led MATI", "");
}
}
// Perintah awal (/start) untuk memberikan panduan penggunaan bot
if (text == "/start")
{
String welcome = "ESP8266 Kontrol LED Bot, " + from_name + ".\n";
welcome += "Ini adalah contoh hidup matikan LED.\n\n";
welcome += "/ledon : Untuk menghidupkan LED\n";
welcome += "/ledoff : Untuk mematikan LED\n";
welcome += "/status : Untuk mendapatkan status LED\n";
bot.sendMessage(chat_id, welcome, "Markdown");
}
}
}
/**
* Fungsi setup() - dijalankan sekali saat perangkat dinyalakan
*/
void setup()
{
Serial.begin(115200); // Inisialisasi komunikasi serial
Serial.println();
pinMode(ledPin, OUTPUT); // Set pin LED sebagai output
delay(10);
digitalWrite(ledPin, LOW); // Pastikan LED mati saat mulai
// Menghubungkan ke jaringan WiFi
configTime(0, 0, "pool.ntp.org"); // Sinkronisasi waktu via NTP
secured_client.setTrustAnchors(&cert); // Gunakan sertifikat root untuk Telegram
Serial.print("Connecting to Wifi SSID ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // Mulai koneksi WiFi
while (WiFi.status() != WL_CONNECTED) // Tunggu hingga terhubung
{
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP()); // Tampilkan alamat IP ESP
}
/**
* Fungsi loop() - dijalankan terus-menerus
*/
void loop()
{
// Cek pesan baru secara berkala sesuai interval BOT_MTBS
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis(); // Update waktu terakhir bot mengecek pesan
}
}
Uji Coba
- Upload kode ke ESP8266
- Buka Telegram dan cari bot kamu
- Kirim perintah /ledon dan /ledoff
- LED akan menyala atau mati sesuai perintah
Tampilan Serial Monitor
Tampilan Telegram
Selamat bereksperimen dengan IoT dan Telegram Bot!
EmoticonEmoticon
Note: Only a member of this blog may post a comment.