//#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
// Pengaturan WiFi SSID dan Password
const char* ssid = "Wokwi-GUEST"; //SSID Wifi yang digunakan
const char* password = ""; //Password Wifi tersebut
// Pengaturan API Bot Telegram dan Chat ID
const char* botToken = "Bot_Token"; //API Bot atau bot mana yang ingin dikendalikan
const char* chatID = "user_ID"; //Kepada siapakah bot tersebut mengirimkan pesan (Angka userID bukan username)
// Declare Pin untuk PIR Sensor dan Buzzer
const int pirPin = 12; // Pin GPIO pada ESP32
const int buzzerPin = 2; // Pin GPIO pada ESP32
// Inisialisasi WiFiClientSecure untuk enkripsi SSL/TLS
WiFiClientSecure secured_client;
// Inisialisasi objek bot Telegram dengan WiFiClientSecure
UniversalTelegramBot bot(botToken, secured_client);
void setup() {
Serial.begin(115200);
// Inisialisasi PIR Sensor dan Buzzer
pinMode(pirPin, INPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW);
// Koneksi ke WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi terhubung");
Serial.println(ssid);
// Konfigurasi zona waktu dan mendapatkan waktu dari server NTP
configTime(25200, 0, "pool.ntp.org", "time.nist.gov");
//25200 dari 7 x 3600. Karena Surabaya UTC+7 dan param configTime() menggunakan satuan seconds.
// Set waktu tunggu untuk koneksi SSL/TLS
secured_client.setInsecure(); // Hanya gunakan jika sertifikat SSL/TLS tidak perlu diperiksa
}
void loop() {
// Baca status PIR Sensor
int pirStatus = digitalRead(pirPin);
// Jika gerakan terdeteksi
if (pirStatus == HIGH) {
Serial.println("Ada Gerakan.");
// Bunyikan Buzzer
tone(buzzerPin, 1000);
delay(1000);
noTone(buzzerPin);
// Kirim notifikasi ke Telegram
String message = "Gerakan terdeteksi pada " + getLocalTimeAsString();
bot.sendMessage(chatID, message, "");
delay(10000); // Delay 10 detik untuk menghindari spam
}
delay(500); // Delay singkat antara pembacaan sensor
}
String getLocalTimeAsString() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
return "Gagal mendapatkan waktu.";
}
char buffer[30];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &timeinfo);
return String(buffer);
}