#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
#include <IRremote.h>
#include <DHT.h>
#define FIREBASE_HOST "https://power-cdf0e-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "nYnv5eVHpbj4rv6uSVZB9TFGHeWKlBhyPda8Vhyt"
static uint8_t RelayPin1 = 23; //D23
static uint8_t RelayPin2 = 22; //D22
static uint8_t RelayPin3 = 21; //D21
static uint8_t RelayPin4 = 19; //D19
static uint8_t RelayPin5 = 18; //D18
static uint8_t RelayPin6 = 5; //D5
static uint8_t RelayPin7 = 25; //D25
static uint8_t RelayPin8 = 26; //D26
static uint8_t ButtonPin1 = 13; //D13
static uint8_t ButtonPin2 = 12; //D12
static uint8_t ButtonPin3 = 14; //D14
static uint8_t ButtonPin4 = 27; //D27
static uint8_t ButtonPin5 = 33; //D33
static uint8_t ButtonPin6 = 32; //D32
static uint8_t ButtonPin7 = 15; //D15
static uint8_t ButtonPin8 = 4; //D4
//Update the HEX code of IR Remote buttons 0x<HEX CODE>
#define IR_Button_1 0x1767AF71
#define IR_Button_2 0x318A151
#define IR_Button_3 0xFCA418D1
#define IR_Button_4 0xAFD97D5
#define IR_Button_5 0xE7AF0F51
#define IR_Button_6 0x474E8371
#define IR_Button_7 0xB21EF5AD
#define IR_Button_8 0xC07874B1
#define IR_allOn 0x55B9A80D
#define IR_presentation 0x59C584175
static uint8_t IR_RECEIVER_PIN = 35; // D35 (IR receiver pin)
// Create an IRrecv object
IRrecv irrecv(IR_RECEIVER_PIN);
// Create a decode_results object to store the IR data
decode_results results;
static uint8_t DHT_PIN = 16; // RX2 pin connected with DHT
#define DHT_TYPE DHT11
DHT dht(DHT_PIN, DHT11);
static uint8_t wifiLed = 2; // D2
static uint8_t gpio_reset = 0; // Press BOOT for reset WiFi
static uint8_t LDR_PIN = 34; // D34 pin connected with LDR
FirebaseData firebaseData;
String switchPath;
void setup() {
Serial.begin(115200);
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(RelayPin4, OUTPUT);
pinMode(RelayPin5, OUTPUT);
pinMode(RelayPin6, OUTPUT);
pinMode(RelayPin7, OUTPUT);
pinMode(RelayPin8, OUTPUT);
//pinMode(wifiLed, OUTPUT);
// Configure the input GPIOs
pinMode(ButtonPin1, INPUT_PULLUP);
pinMode(ButtonPin2, INPUT_PULLUP);
pinMode(ButtonPin3, INPUT_PULLUP);
pinMode(ButtonPin4, INPUT_PULLUP);
pinMode(ButtonPin5, INPUT_PULLUP);
pinMode(ButtonPin6, INPUT_PULLUP);
pinMode(ButtonPin7, INPUT_PULLUP);
pinMode(ButtonPin8, INPUT_PULLUP);
// Connect to Wi-Fi
WiFi.begin("Rakib", "12345678");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Initialize Firebase
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Serial.println("Connected to Firebase");
irrecv.enableIRIn();
}
void loop() {
relayswitching();
buttonswitching();
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
unsigned long receivedIRCode = results.value;
if (receivedIRCode == IR_Button_1) {
if (digitalRead(RelayPin1) == HIGH) {
digitalWrite(RelayPin1, LOW);
Firebase.setString(firebaseData,"switches/switch1", "On");
}
else {
digitalWrite(RelayPin1, HIGH);
Firebase.setString(firebaseData , "switches/switch1", "Off");
}
}
else if (receivedIRCode == IR_Button_2) {
if (digitalRead(RelayPin2) == HIGH) {
digitalWrite(RelayPin2, LOW);
Firebase.setString(firebaseData, "switches/switch2", "On");
}
else {
digitalWrite(RelayPin2, HIGH);
Firebase.setString(firebaseData, "switches/switch2", "Off");
}
}
else if (receivedIRCode == IR_Button_3) {
if (digitalRead(RelayPin3) == HIGH) {
digitalWrite(RelayPin3, LOW);
Firebase.setString(firebaseData, "switches/switch3", "On");
}
else {
digitalWrite(RelayPin3, HIGH);
Firebase.setString(firebaseData, "switches/switch3", "Off");
}
}
else if (receivedIRCode == IR_Button_4) {
if (digitalRead(RelayPin4) == HIGH) {
digitalWrite(RelayPin4, LOW);
Firebase.setString(firebaseData, "switches/switch4", "On");
} else {
digitalWrite(RelayPin4, HIGH);
Firebase.setString(firebaseData, "switches/switch4", "Off");
}
}
else if (receivedIRCode == IR_Button_5) {
if (digitalRead(RelayPin5) == HIGH) {
digitalWrite(RelayPin5, LOW);
Firebase.setString(firebaseData, "switches/switch5", "On");
} else {
digitalWrite(RelayPin5, HIGH);
Firebase.setString(firebaseData, "switches/switch5", "Off");
}
}
else if (receivedIRCode == IR_Button_6) {
if (digitalRead(RelayPin6) == HIGH) {
digitalWrite(RelayPin6, LOW);
Firebase.setString(firebaseData, "switches/switch6", "On");
} else {
digitalWrite(RelayPin6, HIGH);
Firebase.setString(firebaseData, "switches/switch6", "Off");
}
}
else if (receivedIRCode == IR_Button_7) {
if (digitalRead(RelayPin7) == HIGH) {
digitalWrite(RelayPin7, LOW);
Firebase.setString(firebaseData, "switches/switch7", "On");
} else {
digitalWrite(RelayPin7, HIGH);
Firebase.setString(firebaseData, "switches/switch7", "Off");
}
}
else if (receivedIRCode == IR_Button_8) {
if (digitalRead(RelayPin8) == HIGH) {
digitalWrite(RelayPin8, LOW);
Firebase.setString(firebaseData, "switches/switch8", "On");
} else {
digitalWrite(RelayPin8, HIGH);
Firebase.setString(firebaseData, "switches/switch8", "Off");
}
}
else if (receivedIRCode == IR_allOn) {
Firebase.setString(firebaseData, "switches/allOn", "On");
}
else if (receivedIRCode == IR_presentation) {
Firebase.setString(firebaseData, "switches/presentation", "On");
}
else {
}
irrecv.resume();
}
humidity();
}
void humidity() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
Serial.print(temperature);
Serial.print(humidity);
Firebase.setFloat(firebaseData, "temperature", temperature);
Firebase.setFloat(firebaseData, "humidity", humidity);
}
}
void IRremote() {
}
void buttonswitching() {
Serial.println("button entry");
if (digitalRead(ButtonPin1) == LOW) {
if (digitalRead(RelayPin1) == HIGH) {
digitalWrite(RelayPin1, LOW);
Firebase.setString(firebaseData, "switches/switch1", "On");
} else {
digitalWrite(RelayPin1, HIGH);
Firebase.setString(firebaseData, "switches/switch1", "Off");
}
}
if (digitalRead(ButtonPin2) == LOW) {
if (digitalRead(RelayPin2) == HIGH) {
digitalWrite(RelayPin2, LOW);
Firebase.setString(firebaseData, "switches/switch2", "On");
} else {
digitalWrite(RelayPin2, HIGH);
Firebase.setString(firebaseData, "switches/switch2", "Off");
}
}
if (digitalRead(ButtonPin3) == LOW) {
if (digitalRead(RelayPin3) == HIGH) {
digitalWrite(RelayPin3, LOW);
Firebase.setString(firebaseData, "switches/switch3", "On");
} else {
digitalWrite(RelayPin3, HIGH);
Firebase.setString(firebaseData, "switches/switch3", "Off");
}
}
if (digitalRead(ButtonPin4) == LOW) {
if (digitalRead(RelayPin4) == HIGH) {
digitalWrite(RelayPin4, LOW);
Firebase.setString(firebaseData, "switches/switch4", "On");
} else {
digitalWrite(RelayPin4, HIGH);
Firebase.setString(firebaseData, "switches/switch4", "Off");
}
}
if (digitalRead(ButtonPin5) == LOW) {
if (digitalRead(RelayPin5) == HIGH) {
digitalWrite(RelayPin5, LOW);
Firebase.setString(firebaseData, "switches/switch5", "On");
} else {
digitalWrite(RelayPin5, HIGH);
Firebase.setString(firebaseData, "switches/switch5", "Off");
}
}
if (digitalRead(ButtonPin6) == LOW) {
if (digitalRead(RelayPin6) == HIGH) {
digitalWrite(RelayPin6, LOW);
Firebase.setString(firebaseData, "switches/switch6", "On");
} else {
digitalWrite(RelayPin6, HIGH);
Firebase.setString(firebaseData, "switches/switch6", "Off");
}
}
if (digitalRead(ButtonPin7) == LOW) {
if (digitalRead(RelayPin7) == HIGH) {
digitalWrite(RelayPin7, LOW);
Firebase.setString(firebaseData, "switches/switch7", "On");
} else {
digitalWrite(RelayPin7, HIGH);
Firebase.setString(firebaseData, "switches/switch7", "Off");
}
}
if (digitalRead(ButtonPin8) == LOW) {
if (digitalRead(RelayPin8) == HIGH) {
digitalWrite(RelayPin8, LOW);
Firebase.setString(firebaseData, "switches/switch8", "On");
} else {
digitalWrite(RelayPin8, HIGH);
Firebase.setString(firebaseData, "switches/switch8", "Off");
}
}
}
void relayswitching() {
switchPath = "switches/switch1";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin1, LOW);
Serial.println("relay1 is on");
}
else {
digitalWrite(RelayPin1, HIGH);
Serial.println("relay1 is off");
}
switchPath = "switches/switch2";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin2, LOW);
Serial.println("relay2 is on");
} else {
digitalWrite(RelayPin2, HIGH);
Serial.println("relay2 is off");
}
switchPath = "switches/switch3";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin3, LOW);
Serial.println("relay3 is on");
} else {
digitalWrite(RelayPin3, HIGH);
Serial.println("relay3 is off");
}
switchPath = "switches/switch4";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin4, LOW);
Serial.println("relay4 is on");
} else {
digitalWrite(RelayPin4, HIGH);
Serial.println("relay4 is off");
}
switchPath = "switches/switch5";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin5, LOW);
Serial.println("relay5 is on");
} else {
digitalWrite(RelayPin5, HIGH);
Serial.println("relay5 is off");
}
switchPath = "switches/switch6";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin6, LOW);
Serial.println("relay6 is on");
} else {
digitalWrite(RelayPin6, HIGH);
Serial.println("relay6 is off");
}
switchPath = "switches/switch7";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin7, LOW);
Serial.println("relay7 is on");
} else {
digitalWrite(RelayPin7, HIGH);
Serial.println("relay7 is off");
}
switchPath = "switches/switch8";
Firebase.getString(firebaseData, switchPath.c_str());
if (firebaseData.stringData() == "On") {
digitalWrite(RelayPin8, LOW);
Serial.println("relay8 is on");
} else {
digitalWrite(RelayPin8, HIGH);
Serial.println("relay8 is off");
}
}