#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <RBDdimmer.h>
BlynkTimer timer;
void checkPhysicalButton();
int relay1State = LOW;
int pushButton1State = HIGH;
int relay2State = LOW;
int pushButton2State = HIGH;
int relay3State = LOW;
int pushButton3State = HIGH;
int relay4State = LOW;
int pushButton4State = HIGH;
int relay5State = LOW;
int pushButton5State = HIGH;
#define AUTH "---------------------------"
#define WIFI_SSID "------"
#define WIFI_PASS "------"
#define SERVER "blynk-cloud.com "
#define PORT 8442
#define RELAY_PIN_1 12
#define RELAY_PIN_2 16
#define RELAY_PIN_3 4
#define RELAY_PIN_4 5
#define RELAY_PIN_5 12
#define PUSH_BUTTON_1 2
#define PUSH_BUTTON_2 14
#define PUSH_BUTTON_3 13
#define PUSH_BUTTON_4 1
#define PUSH_BUTTON_5 2 //for dimmer off
#define PUSH_BUTTON_6 2 //for speed up
#define PUSH_BUTTON_7 2 //for speed up
#define VPIN_BUTTON_1 V1 //relay1
#define VPIN_BUTTON_2 V2 //relay2
#define VPIN_BUTTON_3 V3 //relay3
#define VPIN_BUTTON_4 V4 //relay4
#define VPIN_BUTTON_5 V5 //dimmer on/off
#define outputPin 27 // PWM pin for dimmer
#define zerocross 25 // for boards with CHANGEBLE input pins
dimmerLamp dimmer(outputPin, zerocross); //initialase port for dimmer for ESP8266, ESP32, Arduino due boards
int outVal = 0; // Intialisation value for dimmer
int dim_val; // dimmer value to dim the appliance
BLYNK_CONNECTED() {
Blynk.syncVirtual(VPIN_BUTTON_1); // Request the latest state from the server
Blynk.syncVirtual(VPIN_BUTTON_2);
Blynk.syncVirtual(VPIN_BUTTON_3);
Blynk.syncVirtual(VPIN_BUTTON_4);
Blynk.syncVirtual(VPIN_BUTTON_5); //dimmer on of
}
BLYNK_WRITE(V0) { // Set to your virtual pin
outVal = param.asInt(); // Get State of Virtual Button
dim_val = map(outVal, 0, 1023, 0, 100); // mapped the value for dimmer
dimmer.setPower(dim_val); // Set dimmer power
//Blynk.virtualWrite(V1, dim_val); //sending to Blynk
}
BLYNK_WRITE(VPIN_BUTTON_1) { // When App button is pushed - switch the state
relay1State = param.asInt();
digitalWrite(RELAY_PIN_1, relay1State);
}
BLYNK_WRITE(VPIN_BUTTON_2) {
relay2State = param.asInt();
digitalWrite(RELAY_PIN_2, relay2State);
}
BLYNK_WRITE(VPIN_BUTTON_3) {
relay3State = param.asInt();
digitalWrite(RELAY_PIN_3, relay3State);
}
BLYNK_WRITE(VPIN_BUTTON_4) {
relay4State = param.asInt();
digitalWrite(RELAY_PIN_4, relay4State);
}
BLYNK_WRITE(VPIN_BUTTON_5) {
relay5State = param.asInt();
digitalWrite(RELAY_PIN_5, relay5State);
}
void checkPhysicalButton()
{
if (digitalRead(PUSH_BUTTON_1) == LOW) {
// pushButton1State is used to avoid sequential toggles
if (pushButton1State != LOW) {
// Toggle Relay state
relay1State = !relay1State;
digitalWrite(RELAY_PIN_1, relay1State);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_1, relay1State);
}
pushButton1State = LOW;
} else {
pushButton1State = HIGH;
}
if (digitalRead(PUSH_BUTTON_2) == LOW) {
// pushButton2State is used to avoid sequential toggles
if (pushButton2State != LOW) {
// Toggle Relay state
relay2State = !relay2State;
digitalWrite(RELAY_PIN_2, relay2State);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_2, relay2State);
}
pushButton2State = LOW;
} else {
pushButton2State = HIGH;
}
if (digitalRead(PUSH_BUTTON_3) == LOW) {
// pushButton3State is used to avoid sequential toggles
if (pushButton3State != LOW) {
// Toggle Relay state
relay3State = !relay3State;
digitalWrite(RELAY_PIN_3, relay3State);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_3, relay3State);
}
pushButton3State = LOW;
} else {
pushButton3State = HIGH;
}
if (digitalRead(PUSH_BUTTON_4) == LOW) {
// pushButton4State is used to avoid sequential toggles
if (pushButton4State != LOW) {
// Toggle Relay state
relay4State = !relay4State;
digitalWrite(RELAY_PIN_4, relay4State);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_4, relay4State);
}
pushButton4State = LOW;
} else {
pushButton4State = HIGH;
}
if (digitalRead(PUSH_BUTTON_5) == LOW) {
// pushButton4State is used to avoid sequential toggles
if (pushButton5State != LOW) {
// Toggle Relay state
relay5State = !relay5State;
digitalWrite(RELAY_PIN_5, relay5State);
// Update Button Widget
Blynk.virtualWrite(VPIN_BUTTON_5, relay5State);
}
pushButton5State = LOW;
} else {
pushButton5State = HIGH;
}
}
void setup()
{
Serial.begin(115200);
Blynk.begin(AUTH, WIFI_SSID, WIFI_PASS,"blynk-cloud.com", 8442);
dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)
dimmer.setPower(50);
pinMode(RELAY_PIN_1, OUTPUT);
pinMode(PUSH_BUTTON_1, INPUT_PULLUP);
digitalWrite(RELAY_PIN_1, relay1State);
pinMode(RELAY_PIN_2, OUTPUT);
pinMode(PUSH_BUTTON_2, INPUT_PULLUP);
digitalWrite(RELAY_PIN_2, relay2State);
pinMode(RELAY_PIN_3, OUTPUT);
pinMode(PUSH_BUTTON_3, INPUT_PULLUP);
digitalWrite(RELAY_PIN_3, relay3State);
pinMode(RELAY_PIN_4, OUTPUT);
pinMode(PUSH_BUTTON_4, INPUT_PULLUP);
digitalWrite(RELAY_PIN_4, relay4State);
pinMode(RELAY_PIN_5, OUTPUT);
pinMode(PUSH_BUTTON_5, INPUT_PULLUP);
digitalWrite(RELAY_PIN_5, relay5State);
timer.setInterval(500L, checkPhysicalButton); //Setup a function to be called every 100 ms
}
void loop()
{
Blynk.run();
timer.run();
}