#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6fM9AVk9K"
#define BLYNK_TEMPLATE_NAME "TEST 2"
#define BLYNK_AUTH_TOKEN "lOjXM5fYwiPzcxmlM798WG6YapgvKsDn"
#include <ESP32Servo.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define SCREEN_WIDTH 128 // Lebar OLED display
#define SCREEN_HEIGHT 64 // Tinggi OLED display
#define OLED_RESET -1 // Reset tidak digunakan
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Deklarasi pin untuk sensor dan servo
#define PIR_PIN 13
#define SERVO_PIN 14
#define OPEN_POSITION 180
#define CLOSE_POSITION 0
// Informasi Wi-Fi
const char* ssid = "Wokwi-GUEST"; // masukan nama wifi
const char* password = ""; // masukan password
BlynkTimer timer;
// Objek servo dan variabel status
Servo myservo;
int pirState = LOW;
int val = 0;
void setup() {
// Inisialisasi komunikasi serial
Serial.begin(115200);
// Koneksi ke jaringan Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
Serial.println("Terhubung ke WiFi");
// Inisialisasi pin dan servo
pinMode(PIR_PIN, INPUT);
myservo.attach(SERVO_PIN);
myservo.write(CLOSE_POSITION);
// Inisialisasi OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Alamat I2C dari SSD1306
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Loop tak terbatas jika display gagal diinisialisasi
}
display.display();
delay(2000); // Tunggu 2 detik setelah display menyala
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(F("Pintu Garasi"));
display.display();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
timer.setInterval(1000L, sendData);
}
void loop()
{
Blynk.run();
timer.run();
}
void sendData()
{
String textstatus;
val = digitalRead(PIR_PIN);
if (val == HIGH) {
if (pirState == LOW) {
Serial.println("Gerakan terdeteksi! Membuka pintu...");
display.clearDisplay();
display.setCursor(0,0);
display.println(F("Pintu Terbuka"));
display.display();
myservo.write(OPEN_POSITION);
textstatus = "Gerakan terdeteksi! Membuka pintu..." ;
Blynk.virtualWrite(V0, textstatus);
Blynk.virtualWrite(V1, 180);
pirState = HIGH;
}
}
else
{
if (pirState == HIGH) {
Serial.println("Tidak ada gerakan. Menutup pintu...");
display.clearDisplay();
display.setCursor(0,0);
display.println(F("Pintu Tertutup"));
display.display();
myservo.write(CLOSE_POSITION);
textstatus = "Tidak ada gerakan. Menutup pintu..." ;
Blynk.virtualWrite(V0, textstatus);
Blynk.virtualWrite(V1, 0 );
pirState = LOW;
}
}
delay(1000);
}
LCD
PIR SENSOR
Servo