├── .gitattributes └── all_in_one_firebase └── all_in_one_firebase.ino /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /all_in_one_firebase/all_in_one_firebase.ino: -------------------------------------------------------------------------------- 1 | /************************************************************* 2 | This is the code for All in one Home Automation project using Firbase Database by techiesms. 3 | 4 | techiesms YouTube Channel - https://www.youtube.com/techiesms 5 | 6 | techiesms 7 | explore | learn | share 8 | 9 | 10 | *************************************************************/ 11 | 12 | #define DEBUG_SW 0 // Make it 1 to see all debug messages in Serial Monitor 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | // Firebase Credentials 19 | #define FIREBASE_HOST "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 20 | #define FIREBASE_AUTH "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 21 | 22 | 23 | // WiFi Credentials 24 | #define WIFI_SSID "SSID" 25 | #define WIFI_PASSWORD "PASS" 26 | 27 | // Function Declaration 28 | void with_internet(); 29 | void without_internet(); 30 | void speed0(); 31 | void speed1(); 32 | void speed2(); 33 | void speed3(); 34 | void speed4(); 35 | 36 | 37 | 38 | // Pins of Fan Regulator Knob 39 | #define s1 27 40 | #define s2 14 41 | #define s3 12 42 | #define s4 13 43 | 44 | // Pins of Switches 45 | #define S5 32 46 | #define S6 35 47 | #define S7 34 48 | #define S8 39 49 | 50 | // Pins of Relay (Appliances Control) 51 | #define R5 15 52 | #define R6 2 53 | #define R7 4 54 | #define R8 22 55 | 56 | // Pins of Relay (Fan Speed Control) 57 | #define Speed1 21 58 | #define Speed2 19 59 | #define Speed4 18 60 | 61 | //Define FirebaseESP32 data object 62 | FirebaseData firebaseData; 63 | FirebaseJson json; 64 | 65 | // Necessary Variables 66 | bool speed1_flag = 1; 67 | bool speed2_flag = 1; 68 | bool speed3_flag = 1; 69 | bool speed4_flag = 1; 70 | bool speed0_flag = 1; 71 | 72 | bool speed0_firebase_flag = 1; 73 | bool speed1_firebase_flag = 1; 74 | bool speed2_firebase_flag = 1; 75 | bool speed3_firebase_flag = 1; 76 | bool speed4_firebase_flag = 1; 77 | 78 | int switch_ON_Flag1_previous_I = 0; 79 | int switch_ON_Flag2_previous_I = 0; 80 | int switch_ON_Flag3_previous_I = 0; 81 | int switch_ON_Flag4_previous_I = 0; 82 | 83 | String Speed_Value ; 84 | 85 | void setup() 86 | { 87 | // put your setup code here, to run once: 88 | pinMode(s1, INPUT_PULLUP); 89 | pinMode(s2, INPUT_PULLUP); 90 | pinMode(s3, INPUT_PULLUP); 91 | pinMode(s4, INPUT_PULLUP); 92 | pinMode(S5, INPUT_PULLUP); 93 | pinMode(S6, INPUT_PULLUP); 94 | pinMode(S7, INPUT_PULLUP); 95 | pinMode(S8, INPUT_PULLUP); 96 | 97 | pinMode(R5, OUTPUT); 98 | pinMode(R6, OUTPUT); 99 | pinMode(R7, OUTPUT); 100 | pinMode(R8, OUTPUT); 101 | pinMode(Speed1, OUTPUT); 102 | pinMode(Speed2, OUTPUT); 103 | pinMode(Speed4, OUTPUT); 104 | 105 | Serial.begin(115200); 106 | WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 107 | 108 | Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); 109 | Firebase.reconnectWiFi(true); 110 | 111 | } 112 | 113 | 114 | void loop() 115 | { 116 | 117 | if (WiFi.status() != WL_CONNECTED) 118 | { 119 | if (DEBUG_SW) Serial.println("Not Connected"); 120 | without_internet(); 121 | } 122 | 123 | else 124 | { 125 | if (DEBUG_SW) Serial.println(" Connected"); 126 | Data_from_firebase(); 127 | with_internet(); 128 | } 129 | } 130 | 131 | void Data_from_firebase() 132 | { 133 | if (Firebase.getString(firebaseData, "/Appliances/fan")) 134 | { 135 | if (firebaseData.stringData() == "0") 136 | { 137 | if (speed0_firebase_flag == 1) 138 | { 139 | speed0(); 140 | if (DEBUG_SW) Serial.println("Speed0 Firebase"); 141 | speed0_firebase_flag = 0; 142 | speed1_firebase_flag = 1; 143 | speed2_firebase_flag = 1; 144 | speed3_firebase_flag = 1; 145 | speed4_firebase_flag = 1; 146 | } 147 | } 148 | else if (firebaseData.stringData() == "1") 149 | { 150 | if (speed1_firebase_flag == 1) 151 | { 152 | speed1(); 153 | if (DEBUG_SW) Serial.println("Speed1 Firebase"); 154 | speed0_firebase_flag = 1; 155 | speed1_firebase_flag = 0; 156 | speed2_firebase_flag = 1; 157 | speed3_firebase_flag = 1; 158 | speed4_firebase_flag = 1; 159 | } 160 | } 161 | else if (firebaseData.stringData() == "2") 162 | { 163 | if (speed2_firebase_flag == 1) 164 | { 165 | speed2(); 166 | if (DEBUG_SW) Serial.println("Speed2 Firebase"); 167 | speed0_firebase_flag = 1; 168 | speed1_firebase_flag = 1; 169 | speed2_firebase_flag = 0; 170 | speed3_firebase_flag = 1; 171 | speed4_firebase_flag = 1; 172 | } 173 | } 174 | else if (firebaseData.stringData() == "3") 175 | { 176 | if (speed3_firebase_flag == 1) 177 | { 178 | speed3(); 179 | if (DEBUG_SW) Serial.println("Speed3 Firebase"); 180 | speed0_firebase_flag = 1; 181 | speed1_firebase_flag = 1; 182 | speed2_firebase_flag = 1; 183 | speed3_firebase_flag = 0; 184 | speed4_firebase_flag = 1; 185 | } 186 | } 187 | else if (firebaseData.stringData() == "4") 188 | { 189 | if (speed4_firebase_flag == 1) 190 | { 191 | speed4(); 192 | if (DEBUG_SW) Serial.println("Speed4 Firebase"); 193 | speed0_firebase_flag = 1; 194 | speed1_firebase_flag = 1; 195 | speed2_firebase_flag = 1; 196 | speed3_firebase_flag = 1; 197 | speed4_firebase_flag = 0; 198 | } 199 | } 200 | else 201 | { 202 | // Do nothing 203 | } 204 | 205 | if (Firebase.getString(firebaseData, "/Appliances/appliance1")) 206 | { 207 | if (DEBUG_SW) Serial.print("Relay1 - "); 208 | if (DEBUG_SW) Serial.println(firebaseData.stringData()); 209 | 210 | if (firebaseData.stringData() == "1") 211 | { 212 | digitalWrite(R5, HIGH); 213 | } 214 | else 215 | { 216 | digitalWrite(R5, LOW); 217 | } 218 | } 219 | 220 | 221 | 222 | if (Firebase.getString(firebaseData, "/Appliances/appliance2")) { 223 | 224 | if (DEBUG_SW) Serial.print("Relay2 - "); 225 | if (DEBUG_SW) Serial.println(firebaseData.stringData()); 226 | if (firebaseData.stringData() == "1") 227 | { 228 | digitalWrite(R6, HIGH); 229 | } 230 | else 231 | { 232 | digitalWrite(R6, LOW); 233 | } 234 | 235 | } 236 | 237 | if (Firebase.getString(firebaseData, "/Appliances/appliance3")) 238 | { 239 | if (DEBUG_SW) Serial.print("Relay3 - "); 240 | if (DEBUG_SW) Serial.println(firebaseData.stringData()); 241 | 242 | if (firebaseData.stringData() == "1") 243 | { 244 | digitalWrite(R7, HIGH); 245 | } 246 | else 247 | { 248 | digitalWrite(R7, LOW); 249 | } 250 | 251 | } 252 | 253 | if (Firebase.getString(firebaseData, "/Appliances/appliance4")) 254 | { 255 | if (DEBUG_SW) Serial.print("Relay4 - "); 256 | if (DEBUG_SW) Serial.println(firebaseData.stringData()); 257 | 258 | if (firebaseData.stringData() == "1") 259 | { 260 | digitalWrite(R8, HIGH); 261 | } 262 | else 263 | { 264 | digitalWrite(R8, LOW); 265 | } 266 | 267 | } 268 | } 269 | } 270 | 271 | 272 | void with_internet() 273 | { 274 | 275 | // FOR FAN 276 | if (digitalRead(s1) == LOW && speed1_flag == 1) 277 | { 278 | speed1(); 279 | Speed_Value = "1"; 280 | json.set("/fan", Speed_Value); 281 | Firebase.updateNode(firebaseData, "/Appliances", json); 282 | speed1_flag = 0; 283 | speed2_flag = 1; 284 | speed3_flag = 1; 285 | speed4_flag = 1; 286 | speed0_flag = 1; 287 | 288 | 289 | } 290 | if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1) 291 | { 292 | speed2(); 293 | Speed_Value = "2"; 294 | json.set("/fan", Speed_Value); 295 | Firebase.updateNode(firebaseData, "/Appliances", json); 296 | speed1_flag = 1; 297 | speed2_flag = 0; 298 | speed3_flag = 1; 299 | speed4_flag = 1; 300 | speed0_flag = 1; 301 | 302 | } 303 | if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1) 304 | { 305 | speed3(); 306 | Speed_Value = "3"; 307 | json.set("/fan", Speed_Value); 308 | Firebase.updateNode(firebaseData, "/Appliances", json); 309 | speed1_flag = 1; 310 | speed2_flag = 1; 311 | speed3_flag = 0; 312 | speed4_flag = 1; 313 | speed0_flag = 1; 314 | } 315 | if (digitalRead(s4) == LOW && speed4_flag == 1) 316 | { 317 | speed4(); 318 | Speed_Value = "4"; 319 | json.set("/fan", Speed_Value); 320 | Firebase.updateNode(firebaseData, "/Appliances", json); 321 | speed1_flag = 1; 322 | speed2_flag = 1; 323 | speed3_flag = 1; 324 | speed4_flag = 0; 325 | speed0_flag = 1; 326 | } 327 | if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1) 328 | { 329 | speed0(); 330 | Speed_Value = "0"; 331 | json.set("/fan", Speed_Value); 332 | Firebase.updateNode(firebaseData, "/Appliances", json); 333 | speed1_flag = 1; 334 | speed2_flag = 1; 335 | speed3_flag = 1; 336 | speed4_flag = 1; 337 | speed0_flag = 0; 338 | } 339 | 340 | 341 | // FOR SWITCH 342 | if (digitalRead(S5) == LOW) 343 | { 344 | if (switch_ON_Flag1_previous_I == 0 ) 345 | { 346 | digitalWrite(R5, HIGH); 347 | if (DEBUG_SW) Serial.println("Relay1- ON"); 348 | String Value1 = "1"; 349 | json.set("/appliance1", Value1); 350 | Firebase.updateNode(firebaseData, "/Appliances", json); 351 | switch_ON_Flag1_previous_I = 1; 352 | } 353 | if (DEBUG_SW) Serial.println("Switch1 -ON"); 354 | 355 | } 356 | if (digitalRead(S5) == HIGH ) 357 | { 358 | if (switch_ON_Flag1_previous_I == 1) 359 | { 360 | digitalWrite(R5, LOW); 361 | if (DEBUG_SW) Serial.println("Relay1 OFF"); 362 | String Value1 = "0"; 363 | json.set("/appliance1", Value1); 364 | Firebase.updateNode(firebaseData, "/Appliances", json); 365 | switch_ON_Flag1_previous_I = 0; 366 | } 367 | if (DEBUG_SW)Serial.println("Switch1 OFF"); 368 | } 369 | 370 | 371 | if (digitalRead(S6) == LOW) 372 | { 373 | if (switch_ON_Flag2_previous_I == 0 ) 374 | { 375 | digitalWrite(R6, HIGH); 376 | if (DEBUG_SW) Serial.println("Relay2- ON"); 377 | String Value2 = "1"; 378 | json.set("/appliance2", Value2); 379 | Firebase.updateNode(firebaseData, "/Appliances", json); 380 | switch_ON_Flag2_previous_I = 1; 381 | } 382 | if (DEBUG_SW) Serial.println("Switch2 -ON"); 383 | 384 | } 385 | if (digitalRead(S6) == HIGH ) 386 | { 387 | if (switch_ON_Flag2_previous_I == 1) 388 | { 389 | digitalWrite(R6, LOW); 390 | if (DEBUG_SW) Serial.println("Relay2 OFF"); 391 | String Value2 = "0"; 392 | json.set("/appliance2", Value2); 393 | Firebase.updateNode(firebaseData, "/Appliances", json); 394 | switch_ON_Flag2_previous_I = 0; 395 | } 396 | if (DEBUG_SW)Serial.println("Switch2 OFF"); 397 | } 398 | 399 | if (digitalRead(S7) == LOW) 400 | { 401 | if (switch_ON_Flag3_previous_I == 0 ) 402 | { 403 | digitalWrite(R7, HIGH); 404 | if (DEBUG_SW) Serial.println("Relay3- ON"); 405 | String Value3 = "1"; 406 | json.set("/appliance3", Value3); 407 | Firebase.updateNode(firebaseData, "/Appliances", json); 408 | switch_ON_Flag3_previous_I = 1; 409 | } 410 | if (DEBUG_SW) Serial.println("Switch3 -ON"); 411 | 412 | } 413 | if (digitalRead(S7) == HIGH ) 414 | { 415 | if (switch_ON_Flag3_previous_I == 1) 416 | { 417 | digitalWrite(R7, LOW); 418 | if (DEBUG_SW) Serial.println("Relay3 OFF"); 419 | String Value3 = "0"; 420 | json.set("/appliance3", Value3); 421 | Firebase.updateNode(firebaseData, "/Appliances", json); 422 | switch_ON_Flag3_previous_I = 0; 423 | } 424 | if (DEBUG_SW)Serial.println("Switch3 OFF"); 425 | } 426 | 427 | if (digitalRead(S8) == LOW) 428 | { 429 | if (switch_ON_Flag4_previous_I == 0 ) 430 | { 431 | digitalWrite(R8, HIGH); 432 | if (DEBUG_SW) Serial.println("Relay4- ON"); 433 | String Value4 = "1"; 434 | json.set("/appliance4", Value4); 435 | Firebase.updateNode(firebaseData, "/Appliances", json); 436 | switch_ON_Flag4_previous_I = 1; 437 | } 438 | if (DEBUG_SW) Serial.println("Switch4 -ON"); 439 | 440 | } 441 | if (digitalRead(S8) == HIGH ) 442 | { 443 | if (switch_ON_Flag4_previous_I == 1) 444 | { 445 | digitalWrite(R8, LOW); 446 | if (DEBUG_SW) Serial.println("Relay4 OFF"); 447 | String Value4 = "0"; 448 | json.set("/appliance4", Value4); 449 | Firebase.updateNode(firebaseData, "/Appliances", json); 450 | switch_ON_Flag4_previous_I = 0; 451 | } 452 | if (DEBUG_SW) Serial.println("Switch4 OFF"); 453 | } 454 | 455 | 456 | } 457 | 458 | 459 | void without_internet() 460 | { 461 | 462 | // FOR FAN 463 | if (digitalRead(s1) == LOW && speed1_flag == 1) 464 | { 465 | speed1(); 466 | 467 | speed1_flag = 0; 468 | speed2_flag = 1; 469 | speed3_flag = 1; 470 | speed4_flag = 1; 471 | speed0_flag = 1; 472 | 473 | 474 | } 475 | if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1) 476 | { 477 | speed2(); 478 | 479 | speed1_flag = 1; 480 | speed2_flag = 0; 481 | speed3_flag = 1; 482 | speed4_flag = 1; 483 | speed0_flag = 1; 484 | 485 | } 486 | if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1) 487 | { 488 | speed3(); 489 | 490 | speed1_flag = 1; 491 | speed2_flag = 1; 492 | speed3_flag = 0; 493 | speed4_flag = 1; 494 | speed0_flag = 1; 495 | } 496 | if (digitalRead(s4) == LOW && speed4_flag == 1) 497 | { 498 | speed4(); 499 | 500 | speed1_flag = 1; 501 | speed2_flag = 1; 502 | speed3_flag = 1; 503 | speed4_flag = 0; 504 | speed0_flag = 1; 505 | } 506 | if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1) 507 | { 508 | speed0(); 509 | 510 | speed1_flag = 1; 511 | speed2_flag = 1; 512 | speed3_flag = 1; 513 | speed4_flag = 1; 514 | speed0_flag = 0; 515 | } 516 | 517 | 518 | // FOR SWITCH 519 | digitalWrite(R5, !digitalRead(S5)); 520 | digitalWrite(R6, !digitalRead(S6)); 521 | digitalWrite(R7, !digitalRead(S7)); 522 | digitalWrite(R8, !digitalRead(S8)); 523 | } 524 | 525 | 526 | 527 | // Fan Speed Control 528 | 529 | void speed0() 530 | { 531 | //All Relays Off - Fan at speed 0 532 | if (DEBUG_SW)Serial.println("SPEED 0"); 533 | digitalWrite(Speed1, LOW); 534 | digitalWrite(Speed2, LOW); 535 | digitalWrite(Speed4, LOW); 536 | 537 | } 538 | 539 | void speed1() 540 | { 541 | //Speed1 Relay On - Fan at speed 1 542 | if (DEBUG_SW)Serial.println("SPEED 1"); 543 | digitalWrite(Speed1, LOW); 544 | digitalWrite(Speed2, LOW); 545 | digitalWrite(Speed4, LOW); 546 | delay(1000); 547 | digitalWrite(Speed1, HIGH); 548 | } 549 | 550 | void speed2() 551 | { 552 | //Speed2 Relay On - Fan at speed 2 553 | if (DEBUG_SW)Serial.println("SPEED 2"); 554 | digitalWrite(Speed1, LOW); 555 | digitalWrite(Speed2, LOW); 556 | digitalWrite(Speed4, LOW); 557 | delay(1000); 558 | digitalWrite(Speed2, HIGH); 559 | } 560 | 561 | void speed3() 562 | { 563 | //Speed1 & Speed2 Relays On - Fan at speed 3 564 | if (DEBUG_SW)Serial.println("SPEED 3"); 565 | digitalWrite(Speed1, LOW); 566 | digitalWrite(Speed2, LOW); 567 | digitalWrite(Speed4, LOW); 568 | delay(1000); 569 | digitalWrite(Speed1, HIGH); 570 | digitalWrite(Speed2, HIGH); 571 | 572 | } 573 | 574 | void speed4() 575 | { 576 | //Speed4 Relay On - Fan at speed 4 577 | if (DEBUG_SW)Serial.println("SPEED 4"); 578 | digitalWrite(Speed1, LOW); 579 | digitalWrite(Speed2, LOW); 580 | digitalWrite(Speed4, LOW); 581 | delay(1000); 582 | digitalWrite(Speed4, HIGH); 583 | } 584 | --------------------------------------------------------------------------------