Esphome 控制普通电风扇 – Kang 您所在的位置:网站首页 电风扇调节器 Esphome 控制普通电风扇 – Kang

Esphome 控制普通电风扇 – Kang

2024-07-13 10:18| 来源: 网络整理| 查看: 265

近来天气渐热。遂购入一台普通可充电小风扇。此风扇的电源和风速调节只有一个按钮。且无遥控器。刚好家里还有几片剩余没有用的ESP12 。试试能不能改装一下远程控制,接入home-assisstant。

因为此风扇自带电池。内部按钮是个未知的MCU控制的,测量发现MCU的供电电压是3.6v左右。也可以用来给ESP供电。按钮是低电平触发。所以只要用ESP控制GPIO给按钮低电平就可以控制这个风扇了。

连接电路如下:

ESPHOME还不支持Fan Template。其Binary-Fan又只能通过一个GPIO来控制开关。此风扇的开关实际上是个循环的速度调节器,从0-5档。所以我需要一个fake的GPIO什么也不做。在on_turn_on和on_turn_off时用lambda来控制连接风扇按钮的GPIO。开机简单,直接trigger一下GPIO就OK。关机要连续trigger直到切换到0 。所以加了个binary-sensor GPIO检测开机状态。lambda通过for + if开控制实现关机。

fan: - platform: binary output: fake_out name: Fan restore_mode: RESTORE_DEFAULT_OFF on_turn_on: then: - logger.log: "Turn On Fan" - script.execute: button_press - script.wait: button_press - logger.log: "Turn On Fan End" on_turn_off: then: - logger.log: "Turn Off Fan" - script.execute: always_press_until_off - script.wait: always_press_until_off - logger.log: "Turn Off Fan End" binary_sensor: - platform: gpio pin: GPIO5. # 连接检测点,检测电源状态 id: fan_power name: "Fan Power" filters: - delayed_on: 10ms output: - id: output_io platform: gpio pin: GPIO14 inverted: true - platform: template id: fake_out # 什么都不做 type: float write_action: - logger.log: "NoThing" script: - id: button_press then: - logger.log: "Press Start" - output.turn_on: output_io - delay: 200ms - output.turn_off: output_io - logger.log: "Press End" - id: always_press_until_off then: - repeat: count: 4 then: - if: condition: binary_sensor.is_on: fan_power then: - logger.log: "Press Start" - output.turn_on: output_io - delay: 100ms - output.turn_off: output_io - delay: 500ms # 电源关机有一定延迟 - logger.log: "Press End" else: - logger.log: "Check Else"

增加调节风速的按钮,这个比较简单:

button: - platform: template name: "Fan Speed +" on_press: - script.execute: button_press - script.wait: button_press

打开web server测试效果

web_server:

测试OK后打开api,接入home-assisstant。

api: password: "PASSWORD"

因为风扇是电池供电,为了防止esp把电池耗尽,加入一点休眠机制:

esphome: name: fan platform: ESP8266 board: esp12e platformio_options: board_build.ldscript: eagle.flash.2m.ld on_loop: then: - if: condition: sensor.in_range: id: vcc below: 3.82 then: - logger.log: "Enter Deep Sleep" - deep_sleep.enter: id: deep_sleep_1 sleep_duration: 20min else: - deep_sleep.prevent: deep_sleep_1 sensor: - platform: adc pin: VCC id: vcc name: "Fan VCC" update_interval: 100ms deep_sleep: id: deep_sleep_1 run_duration: 60s sleep_duration: 20min

完整代码如下:

https://gist.github.com/yufeikang/aa21ad464a992d4b47f1b0f7ed1ebb79

分享到:FacebookX赞过:赞 正在加载…… 相关


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有