#include "BluetoothSerial.h"
#include <AceButton.h>
using namespace ace_button;
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run
`make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;
// define the GPIO connected with Relays and switches
#define RelayPin1 15
#define RelayPin2 2
#define RelayPin3 4
#define RelayPin4 22
#define SwitchPin1 32
#define SwitchPin2 35
#define SwitchPin3 34
#define SwitchPin4 39
int toggleState_1 = 1; //Define integer to remember the toggle state for relay 1
int toggleState_2 = 1; //Define integer to remember the toggle state for relay 2
int toggleState_3 = 1; //Define integer to remember the toggle state for relay 3
int toggleState_4 = 1; //Define integer to remember the toggle state for relay 4
char bt_data; // variable for storing bluetooth data
ButtonConfig config1;
AceButton button1(&config1);
ButtonConfig config2;
AceButton button2(&config2);
ButtonConfig config3;
AceButton button3(&config3);
ButtonConfig config4;
AceButton button4(&config4);
void handleEvent1(AceButton*, uint8_t, uint8_t);
void handleEvent2(AceButton*, uint8_t, uint8_t);
void handleEvent3(AceButton*, uint8_t, uint8_t);
void handleEvent4(AceButton*, uint8_t, uint8_t);
void all_Switch_ON(){
digitalWrite(RelayPin1, LOW); toggleState_1 = 0; delay(100);
digitalWrite(RelayPin2, LOW); toggleState_2 = 0; delay(100);
digitalWrite(RelayPin3, LOW); toggleState_3 = 0; delay(100);
digitalWrite(RelayPin4, LOW); toggleState_4 = 0; delay(100);
}
void all_Switch_OFF(){
digitalWrite(RelayPin1, HIGH); toggleState_1 = 1; delay(100);
digitalWrite(RelayPin2, HIGH); toggleState_2 = 1; delay(100);
digitalWrite(RelayPin3, HIGH); toggleState_3 = 1; delay(100);
digitalWrite(RelayPin4, HIGH); toggleState_4 = 1; delay(100);
}
void Bluetooth_handle()
{
bt_data = SerialBT.read();
// Serial.println(bt_data);
delay(20);
switch(bt_data)
{
case 'w': digitalWrite(RelayPin1, LOW); toggleState_1 = 0; break; // if 'A' received Turn on Relay1
case 'W': digitalWrite(RelayPin1, HIGH); toggleState_1 = 1; break; // if 'a' received Turn off Relay1
case 'x': digitalWrite(RelayPin2, LOW); toggleState_2 = 0; break; // if 'B' received Turn on Relay2
case 'X': digitalWrite(RelayPin2, HIGH); toggleState_2 = 1; break; // if 'b' received Turn off Relay2
case 'y': digitalWrite(RelayPin3, LOW); toggleState_3 = 0; break; // if 'C' received Turn on Relay3
case 'Y': digitalWrite(RelayPin3, HIGH); toggleState_3 = 1; break; // if 'c' received Turn off Relay3
case 'z': digitalWrite(RelayPin4, LOW); toggleState_4 = 0; break; // if 'D' received Turn on Relay4
case 'Z': digitalWrite(RelayPin4, HIGH); toggleState_4 = 1; break; // if 'd' received Turn off Relay4
case 'a': all_Switch_ON(); break; // if 'Z' received Turn on all Relays
case 'A': all_Switch_OFF(); break; // if 'z' received Turn off all Relays
default : break;
}
}
void setup()
{
Serial.begin(9600);
btStart(); //Serial.println("Bluetooth On");
SerialBT.begin("HA_BT_ESP32"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
delay(5000);
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(RelayPin4, OUTPUT);
// pinMode(wifiLed, OUTPUT);
pinMode(SwitchPin1, INPUT_PULLUP);
pinMode(SwitchPin2, INPUT_PULLUP);
pinMode(SwitchPin3, INPUT_PULLUP);
pinMode(SwitchPin4, INPUT_PULLUP);
//During Starting all Relays should TURN OFF
digitalWrite(RelayPin1, toggleState_1);
digitalWrite(RelayPin2, toggleState_2);
digitalWrite(RelayPin3, toggleState_3);
digitalWrite(RelayPin4, toggleState_4);
config1.setEventHandler(button1Handler);
config2.setEventHandler(button2Handler);
config3.setEventHandler(button3Handler);
config4.setEventHandler(button4Handler);
button1.init(SwitchPin1);
button2.init(SwitchPin2);
button3.init(SwitchPin3);
button4.init(SwitchPin4);
delay(200);
}
void loop()
{
if (SerialBT.available()){
Bluetooth_handle();
}
button1.check();
button2.check();
button3.check();
button4.check();
}
void button1Handler(AceButton* button, uint8_t eventType, uint8_t buttonState) {
Serial.println("EVENT1");
switch (eventType) {
case AceButton::kEventPressed:
Serial.println("kEventPressed");
toggleState_1 = 0;
digitalWrite(RelayPin1, LOW);
break;
case AceButton::kEventReleased:
Serial.println("kEventReleased");
toggleState_1 = 1;
digitalWrite(RelayPin1, HIGH);
break;
}
}
void button2Handler(AceButton* button, uint8_t eventType, uint8_t buttonState) {
Serial.println("EVENT2");
switch (eventType) {
case AceButton::kEventPressed:
Serial.println("kEventPressed");
toggleState_2 = 0;
digitalWrite(RelayPin2, LOW);
break;
case AceButton::kEventReleased:
Serial.println("kEventReleased");
toggleState_2 = 1;
digitalWrite(RelayPin2, HIGH);
break;
}
}
void button3Handler(AceButton* button, uint8_t eventType, uint8_t buttonState) {
Serial.println("EVENT3");
switch (eventType) {
case AceButton::kEventPressed:
Serial.println("kEventPressed");
toggleState_3 = 0;
digitalWrite(RelayPin3, LOW);
break;
case AceButton::kEventReleased:
Serial.println("kEventReleased");
toggleState_3 = 1;
digitalWrite(RelayPin3, HIGH);
break;
}
}
void button4Handler(AceButton* button, uint8_t eventType, uint8_t buttonState) {
Serial.println("EVENT4");
switch (eventType) {
case AceButton::kEventPressed:
Serial.println("kEventPressed");
toggleState_4 = 0;
digitalWrite(RelayPin4, LOW);
break;
case AceButton::kEventReleased:
Serial.println("kEventReleased");
toggleState_4 = 1;
digitalWrite(RelayPin4, HIGH);
break;
}
}