#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME "Relay Test"
#define BLYNK_AUTH_TOKEN ""
#define BLYNK_PRINT Serial
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define PIN_BUTTON1 26
#define PIN_BUTTON2 25
#define PIN_BUTTON3 33
#define PIN_BUTTON4 32
#define PIN_RELAY1 19
#define PIN_RELAY2 18
#define PIN_RELAY3 5
#define PIN_RELAY4 17
int state_relay1 = 0;
int state_relay2 = 0;
int state_relay3 = 0;
int state_relay4 = 0;
#define VPIN_BUTTON1 V1
#define VPIN_BUTTON2 V2
#define VPIN_BUTTON3 V3
#define VPIN_BUTTON4 V4
BLYNK_CONNECTED() {
Blynk.syncVirtual(VPIN_BUTTON1);
Blynk.syncVirtual(VPIN_BUTTON2);
Blynk.syncVirtual(VPIN_BUTTON3);
Blynk.syncVirtual(VPIN_BUTTON4);
}
BLYNK_WRITE(VPIN_BUTTON1) {
state_relay1 = param.asInt();
digitalWrite(PIN_RELAY1, state_relay1);
Serial.println("BLYNK_WRITE: Relay1 State = "+String(state_relay1));
}
BLYNK_WRITE(VPIN_BUTTON2) {
state_relay2 = param.asInt();
digitalWrite(PIN_RELAY2, state_relay2);
}
BLYNK_WRITE(VPIN_BUTTON3) {
state_relay3 = param.asInt();
digitalWrite(PIN_RELAY3, state_relay3);
}
BLYNK_WRITE(VPIN_BUTTON4) {
state_relay4 = param.asInt();
digitalWrite(PIN_RELAY4, state_relay4);
}
void setup()
{
Serial.begin(115200);
pinMode(PIN_BUTTON1, INPUT_PULLUP);
pinMode(PIN_BUTTON2, INPUT_PULLUP);
pinMode(PIN_BUTTON3, INPUT_PULLUP);
pinMode(PIN_BUTTON4, INPUT_PULLUP);
pinMode(PIN_RELAY1, OUTPUT);
pinMode(PIN_RELAY2, OUTPUT);
pinMode(PIN_RELAY3, OUTPUT);
pinMode(PIN_RELAY4, OUTPUT);
digitalWrite(PIN_RELAY1, HIGH);
digitalWrite(PIN_RELAY2, HIGH);
digitalWrite(PIN_RELAY3, HIGH);
digitalWrite(PIN_RELAY4, HIGH);
Blynk.begin(auth, ssid, pass);
if(!SerialBT.begin("ESP32")){
Serial.println("An error occurred initializing Bluetooth");
}else{
Serial.println("Bluetooth initialized");
}
}
void loop()
{
Blynk.run();
timer.run();
listen_push_buttons();
handle_bt();
}
void listen_push_buttons(){
if(digitalRead(PIN_BUTTON1) == LOW){
delay(200);
control_relay(1);
Blynk.virtualWrite(VPIN_BUTTON1, state_relay1); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(PIN_BUTTON2) == LOW){
delay(200);
control_relay(2);
Blynk.virtualWrite(VPIN_BUTTON2, state_relay2); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(PIN_BUTTON3) == LOW){
delay(200);
control_relay(3);
Blynk.virtualWrite(VPIN_BUTTON3, state_relay3); //update button state
}
//--------------------------------------------------------------------------
else if (digitalRead(PIN_BUTTON4) == LOW){
delay(200);
control_relay(4);
Blynk.virtualWrite(VPIN_BUTTON4, state_relay4); //update button state
}
//--------------------------------------------------------------------------
}
void handle_bt(){
//------------------------------------
char command;
if(SerialBT.available()){
command = SerialBT.read();
Serial.println(command);
}
//------------------------------------
switch(command)
{
case 'A':
digitalWrite(PIN_RELAY1, HIGH);
state_relay1 = 1;
Serial.println("handle_bt: Relay1 State = "+String(state_relay1));
Blynk.virtualWrite(VPIN_BUTTON1, state_relay1);
break;
//Turn OFF - Relay1
case 'a':
digitalWrite(PIN_RELAY1, LOW);
state_relay1 = 0;
Blynk.virtualWrite(VPIN_BUTTON1, state_relay1);
break;
case 'B':
digitalWrite(PIN_RELAY2, HIGH);
state_relay2 = 1;
Blynk.virtualWrite(VPIN_BUTTON2, state_relay2);
break;
//Turn OFF - Relay2
case 'b':
digitalWrite(PIN_RELAY2, LOW);
state_relay2 = 0;
Blynk.virtualWrite(VPIN_BUTTON2, state_relay2);
break;
case 'C':
digitalWrite(PIN_RELAY3, HIGH);
state_relay3 = 1;
Blynk.virtualWrite(VPIN_BUTTON3, state_relay3);
break;
//Turn OFF - Relay3
case 'c':
digitalWrite(PIN_RELAY3, LOW);
state_relay3 = 0;
Blynk.virtualWrite(VPIN_BUTTON3, state_relay3);
break;
case 'D':
digitalWrite(PIN_RELAY4, HIGH);
state_relay4 = 1;
Blynk.virtualWrite(VPIN_BUTTON4, state_relay4);
break;
case 'd':
digitalWrite(PIN_RELAY4, LOW);
state_relay4 = 0;
Blynk.virtualWrite(VPIN_BUTTON4, state_relay4);
break;
//******************************************************************************
}
}
void control_relay(int relay){
//------------------------------------------------
if(relay == 1){
state_relay1 = !state_relay1;
digitalWrite(PIN_RELAY1, state_relay1);
Serial.println("control_relay: Relay1 State = "+String(state_relay1));
delay(50);
}
//------------------------------------------------
else if(relay == 2){
state_relay2 = !state_relay2;
digitalWrite(PIN_RELAY2, state_relay2);
delay(50);
}
//------------------------------------------------
else if(relay == 3){
state_relay3 = !state_relay3;
digitalWrite(PIN_RELAY3, state_relay3);
delay(50);
}
//------------------------------------------------
else if(relay == 4){
state_relay4 = !state_relay4;
digitalWrite(PIN_RELAY4, state_relay4);
delay(50);
}
//------------------------------------------------
}