#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6PMkTuzTD"
#define BLYNK_TEMPLATE_NAME "RUMAH pintar"
#define BLYNK_AUTH_TOKEN "as33_O_7D-78bc3Qvha85q5Lp2GSnmiF"
//__________________________________________________________
//Libraryna...
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Buzzer.h>
#include "DHTesp.h"
//_____________________________
//Keamanana
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//_____________________________
//Jang Modul-modulna
LiquidCrystal_I2C lcd(0x27,16,2);
Servo myservo;
DHTesp dhtSensor;
const int DHT_PIN = 12;
#define BUZZER 13
#define TRIGGER_PIN 23
#define ECHO_PIN 22
#define RELAY_PIN 21
//_____________________________
//Konfigurasi Keypadna + Password
const uint8_t BARIS = 4;
const uint8_t KOLOM = 4;
char keys[BARIS][KOLOM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[BARIS] = {34, 35, 32, 33};
byte colPins[KOLOM] = {25, 26, 27, 14};
Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, BARIS, KOLOM);
char customKey;
int number = 0;
int password = 123456;
//________________________________________________________________________________________
BlynkTimer timer;
//____________________________Pengiriman data_____________________________________________
void sendSensor()
{
float suhu, kelembaban;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhu = data.temperature;
kelembaban = data.humidity;
//Kana Blynkna...
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, kelembaban);
//Logika + cetak-cetak
Serial.println("Temp: " + String(suhu, 2) + "°C");
Serial.println("Humidity: " + String(kelembaban, 1) + "%");
if (suhu >= 40) {
Serial.println("Suhu: Panas");
} else {
int buttonState = digitalRead(RELAY_PIN);
Blynk.virtualWrite(V2, buttonState);
Serial.println("Suhu: Dingin");
}
}
BLYNK_WRITE(V2)
{ int relayState = param.asInt();
digitalWrite(RELAY_PIN, relayState);
}
//_____________________________________________________________________________________//
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
myservo.attach(5);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER, OUTPUT);
//Perihal Blynk..
Blynk.begin(auth, ssid, pass);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Blynk.virtualWrite(V2, LOW);
timer.setInterval(1000L, sendSensor);
}
//_____________________________________________________________________________________//
void loop() {
// put your main code here, to run repeatedly:
lcd.setCursor(0,0);
lcd.print("Masukan Password");
customKey = customKeypad.getKey();
switch(customKey){
case '0' ... '9':
lcd.setCursor(0,1);
number = number * 10 + (customKey - '0');
lcd.print(number);
break;
//___________________________________________________________
case '#':
if(number == password){
lcd.setCursor(0,1);
lcd.print("Benar ");
delay(2000);
number = 0;
lcd.clear();
}
else{
lcd.setCursor(0,1);
lcd.print("Salah");
tone(BUZZER, 3000);
delay(2000);
noTone(BUZZER);
number = 0;
lcd.clear();
}
break;
//___________________________________________________________
case '*':
number = 0;
lcd.clear();
break;
//___________________________________________________________
}
delay(500);
//___________________________________________________________
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(5);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(13);
digitalWrite(TRIGGER_PIN, LOW);
//___________________________________________________________
long duration = pulseIn(ECHO_PIN, HIGH);
long jarak = (duration * 0.0343) / 2;
//__________________________________________________________
Serial.print("Jarak Sensor: ");
Serial.println(jarak);
//__________________________________________________________
if(jarak <= 30) {
myservo.write(0);
Blynk.virtualWrite(V3, "Terbuka");
Serial.print("Status Gerbang: Terbuka");
} else {
myservo.write(90);
Blynk.virtualWrite(V3, "Tertutup");
Serial.print("Status Gerbang: Tertutup");
}
//___________________________________________________________
delay(500);
//___________________________________________________________
Blynk.run();
timer.run();
//___________________________________________________________
delay(500);
}