#include <WiFi.h> //Library untuk menghubungkan ESP32 ke jaringan WiFi.
#include <WiFiClientSecure.h> //Library untuk membuat koneksi HTTPS yang aman.
#include <UniversalTelegramBot.h> //Library untuk berinteraksi dengan bot Telegram
#include <ArduinoJson.h> //Library untuk parsing JSON, digunakan untuk memproses pesan dari bot Telegram.
// Ganti dengan kredensial WiFi Anda
const char* ssid = "Wokwi-GUEST"; //Nama jaringan WiFi
const char* password = ""; //password wifi
// oken API bot Telegram yang didapatkan dari BotFather
#define BOTtoken "7319685759:AAHkgvBD73CpMeUEe_rvowZMSLLgmDx6m3g"
// Waktu interval untuk pengecekan pesan baru (dalam milidetik)
const unsigned long BOT_MTBS = 1000; // 1 detik
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
unsigned long lastTimeBotRan;
const int ledPin = 4; // Pin LED yang terhubung
void setup() {
Serial.begin(115200);
// Konfigurasi pin LED sebagai output
pinMode(ledPin, OUTPUT); //Mengatur pin LED sebagai output
digitalWrite(ledPin, LOW); //Mematikan LED saat startup
// Menghubungkan ke WiFi
WiFi.begin(ssid, password); //Memulai koneksi ke jaringan WiFi
while (WiFi.status() != WL_CONNECTED) { //Looping hingga terhubung ke WiFi.
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
Serial.println("Terhubung ke WiFi");
// Mengatur waktu SSL untuk memastikan koneksi aman
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
}
void handleNewMessages(int numNewMessages) {
Serial.print("Pesan baru: ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id); //Mengambil ID chat dari pesan
String text = bot.messages[i].text;
Serial.println("Pesan dari: " + chat_id);
Serial.println("Teks pesan: " + text);
String response;
if (text == "/on") { //Menyalakan LED jika pesan adalah "/on".
digitalWrite(ledPin, HIGH);
response = "LED dinyalakan.";
} else if (text == "/off") { //Mematikan LED jika pesan adalah "/off".
digitalWrite(ledPin, LOW);
response = "LED dimatikan.";
} else {
response = "Perintah IoT. Gunakan /on atau /off untuk mengendalikan LED.";
}
bot.sendMessage(chat_id, response, ""); //Mengirim pesan balasan ke pengguna.
}
}
void loop() {
if (millis() - lastTimeBotRan > BOT_MTBS) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
} //Mendapatkan pesan baru dari bot Telegram.
lastTimeBotRan = millis();
}
}