#define BLYNK_TEMPLATE_ID "TMPL6grC-sFOo"
#define BLYNK_TEMPLATE_NAME "Rain"
#define BLYNK_AUTH_TOKEN "eG3HfWcFj2RbyCQtpZncV4fSRQ_QW0Hs"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include "DHT.h"
#include <NewPing.h>
// WiFi credentials
char ssid[] = "KP2";
char pass[] = "123456789";
#define ledldr 26
#define ledsuhu 27
#define buzzer 14
#define DHTPIN 2
#define DHTTYPE DHT22
#define LDR_PIN 19
#define TRIG_PIN 5
#define ECHO_PIN 18
#define jarak_max 200
NewPing jarak(TRIG_PIN, ECHO_PIN, jarak_max);
DHT suhu(DHTPIN, DHTTYPE);
int inputPin = 4;
int pirState = LOW;
int val = 0;
#define OLED_ADDR 0x3C
#define OLED_SDA 21
#define OLED_SCL 22
#define Width_l 128
#define Height_l 64
#define Reset 4
Adafruit_SSD1306 layar(Width_l, Height_l, &Wire, OLED_ADDR);
void readSuhu() {
float temp = suhu.readTemperature();
float kbb = suhu.readHumidity();
layar.setTextSize(0.2);
layar.setCursor(0, 0);
if (temp >= 30) {
digitalWrite(ledsuhu, HIGH);
layar.print("Temp: ");
layar.print(temp);
layar.print(" C");
} else {
digitalWrite(ledsuhu, LOW);
layar.print("SuhuNormal");
}
// Kirim data ke Blynk
Blynk.virtualWrite(V1, temp);
Blynk.virtualWrite(V2, kbb);
}
void readLDR() {
layar.setTextSize(0.2);
layar.setCursor(1, 25);
layar.print("Ruangan: ");
int ldrStatus = digitalRead(LDR_PIN);
if (ldrStatus == HIGH) {
digitalWrite(ledldr, HIGH);
layar.print("Malam");
Blynk.virtualWrite(V3, "Malam");
} else {
digitalWrite(ledldr, LOW);
layar.print("Siang");
Blynk.virtualWrite(V3, "Siang");
}
}
void readPIR() {
val = digitalRead(inputPin);
layar.setTextSize(0.2);
layar.setCursor(1, 40);
layar.print("Kondisi: ");
if (val == HIGH && pirState == LOW) {
layar.print("Terdeteksi");
pirState = HIGH;
Blynk.virtualWrite(V4, "Terdeteksi"); // Virtual Pin V4 untuk PIR
delay(100);
} else if (val == HIGH && pirState == HIGH) {
layar.print("Normal");
pirState = LOW;
Blynk.virtualWrite(V4, "Normal");
delay(100);
}
}
void readDistance() {
unsigned int jaraks = jarak.ping_cm();
layar.setTextSize(0.2);
layar.setCursor(1, 15);
layar.print("Jarak: ");
if (jaraks <= 100) {
tone(buzzer, 1000);
layar.print(jaraks);
layar.print("CM, bahaya");
Blynk.virtualWrite(V5, jaraks); // Virtual Pin V5 untuk jarak
} else {
layar.print("Aman");
Blynk.virtualWrite(V5, jaraks);
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // Hubungkan ke Blynk
pinMode(LDR_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ledldr, OUTPUT);
pinMode(ledsuhu, OUTPUT);
pinMode(buzzer, OUTPUT);
suhu.begin();
layar.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
layar.clearDisplay();
layar.setTextColor(SSD1306_WHITE);
}
void loop() {
Blynk.run(); // Jalankan proses Blynk
readSuhu();
readDistance();
readLDR();
readPIR();
layar.display();
delay(10);
layar.clearDisplay();
}