#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"; // Bot akan mengirimkan pesan pada User ID tersebut
// Declare Pin untuk PIR Sensor
const int pirPin = 14; // Pin GPIO pada ESP32-CAM
// Inisialisasi WiFiClientSecure untuk enkripsi SSL/TLS
WiFiClientSecure secured_client;
// Inisialisasi objek bot Telegram dengan WiFiClientSecure
UniversalTelegramBot bot(botToken, secured_client);
bool lastMotionDetected = false; // Menyimpan status gerakan sebelumnya yang terdeteksi
// Deklarasi fungsi getLocalTimeAsString
String getLocalTimeAsString();
void captureAndSendPhoto();
void setup() {
Serial.begin(115200);
// Inisialisasi PIR Sensor
pinMode(pirPin, INPUT_PULLUP);
// 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);
// Set waktu tunggu untuk koneksi SSL/TLS
secured_client.setInsecure();
// Set waktu dari server NTP
configTime(0, 0, "pool.ntp.org");
// Tunggu beberapa detik untuk memastikan sensor PIR stabil
Serial.println("Menunggu sensor PIR stabil...");
delay(10000); // Menunggu selama 10 detik
// Reset status gerakan terakhir
lastMotionDetected = digitalRead(pirPin) == HIGH;
}
void loop() {
// Baca status PIR Sensor
bool motionDetected = digitalRead(pirPin) == HIGH;
// Jika terjadi perubahan status gerakan
if (motionDetected != lastMotionDetected) {
// Jika gerakan baru terdeteksi
if (motionDetected) {
Serial.println("Gerakan Terdeteksi"); // Debugging
// Kirim notifikasi ke Telegram
String message = "Gerakan terdeteksi pada " + getLocalTimeAsString();
bot.sendMessage(chatID, message, "");
captureAndSendPhoto();
} else { // Jika tidak ada gerakan baru terdeteksi
Serial.println("Gerakan Tidak Terdeteksi"); // Debugging
// Kirim notifikasi ke Telegram
String message = "Gerakan tidak terdeteksi pada " + getLocalTimeAsString();
bot.sendMessage(chatID, message, "");
}
// Simpan status gerakan terakhir
lastMotionDetected = motionDetected;
}
delay(10);
}
// Definisi fungsi getLocalTimeAsString
String getLocalTimeAsString() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
return "Waktu tidak tersedia";
}
char timeString[26];
strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", &timeinfo);
return String(timeString);
}
// Fungsi untuk mengambil foto dan mengirimkannya melalui Telegram
void captureAndSendPhoto() {
// Simulasi pengambilan dan pengiriman foto
String message = "Foto diambil pada " + getLocalTimeAsString();
bot.sendMessage(chatID, message, "");
Serial.println("Mengirim pesan simulasi foto ke Telegram");
}