#define BLYNK_TEMPLATE_ID "TMPL3zBB2Yx0M"
#define BLYNK_TEMPLATE_NAME "smart board"
#define BLYNK_AUTH_TOKEN "nS7oPYyAW6tthW5y9Qo-BufqMS-EfyGO"
char ssid[] = "POCO";
char pass[] = "123456789";
//Update the HEX code of IR Remote buttons 0x<HEX CODE>
#define IR_Button_1 0x80BF49B6
#define IR_Button_2 0x80BFC936
#define IR_Button_3 0x80BF33CC
#define IR_Button_4 0x80BF718E
#define IR_All_Off 0x80BF3BC4
//#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <IRremote.h>
#include <Preferences.h>
Preferences pref;
#define DHTPIN D4 //D4 pin connected with DHT
#define IR_RECV_PIN 9 // SD2 (IR receiver pin)
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21 // DHT 21, AM2301
IRrecv irrecv(IR_RECV_PIN);
decode_results results;
// define the GPIO connected with Relays and switches
#define RelayPin1 5 //D1
#define RelayPin2 4 //D2
#define RelayPin3 14 //D5
#define RelayPin4 12 //D6
#define SwitchPin1 10 //SD3
#define SwitchPin2 D3 //D3
#define SwitchPin3 13 //D7
#define SwitchPin4 3 //RX
#define wifiLed 16 //D0
//Change the virtual pins according the rooms
#define VPIN_BUTTON_1 V0
#define VPIN_BUTTON_2 V1
#define VPIN_BUTTON_3 V2
#define VPIN_BUTTON_4 V6
#define VPIN_BUTTON_C V5
#define VPIN_TEMPERATURE V4
#define VPIN_HUMIDITY V3
// Relay State
bool toggleState_1 = LOW; //Define integer to remember the toggle state for relay 1
bool toggleState_2 = LOW; //Define integer to remember the toggle state for relay 2
bool toggleState_3 = LOW; //Define integer to remember the toggle state for relay 3
bool toggleState_4 = LOW; //Define integer to remember the toggle state for relay 4
// Switch State
bool SwitchState_1 = LOW;
bool SwitchState_2 = LOW;
bool SwitchState_3 = LOW;
bool SwitchState_4 = LOW;
int wifiFlag = 0;
float temperature1 = 0;
float humidity1 = 0;
char auth[] = BLYNK_AUTH_TOKEN;
BlynkTimer timer;
DHT dht(DHTPIN, DHTTYPE);
// When App button is pushed - switch the state
BLYNK_WRITE(VPIN_BUTTON_1) {
toggleState_1 = [Link]();
digitalWrite(RelayPin1, !toggleState_1);
[Link]("Relay1", toggleState_1);
}
BLYNK_WRITE(VPIN_BUTTON_2) {
toggleState_2 = [Link]();
digitalWrite(RelayPin2, !toggleState_2);
[Link]("Relay2", toggleState_2);
}
BLYNK_WRITE(VPIN_BUTTON_3) {
toggleState_3 = [Link]();
digitalWrite(RelayPin3, !toggleState_3);
[Link]("Relay3", toggleState_3);
}
BLYNK_WRITE(VPIN_BUTTON_4) {
toggleState_4 = [Link]();
digitalWrite(RelayPin4, !toggleState_4);
[Link]("Relay4", toggleState_4);
}
BLYNK_WRITE(VPIN_BUTTON_C) {
all_SwitchOff();
}
void all_SwitchOff(){
toggleState_1 = 0; digitalWrite(RelayPin1, HIGH); [Link]("Relay1",
toggleState_1); [Link](VPIN_BUTTON_1, toggleState_1); delay(100);
toggleState_2 = 0; digitalWrite(RelayPin2, HIGH); [Link]("Relay2",
toggleState_2); [Link](VPIN_BUTTON_2, toggleState_2); delay(100);
toggleState_3 = 0; digitalWrite(RelayPin3, HIGH); [Link]("Relay3",
toggleState_3); [Link](VPIN_BUTTON_3, toggleState_3); delay(100);
toggleState_4 = 0; digitalWrite(RelayPin4, HIGH); [Link]("Relay4",
toggleState_4); [Link](VPIN_BUTTON_4, toggleState_4); delay(100);
[Link](VPIN_HUMIDITY, humidity1);
[Link](VPIN_TEMPERATURE, temperature1);
}
void checkBlynkStatus() { // called every 2 seconds by SimpleTimer
bool isconnected = [Link]();
if (isconnected == false) {
wifiFlag = 1;
[Link]("Blynk Not Connected");
digitalWrite(wifiLed, HIGH);
}
if (isconnected == true) {
wifiFlag = 0;
digitalWrite(wifiLed, LOW);
//[Link]("Blynk Connected");
}
}
BLYNK_CONNECTED() {
// update the latest state to the server
[Link](VPIN_BUTTON_1, toggleState_1);
[Link](VPIN_BUTTON_2, toggleState_2);
[Link](VPIN_BUTTON_3, toggleState_3);
[Link](VPIN_BUTTON_4, toggleState_4);
[Link](VPIN_TEMPERATURE);
[Link](VPIN_HUMIDITY);
}
void readSensor(){
float h = [Link]();
float t = [Link](); // or [Link](true) for Fahrenheit
if (isnan(h) || isnan(t)) {
[Link]("Failed to read from DHT sensor!");
return;
}
else {
humidity1 = h;
temperature1 = t;
if(t > 30){
// [Link]("shameer50@[Link]", "Alert", "Temperature over 28C!");
[Link]("temp_alert","Temp above 30 degree");
}
}
}
void sendSensor()
{
readSensor();
// You can send any value at any time.
// Please don't send more that 10 values per second.
[Link](VPIN_HUMIDITY, humidity1);
[Link](VPIN_TEMPERATURE, temperature1);
}
void ir_remote(){
if ([Link](&results)) {
switch([Link]){
case IR_Button_1:
digitalWrite(RelayPin1, toggleState_1);
toggleState_1 = !toggleState_1;
[Link]("Relay1", toggleState_1);
[Link](VPIN_BUTTON_1, toggleState_1);
delay(100);
break;
case IR_Button_2:
digitalWrite(RelayPin2, toggleState_2);
toggleState_2 = !toggleState_2;
[Link]("Relay2", toggleState_2);
[Link](VPIN_BUTTON_2, toggleState_2);
delay(100);
break;
case IR_Button_3:
digitalWrite(RelayPin3, toggleState_3);
toggleState_3 = !toggleState_3;
[Link]("Relay3", toggleState_3);
[Link](VPIN_BUTTON_3, toggleState_3);
delay(100);
break;
case IR_Button_4:
digitalWrite(RelayPin4, toggleState_4);
toggleState_4 = !toggleState_4;
[Link]("Relay4", toggleState_4);
[Link](VPIN_BUTTON_4, toggleState_4);
delay(100);
break;
case IR_All_Off:
all_SwitchOff();
break;
default : break;
}
//[Link]([Link], HEX);
[Link]();
}
}
void getRelayState()
{
//[Link]("reading data from NVS");
toggleState_1 = [Link]("Relay1", 0);
digitalWrite(RelayPin1, !toggleState_1);
[Link](VPIN_BUTTON_1, toggleState_1);
delay(200);
toggleState_2 = [Link]("Relay2", 0);
digitalWrite(RelayPin2, !toggleState_2);
[Link](VPIN_BUTTON_2, toggleState_2);
delay(200);
toggleState_3 = [Link]("Relay3", 0);
digitalWrite(RelayPin3, !toggleState_3);
[Link](VPIN_BUTTON_3, toggleState_3);
delay(200);
toggleState_4 = [Link]("Relay4", 0);
digitalWrite(RelayPin4, !toggleState_4);
[Link](VPIN_BUTTON_4, toggleState_4);
delay(200);
}
void manual_control()
{
if (digitalRead(SwitchPin1) == LOW && SwitchState_1 == LOW) {
digitalWrite(RelayPin1, LOW);
toggleState_1 = HIGH;
SwitchState_1 = HIGH;
[Link]("Relay1", toggleState_1);
[Link](VPIN_BUTTON_1, toggleState_1);
[Link]("Switch-1 on");
}
if (digitalRead(SwitchPin1) == HIGH && SwitchState_1 == HIGH) {
digitalWrite(RelayPin1, HIGH);
toggleState_1 = LOW;
SwitchState_1 = LOW;
[Link]("Relay1", toggleState_1);
[Link](VPIN_BUTTON_1, toggleState_1);
[Link]("Switch-1 off");
}
if (digitalRead(SwitchPin2) == LOW && SwitchState_2 == LOW) {
digitalWrite(RelayPin2, LOW);
toggleState_2 = HIGH;
SwitchState_2 = HIGH;
[Link]("Relay2", toggleState_2);
[Link](VPIN_BUTTON_2, toggleState_2);
[Link]("Switch-2 on");
}
if (digitalRead(SwitchPin2) == HIGH && SwitchState_2 == HIGH) {
digitalWrite(RelayPin2, HIGH);
toggleState_2 = LOW;
SwitchState_2 = LOW;
[Link]("Relay2", toggleState_2);
[Link](VPIN_BUTTON_2, toggleState_2);
[Link]("Switch-2 off");
}
if (digitalRead(SwitchPin3) == LOW && SwitchState_3 == LOW) {
digitalWrite(RelayPin3, LOW);
toggleState_3 = HIGH;
SwitchState_3 = HIGH;
[Link]("Relay3", toggleState_3);
[Link](VPIN_BUTTON_3, toggleState_3);
[Link]("Switch-3 on");
}
if (digitalRead(SwitchPin3) == HIGH && SwitchState_3 == HIGH) {
digitalWrite(RelayPin3, HIGH);
toggleState_3 = LOW;
SwitchState_3 = LOW;
[Link]("Relay3", toggleState_3);
[Link](VPIN_BUTTON_3, toggleState_3);
[Link]("Switch-3 off");
}
if (digitalRead(SwitchPin4) == LOW && SwitchState_4 == LOW) {
digitalWrite(RelayPin4, LOW);
toggleState_4 = HIGH;
SwitchState_4 = HIGH;
[Link]("Relay4", toggleState_4);
[Link](VPIN_BUTTON_4, toggleState_4);
[Link]("Switch-4 on");
}
if (digitalRead(SwitchPin4) == HIGH && SwitchState_4 == HIGH) {
digitalWrite(RelayPin4, HIGH);
toggleState_4 = LOW;
SwitchState_4 = LOW;
[Link]("Relay4", toggleState_4);
[Link](VPIN_BUTTON_4, toggleState_4);
[Link]("Switch-4 off");
}
}
void setup()
{
[Link](9600);
//Open namespace in read-write mode
[Link]("Relay_State", false);
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);
[Link](); // Enabling IR sensor
[Link](); // Enabling DHT sensor
digitalWrite(wifiLed, HIGH);
//[Link](auth, ssid, pass);
[Link](ssid, pass);
[Link](2000L, checkBlynkStatus); // check if Blynk server is connected
every 2 seconds
[Link](1000L, sendSensor); // Sending Sensor Data to Blynk Cloud every
1 second
[Link](auth);
delay(1000);
getRelayState(); // Get the last state of Relays
[Link](VPIN_BUTTON_1, toggleState_1);
[Link](VPIN_BUTTON_2, toggleState_2);
[Link](VPIN_BUTTON_3, toggleState_3);
[Link](VPIN_BUTTON_4, toggleState_4);
}
void loop()
{
manual_control();
ir_remote(); //IR remote Control
[Link]();
[Link]();
}