天气转凉,设备也降温了,可恶的噪声是时候该消停了,什么?你的风扇不能调速?来来,那我们换一个
首先去海鲜市场买个服务器用的暴力风扇,因为句便宜,还质量好,大概也就20块而已。
这我选华为的8cm风扇,如图
剪掉专用接头,改接通用风扇4PIN接头就是两个正常的4PIN风扇啦
附上改装后的风扇及白嫖的PCB板,主控用的是Esp01S,这模块胜在够便宜,而且拆装方便,缺点就是存储空间不足需要线刷,不过便宜就完了。
成品装好后如图,颜值还是不错的
上代码
substitutions:
device_name: "tempfan01s"
friendly_name: "tempfan01s"
comment: "tempfan01s"
version: "1.0.0"
speed_low: "20"
speed_med: "50"
speed_full: "100"
esphome:
name: "${friendly_name}"
friendly_name: "${friendly_name}"
on_boot:
then:
- delay: 3s
- fan.turn_off:
id: ${friendly_name}_fan
- delay: 3s
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_low}"
- delay: 3s
- fan.turn_off:
id: ${friendly_name}_fan
esp8266:
board: nodemcuv2
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "tempjSOexvjEi/BBt1PWpibuerWU4FXpOCAhPdFlfhk="
reboot_timeout: 0s
ota:
password: "temp3eff6eee40ff24dd81c0705b8d35"
wifi:
ssid: wushi-2.4
password: ++0123--
manual_ip:
static_ip: 192.168.1.119 ##固定此设备IP地址为192.168.1.100;
gateway: 192.168.1.1 ##路由器、网关地址;
subnet: 255.255.255.0 ##子网掩码;
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: '${friendly_name}_wifi '
password: "aabb++--"
captive_portal:
fan:
- platform: speed
id: "${friendly_name}_fan"
output: pwm_output
speed_count: 100
name: "${device_name} 开关"
output:
- platform: esp8266_pwm
pin: GPIO0
frequency: 15000 Hz
id: pwm_output
number:
- platform: template
icon: "mdi:fan"
id: ${friendly_name}_speed_input
name: "${device_name} 风速"
lambda: |-
return id(${friendly_name}_fan).speed;
step: 1
min_value: 1
max_value: 100
unit_of_measurement: "%"
update_interval: 1s
set_action:
then:
- fan.turn_on:
id: ${friendly_name}_fan
speed: !lambda "return x;"
- component.update: ${friendly_name}_fanmode
- component.update: ${friendly_name}_sensor_fanspeed
select:
- platform: template
icon: "mdi:fan"
name: "${device_name} 模式"
id: ${friendly_name}_fanmode
update_interval: 1s
lambda: |-
if(id(${friendly_name}_fan).speed <= ${speed_low})
return std::string("Low");
else if(id(${friendly_name}_fan).speed == ${speed_med})
return std::string("Medium");
else if(id(${friendly_name}_fan).speed >= ${speed_full})
return std::string("Full");
else
return std::string("Custom");
set_action:
then:
- lambda: |-
auto call = id(${friendly_name}_fan).turn_on();
if(x == "Low")
call.set_speed(${speed_low});
else if(x == "Medium")
call.set_speed(${speed_med});
else if(x == "Full")
call.set_speed(${speed_full});
else
call.set_speed(id(${friendly_name}_speed_input).state);
call.perform();
- component.update: ${friendly_name}_speed_input
- component.update: ${friendly_name}_sensor_fanspeed
options:
- Low
- Medium
- Full
- Custom
button:
- platform: template
icon: "mdi:fan-speed-1"
name: "${device_name} Low"
on_press:
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_low}"
- platform: template
icon: "mdi:fan-speed-2"
name: "${device_name} Med"
on_press:
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_med}"
- platform: template
icon: "mdi:fan-speed-3"
name: "${device_name} Full"
on_press:
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_full}"
- platform: restart
name: "${device_name} 初始化"
sensor:
- platform: template
id: ${friendly_name}_sensor_fanspeed
icon: "mdi:fan"
name: "风扇速度"
lambda: |-
return id(${friendly_name}_fan).speed;
update_interval: 1s
accuracy_decimals: 0
unit_of_measurement: "%"
- platform: dht
model: DHT22
pin: GPIO2
temperature:
on_value_range:
- below: 30.0
then:
- fan.turn_off: ${friendly_name}_fan
- above: 30.0
below: 40.0
then:
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_low}"
- above: 40.0
below: 45.0
then:
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_med}"
- above: 50.0
then:
- fan.turn_on:
id: ${friendly_name}_fan
speed: "${speed_full}"
name: "${friendly_name}_temp"
humidity:
name: "${friendly_name}_Humidity"
update_interval: 3s