#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""
#define BLYNK_AUTH_TOKEN ""
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
#define DHTPIN 22
#define DHTTYPE DHT22
#define RELAY1_PIN 13
#define RELAY2_PIN 12
#define RELAY3_PIN 14
#define RELAY4_PIN 27
#define RGB_RED_PIN 15
#define RGB_GREEN_PIN 2
#define RGB_BLUE_PIN 4
#define BUTTON1_PIN 26
#define BUTTON2_PIN 25
#define BUTTON3_PIN 33
#define BUTTON4_PIN 32
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
int brightness = 0;
int fadeAmount = 5;
void sendSensor() {
float temperature = dht.readTemperature();
if (!isnan(temperature)) {
Blynk.virtualWrite(V5, temperature);
}
}
void controlRelay(int relayPin, int vPin) {
bool state = !digitalRead(relayPin);
digitalWrite(relayPin, state);
Blynk.virtualWrite(vPin, state);
}
void fadeRGB() {
analogWrite(RGB_RED_PIN, brightness);
analogWrite(RGB_GREEN_PIN, 190);
analogWrite(RGB_BLUE_PIN, 40);
// Update brightness
brightness += fadeAmount;
// Reverse the direction of the fade at the ends of the fade range
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
}
void listen_push_buttons() {
if (digitalRead(BUTTON1_PIN) == LOW) {
delay(50); // Short debounce delay
controlRelay(RELAY1_PIN, V1);
}
if (digitalRead(BUTTON2_PIN) == LOW) {
delay(50); // Short debounce delay
controlRelay(RELAY2_PIN, V2);
}
if (digitalRead(BUTTON3_PIN) == LOW) {
delay(50); // Short debounce delay
controlRelay(RELAY3_PIN, V3);
}
if (digitalRead(BUTTON4_PIN) == LOW) {
delay(50); // Short debounce delay
controlRelay(RELAY4_PIN, V4);
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
dht.begin();
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
pinMode(RGB_RED_PIN, OUTPUT);
pinMode(RGB_GREEN_PIN, OUTPUT);
pinMode(RGB_BLUE_PIN, OUTPUT);
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
pinMode(BUTTON3_PIN, INPUT_PULLUP);
pinMode(BUTTON4_PIN, INPUT_PULLUP);
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(RELAY3_PIN, HIGH);
digitalWrite(RELAY4_PIN, HIGH);
timer.setInterval(1000L, sendSensor); // Adjust the interval as needed
timer.setInterval(30L, fadeRGB); // Non-blocking RGB fading
}
void loop() {
Blynk.run();
timer.run();
listen_push_buttons();
}
BLYNK_WRITE(V1) { controlRelay(RELAY1_PIN, V1); }
BLYNK_WRITE(V2) { controlRelay(RELAY2_PIN, V2); }
BLYNK_WRITE(V3) { controlRelay(RELAY3_PIN, V3); }
BLYNK_WRITE(V4) { controlRelay(RELAY4_PIN, V4); }