#define BLYNK_TEMPLATE_ID "TMPL6PMCSycPq"
#define BLYNK_TEMPLATE_NAME "PPM2024"
#define BLYNK_AUTH_TOKEN "3Jji2zBa9xhCwYlxUv8nwoobDsEGRB79"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Blynk authorization token
char auth[] = BLYNK_AUTH_TOKEN;
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// DHT sensor setup
#define DHTPIN 15 // DHT22 connected to GPIO 23
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// LDR setup
//#define LDR_PIN 34 // LDR connected to GPIO 34
// Relay setup
// #define RELAY1_PIN 25 // Relay 1 connected to GPIO 25
#define RELAY2_PIN 26 // Relay 2 connected to GPIO 26
#define RELAY3_PIN 27 // Relay 3 connected to GPIO 27
const float GAMMA = 0.7;
const float RL10 = 33;
const int RELAY1_PIN = 25; // Pin connected to the relay module
//LCD
#include <LiquidCrystal_I2C.h>
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
dht.begin();
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
//pinMode(LDR_PIN, INPUT);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
}
void loop() {
ldr();
Blynk.run();
lcdrun();
// Read temperature and humidity
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Update Blynk app
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
//delay(500); // Update every second
}
//------------LCD---------------
void lcdrun()
{
// Read temperature and humidity
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
lcd.clear();
//suhu
lcd.setCursor(0,0);
lcd.print("Suhu :");
lcd.setCursor(11,0);
lcd.print(temperature);
lcd.setCursor(15,0);
lcd.print("C");
//kelembaban
lcd.setCursor(0,1);
lcd.print("Kelembaban:");
lcd.setCursor(11,1);
lcd.print(humidity);
lcd.setCursor(15,1);
lcd.print("%");
delay(1500);
}
// Blynk button press handlers for Relay 2 and Relay 3
BLYNK_WRITE(V3) {
int buttonState = param.asInt();
digitalWrite(RELAY2_PIN, buttonState);
}
BLYNK_WRITE(V4) {
int buttonState = param.asInt();
digitalWrite(RELAY3_PIN, buttonState);
}
void ldr()
{
lcd.clear();
int analogValue = analogRead(34);
float voltage = analogValue / 4096. * 3.3;
float resistance = 2000 * voltage / (1 - voltage / 3.3);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Room: ");
if (lux < 100)
{
digitalWrite(RELAY1_PIN, LOW); // Turn off the relay
Serial.print("Dark! ");
lcd.setCursor(0,1);
lcd.print("Dark! ");
}
else
{
digitalWrite(RELAY1_PIN, HIGH); // Turn on the relay
Serial.print("Light ");
lcd.setCursor(0,1);
lcd.print("Light ");
}
Serial.print("Lux: ");
Serial.println(lux);
lcd.setCursor(0,0);
lcd.print("Lux :");
lcd.setCursor(6,0);
lcd.print(lux);
Blynk.virtualWrite(V2, lux);
delay(1500);
}