#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6qJlkEE1u"
#define BLYNK_TEMPLATE_NAME "Sensor Lampu Otomatis"
#define BLYNK_AUTH_TOKEN "3XLoL2IgOqRFmG0jMPNVF49WBEl6Jz09"
//Include Library Arduino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <HTTPClient.h>
int led = 16;
int ldrpin = 34;
float resistance; // Deklarasikan variabel resistance
float voltage; // Deklarasikan variabel voltage
int lampStatus = 0; // Variabel untuk menyimpan status lampu (0 = off, 1 = on)
LiquidCrystal_I2C lcd(0x27, 20, 4);
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
// PWM Settings for LED
int ledBrightness = 0; // Brightness value (0-255)
void setup() {
pinMode(led, OUTPUT);
pinMode(ldrpin, INPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(7, 0);
lcd.print("RAIHAN");
lcd.setCursor(2, 1);
lcd.print("RAMANDHA SAPUTRA");
lcd.setCursor(4, 3);
lcd.print("41422110039");
delay(3000);
lcd.clear();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, sendData);
}
void loop() {
Blynk.run();
timer.run();
}
void sendData() {
// These constants should match the photoresistor's "gamma" and "rl10" attributes
const float GAMMA = 0.7;
const float RL10 = 50;
int analogValue = analogRead(ldrpin);
Serial.print("Analog Value\t: ");
Serial.println(analogValue);
voltage = analogValue * (3.3 / 4096); // Hitung nilai tegangan
resistance = 2000 * voltage / (1 - voltage / 3.3); // Sesuaikan ini dengan rumus yang benar
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Lux\t\t: ");
Serial.println(lux, 2); // Tampilkan nilai lux dengan dua desimal
String textStatus;
int lampStatus = 0; // Default lampStatus mati (0)
if (analogValue >= 928 && analogValue < 3092) {
ledBrightness = 128; // 50% brightness
analogWrite(led, ledBrightness);
lampStatus = 50;
textStatus = "On";
} else if (analogValue >= 3092) {
ledBrightness = 255; // 100% brightness
analogWrite(led, ledBrightness);
lampStatus = 100;
textStatus = "On";
} else {
ledBrightness = 0; // Lampu mati
analogWrite(led, ledBrightness);
lampStatus = 0;
textStatus = "Off";
}
// Kirim data ke XAMPP (insert_data.php)
if (WiFi.status() == WL_CONNECTED) { // Pastikan WiFi tersambung
HTTPClient http;
// Pastikan format URL sesuai dengan file PHP Anda
String serverPath = "https://sensorlampu.kesug.com/insert_data.php?analog_value=" + String(analogValue) + "&lux=" + String(lux) + "&lamp_status=" + String(lampStatus);
http.begin(serverPath.c_str()); // Mulai koneksi ke server
int httpResponseCode = http.GET(); // Kirim permintaan GET
if (httpResponseCode > 0) {
String response = http.getString(); // Dapatkan respons dari server
Serial.println(httpResponseCode); // Tampilkan kode respons
Serial.println(response); // Tampilkan isi respons
} else {
Serial.print("Error on sending GET: ");
Serial.println(httpResponseCode);
}
http.end(); // Akhiri koneksi
} else {
Serial.println("WiFi Disconnected");
}
// Kirim data ke Blynk
Blynk.virtualWrite(V0, analogValue); // Nilai analog sensor
Blynk.virtualWrite(V1, lux); // Nilai lux
Blynk.virtualWrite(V4, lampStatus); // Status lampu (0, 50, 100)
Blynk.virtualWrite(V3, textStatus); // Status teks (On atau Off)
}