#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
// --- WiFi & Telegram ---
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define BOTtoken "7648568824:AAEaclFgnS7vqoEpVWEWgiMpzTlAZyH9LYA"
#define CHAT_ID "1240345553"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
// --- LCD & Servo ---
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27
Servo myservo;
// --- PIN SETUP ---
const int pirPin = 4; // Sensor PIR
const int servoPin = 13; // Servo pin
int pirState = LOW;
int value = 0;
void setup() {
Serial.begin(115200);
// LCD setup
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Starting...");
lcd.setCursor(0, 1);
lcd.print("Connecting WiFi");
// Servo & PIR
myservo.attach(servoPin);
pinMode(pirPin, INPUT);
// WiFi connect
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi connected!");
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
bot.sendMessage(CHAT_ID, "ROBOTNYA AKTIF NEHH", "");
delay(1000);
lcd.clear();
}
void loop() {
value = digitalRead(pirPin);
if (value == HIGH) {
if (pirState == LOW) {
Serial.println("Gerakan Terdeteksi!");
lcd.setCursor(0, 0);
lcd.print("GUWEH PANTAU NIHH ");
bot.sendMessage(CHAT_ID, "BUKA WOII!", "");
myservo.write(90); // Gerakkan servo
delay(1000);
myservo.write(0); // Kembali ke awal
pirState = HIGH;
}
} else {
if (pirState == HIGH) {
Serial.println("MAGER AHH");
lcd.setCursor(0, 0);
lcd.print("No Motion ");
pirState = LOW;
}
}
delay(500); // Hindari spam
}