#define BLYNK_TEMPLATE_ID "TMPLi42639x9"
#define BLYNK_DEVICE_NAME "percobaan1"
#define BLYNK_AUTH_TOKEN "89xk7UKQWaDVRY1AH8UhlJ0WjLbwGycy"
#define TINGGI_LAYAR 64 // Tinggi layar OLED yang digunakan
#define LEBAR_LAYAR 128 // Lebar layar OLED yang digunakan
#define pinRelay 4
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHTesp.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const float GAMMA = 0.7;
const float RL10 = 50;
int pirState = LOW;
int inputPin = 14;
#define TRIG_PIN 13 // ESP32 pin GIOP23 connected to Ultrasonic Sensor's TRIG pin
#define ECHO_PIN 12 // ESP32 pin GIOP22 connected to Ultrasonic Sensor's ECHO pin
Adafruit_SSD1306 oled(LEBAR_LAYAR, TINGGI_LAYAR, &Wire, -1);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const int DHT_PIN = 15;
DHTesp dhtSensor;
BlynkTimer timer;
String lum,lem,su;
float duration_us, distance_cm;
int val = 0;
void setup() {
Serial.begin(115200);
pinMode(5, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(2, OUTPUT);
pinMode(pinRelay, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Blynk.begin(auth, ssid, pass);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
oled.clearDisplay();
oled.setTextSize(1); // Atur ukuran text
oled.setTextColor(WHITE); // Atur warna text
oled.setCursor(20, 20); // Atur posisi text pada display
oled.println("SELAMAT DATANG"); // Text yang dicetak
delay(2000);
oled.display();
oled.clearDisplay();// menampilkan display OLED
}
void loop() {
oled.clearDisplay();
digitalWrite(5,LOW);
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0,0);
oled.print("Monitoring Sawah"); //Tampilan pada layar LCD
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
distance_cm = 0.017 * duration_us;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
Blynk.virtualWrite(V0, data.temperature);
Blynk.virtualWrite(V2, "0");
Blynk.virtualWrite(V4, "0");
Blynk.virtualWrite(V1, data.humidity);//mengirimkan data ke Virtual pin di Blynk Cloud
lem="Kelembaban: "+String(data.humidity, 1)+ "%";
oled.setCursor(0,20);
oled.print(lem); //Tampilan pada layar LCD
su="Suhu : "+String(data.temperature, 2) + "°C";
oled.setCursor(0,30);
oled.print(su); //Tampilan pada layar LCD
oled.display();
oled.clearDisplay();
val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(2, HIGH);
digitalWrite(5,HIGH);
Blynk.virtualWrite(V4, "1");
if (pirState == LOW) {
Serial.println("Terdeteksi Pencuri!");
oled.clearDisplay();
oled.setTextSize(1); // Atur ukuran text
oled.setTextColor(WHITE); // Atur warna text
oled.setCursor(20, 20); // Atur posisi text pada display
oled.println("Terdeteksi Pencuri"); // Text yang dicetak
pirState = HIGH;
}
}
if (val == LOW) {
digitalWrite(2, LOW);
if (pirState == HIGH) {
pirState = LOW;
}
}
if(data.humidity<50)
{
digitalWrite(pinRelay, HIGH);
}
if(data.humidity>=50)
{
digitalWrite(pinRelay, LOW);
}
if(distance_cm<50)
{
Blynk.virtualWrite(V2, "1");
oled.clearDisplay();
oled.setTextSize(1); // Atur ukuran text
oled.setTextColor(WHITE); // Atur warna text
oled.setCursor(20, 20); // Atur posisi text pada display
oled.println("Terdeteksi HAMA"); // Text yang dicetak
delay(2000);
oled.display();
Serial.println("Terdeteksi HAMA!");
digitalWrite(5,HIGH);
}
delay(100);
}