#define BLYNK_TEMPLATE_ID "TMPL6dE3WR_Zb"
#define BLYNK_TEMPLATE_NAME "Quickstart Template"
#define BLYNK_AUTH_TOKEN "EsrRzcYTKsN_2JG823c04eedpuuxp-Za"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define LDR_PIN 34
#define RELAY_PIN 12
char ssid[] = "Wokwi-GUEST"; // ใส่ชื่อ WiFi ที่คุณใช้
char pass[] = ""; // ใส่รหัสผ่าน WiFi ถ้ามี
BlynkTimer timer;
bool manualControl = false;
int lampState = 0;
int lightLevel = 0;
int threshold = 500;
// Virtual Pins
#define VPIN_MANUAL_SWITCH V0
#define VPIN_LAMP_STATE V1
#define VPIN_LIGHT_LEVEL V2
#define VPIN_AUTO_MODE V3
#define VPIN_THRESHOLD V4
void setup() {
Serial.begin(115200);
pinMode(LDR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, sendSensorData); // ส่งข้อมูลทุกวินาที
Serial.println("Automatic Street Light System with Blynk");
}
void loop() {
Blynk.run();
timer.run();
if (!manualControl) {
lightLevel = analogRead(LDR_PIN);
if (lightLevel < threshold) {
lampState = 1;
digitalWrite(RELAY_PIN, HIGH);
Serial.println("It's dark! Turning on the light...");
} else {
lampState = 0;
digitalWrite(RELAY_PIN, LOW);
Serial.println("It's bright! Turning off the light...");
}
Serial.print("Light Level: ");
Serial.println(lightLevel);
}
}
// ฟังก์ชันส่งค่าความสว่างและสถานะหลอดไฟไปยัง Blynk
void sendSensorData() {
lightLevel = analogRead(LDR_PIN);
Blynk.virtualWrite(VPIN_LIGHT_LEVEL, lightLevel);
Blynk.virtualWrite(VPIN_LAMP_STATE, lampState);
}
// ปุ่มเปิด/ปิดไฟแมนนวล (V0)
BLYNK_WRITE(VPIN_MANUAL_SWITCH) {
if (manualControl) {
lampState = param.asInt();
digitalWrite(RELAY_PIN, lampState ? HIGH : LOW);
}
}
// ปุ่มสลับโหมด Auto/Manual (V3)
BLYNK_WRITE(VPIN_AUTO_MODE) {
manualControl = !param.asInt(); // 1 = Auto (false), 0 = Manual (true)
}
// ปรับค่า threshold (V4)
BLYNK_WRITE(VPIN_THRESHOLD) {
threshold = param.asInt();
}