#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#include <WiFi.h>
#include <PubSubClient.h>
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ArduinoJson.h>
char auth[] = "OSRk1DVmpSqLdf40zT4liHQppNs6A0r3";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
char clientId[50];
WiFiClient espClient;
PubSubClient client(espClient);
static char strDetection[10] = {0};
int value = 0;
int state = 0;
BlynkTimer timer;
int ledPin = 15; // Deklarasi variabel input pin LED
int inputPin = 14; // Deklarasi variabel input pin Sensor PIR
int buzzerPin = 2;
int pirState = LOW; // Pada saat memulai, Sensor PIR dimulai dari LOW
int val = 0; // Deklarasi variabel untuk membaca status pin
int bacaSensor = digitalRead(inputPin);
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass,"o.tcp.ap.ngrok.io",16816);
// timer.setInterval(16000L, notifySensor);
pinMode(ledPin, OUTPUT); // Deklarasi LED sebagai Output
pinMode(inputPin, INPUT); // Deklarasi Sensor PIR sebagai Input
pinMode(buzzerPin, OUTPUT);
// Program Awal LCD
LCD.init();
LCD.backlight();
LCD.setCursor(1,0);
LCD.print(" KELOMPOK IOT ");
LCD.setCursor(1,1);
LCD.print(" Diblox ");
delay (500);
LCD.clear();
LCD.setCursor(1,0);
LCD.print("SISTEM PEMANTAU KEAMANAN");
LCD.setCursor(1,1);
LCD.print("KEAMANAN RUMAH");
delay (500);
LCD.clear();
LCD.setCursor(1,0);
LCD.print(" MULAI ");
delay(700);
LCD.clear();
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "");
client.setServer("0.tcp.ap.ngrok.io", 14138);
Serial.begin(9600);
}
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId)) {
Serial.println(" connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void loop() {
Blynk.run();
timer.run();
value = digitalRead(14);
if (!client.connected()) {
mqttReconnect();
}
if (value) {
Blynk.virtualWrite(V0, "TERDETEKSI ");
Blynk.virtualWrite(V1, "GERAKAN");
Serial.println("Pintu ada yang buka!");
// Blynk.email("[email protected]","NOTIF EMAIL","PINTU ADA YANG BUKA BANG!!");
Blynk.notify("Notif : Pintu ada yang buka!");
Serial.println("TERDETEKSI GERAKAN");
client.publish("topicName/detection","TERDETEKSI GERAKAN");
delay(3000);
StaticJsonDocument <256> doc;
doc["Sensor"] = "TERDETEKSI GERAKAN";
doc["Sensor2"] = "";
String serial1;
serializeJson(doc, serial1);
char ser[serial1.length() + 1];
serial1.toCharArray(ser, serial1.length() + 1);
client.publish("topik/oye", ser);
}
else{
Blynk.virtualWrite(V0, "TIDAK TERDETEKSI ");
Blynk.virtualWrite(V1, "GERAKAN");
Serial.println("Pintu tertutup");
Serial.println("TIDAK TERDETEKSI GERAKAN");
client.publish("topicName/detection","TIDAK TERDETEKSI GERAKAN");
delay(3000);
StaticJsonDocument <256> dok;
dok["Sensor"] = "";
dok["Sensor2"] = "TIDAK TERDETEKSI GERAKAN";
String serial2;
serializeJson(dok, serial2);
char sek[serial2.length() + 1];
serial2.toCharArray(sek, serial2.length() + 1);
client.publish("topik/oye", sek);
}
client.loop();
// Serial.println(value);
sprintf(strDetection, "%d", value);
val = digitalRead(inputPin); // Membaca nilai input
if (val == LOW) { // Jika Input LOW, maka :
digitalWrite(ledPin, LOW); // LED tidak menyala
if (pirState == LOW) {
// Jika, input LOW maka akan LCD akan mengeluarkan output "TIDAK TERDETEKSI GERAKAN"
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print("TIDAK TERDETEKSI");
LCD.setCursor(0,1);
LCD.print(" GERAKAN ");
// Output program akan terganti, jika input bernilai HIGH
pirState = HIGH;
}
} else {
digitalWrite(ledPin, HIGH); // Menuliskan nilai LED/output bernilai HIGH
if (pirState == HIGH) { // Jika Input HIGH, maka :
// Jika, input HIGH maka akan LCD akan mengeluarkan output "TERDETEKSI GERAKAN"
LCD.init();
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print(" TERDETEKSI ");
LCD.setCursor(0,1);
LCD.print(" GERAKAN ");
// Output program akan terganti, jika input bernilai LOW
tone(buzzerPin, 900,1000);
delay(50);
tone(buzzerPin, 900,1000);
delay(50);
tone(buzzerPin, 900,1000);
delay(50);
pirState = LOW;
}
}
}