In the first version of our All in One Home Automation project, we were able to control 4 appliances and speed of 1 AC fan using Home Assistant Dashboard and manual switches. We already covered a complete video about that on YouTube.
After the great success of the first version, we came up with the second version of this project which is 18% smaller then the previous one but still has more features in it. And this is the article about that project, Enjoy…
Components Required:-
- ESP32 dev board
- Hi-Link 5v Power Supply(5W)
- DHT11 Sensor
- Terminal Connector (https://amzn.to/2FqUKEe)
- 5v Relay (https://amzn.to/35BTEAa)
- Diode IN4007 (https://amzn.to/2RhazzO)
- Transistor BC547(https://amzn.to/2SK3Fna)
- Resistor 330Ω 1/4W(https://amzn.to/2OQqUuz)
- Resistor 220kΩ 1/4W (https://amzn.to/3kcgna6)
- Resistor 2.2Ω 1/2W (https://amzn.to/32mdSvN)
- Resistor 10kΩ 1/4W (https://amzn.to/2GY6Sxf)
- Slide Switch
- Male Connector
- Capacitor 2.2uF 250v
- Capacitor 3.3uF 250v
Buy the complete kit which is Ready to Use…
We are selling this complete project, with all the components already soldered on the PCB along with ESP32 which you need to program it by yourself, DHT11 Sensor and Rotary Switch . Just click the link mentioned below to buy it.
Schematic
Connection diagram
Code files
esp32.yaml
esphome:
name: esp-fan
includes: ifan02.h
esp32:
board: esp32doit-devkit-v1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "tXfMjq3L0HQrXSqi5oWOG5NFVo20arn1m7lGs9GJKL4="
ota:
password: "989776e5dd4b4024d2346ed0c38de407"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp-Fan Fallback Hotspot"
password: "oLR184xFSxja"
sensor:
- platform: dht
pin: 16
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
update_interval: 5s
captive_portal:
binary_sensor:
- platform: gpio
pin: GPIO32
name: "Light1"
device_class: light
on_press:
then:
- light.turn_off: light1
on_release:
then:
- light.turn_on: light1
- platform: gpio
pin: GPIO35
name: "Light2"
device_class: light
on_press:
then:
- light.turn_off: light2
on_release:
then:
- light.turn_on: light2
- platform: gpio
pin: GPIO34
name: "Light3"
device_class: light
on_press:
then:
- light.turn_off: light3
on_release:
then:
- light.turn_on: light3
- platform: gpio
pin: GPIO39
name: "Light4"
device_class: light
on_press:
then:
- light.turn_off: light4
on_release:
then:
- light.turn_on: light4
- platform: gpio
pin: GPIO33
name: "Fan_Switch"
device_class: light
on_press:
then:
fan.turn_off: ifan02_fan
on_release:
then:
- fan.turn_on:
id: ifan02_fan
speed: 1
- platform: gpio
pin: GPIO27
name: "fan speed1"
device_class: power
id: fan_speed1
on_release:
then:
- fan.turn_on:
id: ifan02_fan
speed: 1
- platform: gpio
pin: GPIO14
name: "fan speed2"
device_class: power
id: fan_speed2
on_release:
then:
- fan.turn_on:
id: ifan02_fan
speed: 2
- platform: gpio
pin: GPIO13
name: "fan speed4"
device_class: power
id: fan_speed4
on_release:
then:
- fan.turn_on:
id: ifan02_fan
speed: 4
light:
- platform: binary
name: "Light1"
output: light_output1
id: light1
- platform: binary
name: "Light2"
output: light_output2
id: light2
- platform: binary
name: "Light3"
output: light_output3
id: light3
- platform: binary
name: "Light4"
output: light_output4
id: light4
output:
- id: light_output1
platform: gpio
pin: 15
- id: light_output2
platform: gpio
pin: 2
- id: light_output3
platform: gpio
pin: 4
- id: light_output4
platform: gpio
pin: 22
- platform: custom
type: float
outputs:
id: fanoutput
lambda: |-
auto ifan02_fan = new IFan02Output();
App.register_component(ifan02_fan);
return {ifan02_fan};
switch:
- platform: template
id: update_fan_speed
optimistic: true
turn_on_action:
then:
- delay: 200ms
- if:
condition:
and:
- switch.is_off: fan_relay1
- switch.is_off: fan_relay2
- switch.is_off: fan_relay3
then:
- fan.turn_off: ifan02_fan
- if:
condition:
and:
- switch.is_on: fan_relay1
- switch.is_off: fan_relay2
- switch.is_off: fan_relay3
then:
- fan.turn_on:
id: ifan02_fan
speed: 1
- if:
condition:
and:
- switch.is_off: fan_relay1
- switch.is_on: fan_relay2
- switch.is_off: fan_relay3
then:
- fan.turn_on:
id: ifan02_fan
speed: 2
- if:
condition:
and:
- switch.is_on: fan_relay1
- switch.is_on: fan_relay2
- switch.is_off: fan_relay3
then:
- fan.turn_on:
id: ifan02_fan
speed: 3
- if:
condition:
and:
- switch.is_off: fan_relay1
- switch.is_off: fan_relay2
- switch.is_on: fan_relay3
then:
- fan.turn_on:
id: ifan02_fan
speed: 4
- switch.turn_off: update_fan_speed
- platform: gpio
pin: GPIO21
id: fan_relay1
- platform: gpio
pin: GPIO19
id: fan_relay2
- platform: gpio
pin: GPIO18
id: fan_relay3
fan:
- platform: speed
output: fanoutput
id: ifan02_fan
speed_count: 4
name: "iFan02 Fan"
ifan02.h
#include "esphome.h"
using namespace esphome;
class IFan02Output : public Component, public FloatOutput {
public:
void write_state(float state) override
{
if(state < 0.2)
{
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
}
else if (state < 0.4) {
// OFF
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
delay(1000);
digitalWrite(21, HIGH);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
} else if (state < 0.6) {
// low speed
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
delay(1000);
digitalWrite(21, LOW);
digitalWrite(19, HIGH);
digitalWrite(18, LOW);
} else if (state < 0.8) {
// medium speed
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
delay(1000);
digitalWrite(21, HIGH);
digitalWrite(19, HIGH);
digitalWrite(18, LOW);
} else {
// high speed
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
delay(1000);
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, HIGH);
}
}
};
Full Tutorial video
If you want to understand this project in detail, kindly watch out our complete tutorial video on it