请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 676|回复: 11

[进阶教程] DIY一个WIFI控制的HDMI切换器

[复制链接]

17

主题

162

帖子

1193

积分

论坛技术达人

积分
1193
金钱
996
HASS币
150
发表于 2020-5-4 23:12:35 | 显示全部楼层 |阅读模式
需求主要是我只有一个显示器,电脑,xbox,安卓盒子切换太麻烦了,还要拔线,于是买了这个切换器。三进一出。
品牌 山泽   塑料感及强。
HDMI.png
好了,现在开始改造了,
上面只有3个LED灯,显示在输出为哪一个。一个轻触开关,按一下切换输入
万用表量了一下,LED灯电压2.1V刚好可以驱动ESP8266的gpio为 高电平。
轻触按钮就是给一个引脚低电平。了解了,开始焊接,在3个LED灯接一根线接到ESP8266上面,我接的是led1---gpio5,led2---gpio14,led3---gpio12,轻触开关的一个脚接入GPIO15,板子上一个没焊接的电源接口,可以用来窃取HDMI的5V电压,可以用来给ESP8266供电。我这里是接了一个5V转3.3v的模块,然后给esp供电的

3b7924e48cc8d40120f2248d516798d.jpg 16353c64affbf7abd3f4e9be110149d.jpg 79dde65ec6db6e1f8916e54b72bdc75.jpg

然后编译固件


substitutions:
  device_name: hdmi_428e

esphome:
  name: $device_name
  platform: ESP8266
  board: esp01_1m
  esp8266_restore_from_flash: yes
  build_path: build/$device_name
  on_boot: 
    then: 
      - lambda: |-
          if (id(${device_name}_P2).state) {
            id(ds)=2;
          } else {
            if (id(${device_name}_P3).state)
            {
              id(ds)=3;
            }
          }



api:  
  reboot_timeout: !secret api_reboot_timeout
ota:
captive_portal:
logger:
web_server:
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  reboot_timeout: !secret wifi_reboot_timeout
  power_save_mode: none
  fast_connect: !secret wifi_fast_connect
  ap:
    ssid: !secret wifi_ssid_AP
    password: !secret wifi_password_AP

globals:
   - id: ds
     type: int
     restore_value: no
     initial_value: "1"
   - id: hdmi_1
     type: int
     restore_value: no
     initial_value: "1"
   - id: hdmi_2
     type: int
     restore_value: no
     initial_value: "2"
   - id: hdmi_3
     type: int
     restore_value: no
     initial_value: "3"

switch:
  - platform: gpio
    pin: 15
    id: relay
    restore_mode: ALWAYS_ON
  - platform: template
    name: "${device_name}_HDMI"
    turn_on_action:
      then:  
        - switch.turn_off: relay
        - delay: 250ms
        - switch.turn_on: relay

  - platform: template
    name: "${device_name}_HDMI_1"
    lambda: |-
      if (id(${device_name}_P1).state) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      then: 
        - while:
            condition:
              lambda: 'return id(ds) != 1 and (id(${device_name}_P1).state or id(${device_name}_P2).state or id(${device_name}_P3).state);'
            then:
              - switch.turn_off: relay
              - delay: 250ms
              - switch.turn_on: relay
              - delay: 1000ms

    



  - platform: template
    name: "${device_name}_HDMI_2"
    lambda: |-
      if (id(${device_name}_P2).state) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      then: 
        - while:
            condition:
              lambda: 'return id(ds) != 2 and (id(${device_name}_P1).state or id(${device_name}_P2).state or id(${device_name}_P3).state);'
            then:
              - switch.turn_off: relay
              - delay: 250ms
              - switch.turn_on: relay
              - delay: 1000ms
  - platform: template
    name: "${device_name}_HDMI_3"
    lambda: |-
      if (id(${device_name}_P3).state) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      then: 
        - while:
            condition:
              lambda: 'return id(ds) != 3 and (id(${device_name}_P1).state or id(${device_name}_P2).state or id(${device_name}_P3).state);'
            then:
              - switch.turn_off: relay
              - delay: 250ms
              - switch.turn_on: relay
              - delay: 1000ms


binary_sensor:
  - platform: gpio
    pin: GPIO5
    name: "${device_name}_P1"
    device_class: motion
    id: "${device_name}_P1"
    internal: true
    on_press:
      then:
        - lambda: |-
            id(ds)=1;
  - platform: gpio
    pin: GPIO14
    name: "${device_name}_P2"
    device_class: motion
    id: "${device_name}_P2"
    internal: true
    on_press:
      then:
        - lambda: |-
            id(ds)=2;
  - platform: gpio
    pin: GPIO12
    name: "${device_name}_P3"
    device_class: motion
    id: "${device_name}_P3"
    internal: true
    on_press:
      then:
        - lambda: |-
            id(ds)=3;


最后效果就是这样子了,单击按钮可以切换到想要的屏幕,也可以单击切换一个一个切换
1588604765(1).png





不足:一个非常坑爹的地方,折腾了整整一天。HDMI如果设置了1080P ,60HZ 以上参数的时候,会对2.4G有强烈干扰。导致无法连接wifi,一直没找到原因,我换了3块esp8266板子,换了GPIO引脚。换了HDMI线。始终没找到问题。直到我发现切换到安卓盒子的时候wifi就连上了。最后把xbox和电脑从2K分辨率调整到1080P.50hz所有的解决了。围绕干扰问题,最后在切换器上面贴铝箔。线上面缠绕铝箔做屏蔽,都解决不了。网上看有人说设计电路板的时候wifi芯片离hdmi要5cm以上,我延长了线还是无法解决干扰问题。看样子智能1080P凑合用了

评分

参与人数 2金钱 +21 HASS币 +20 收起 理由
Sunbelife + 1 这款可以红外的,为什么不用红外呢?解决 W.
+ 20 + 20 纳尼,还有这种操作?

查看全部评分

回复

使用道具 举报

7

主题

696

帖子

2526

积分

金牌会员

Rank: 6Rank: 6

积分
2526
金钱
1825
HASS币
40
QQ
发表于 2020-5-4 23:59:50 | 显示全部楼层
沙发顺便来重温一下esphome
回复

使用道具 举报

49

主题

807

帖子

3049

积分

论坛元老

Rank: 8Rank: 8

积分
3049
金钱
2237
HASS币
30
发表于 2020-5-5 04:23:46 | 显示全部楼层
会不会是公用电源造成的
回复

使用道具 举报

5

主题

61

帖子

226

积分

论坛分享达人

积分
226
金钱
165
HASS币
0
发表于 2020-5-5 07:18:48 来自手机 | 显示全部楼层
感谢 学习了 可以以此类推作出更多diy
回复

使用道具 举报

9

主题

112

帖子

409

积分

论坛分享达人

积分
409
金钱
292
HASS币
20
发表于 2020-5-5 10:43:45 | 显示全部楼层
太强了,正好有个触摸台灯想改成智能的,参照这个试试看。感谢分享!
回复

使用道具 举报

6

主题

181

帖子

803

积分

论坛分享达人

积分
803
金钱
622
HASS币
0
发表于 2020-5-5 11:54:19 | 显示全部楼层
LED灯电压2.1V 不是达不到高电平,如何驱动?
回复

使用道具 举报

8

主题

236

帖子

1842

积分

论坛技术达人

积分
1842
金钱
1591
HASS币
100
发表于 2020-5-5 14:09:25 | 显示全部楼层
支持楼主!
HA有毒,现在看到什么都在想能不能用esp8266接入到HA
E5-2650L-V2+华南X79+16GB*2
回复

使用道具 举报

3

主题

29

帖子

112

积分

注册会员

Rank: 2

积分
112
金钱
83
HASS币
0
发表于 2020-5-5 17:43:56 | 显示全部楼层
都是高手 看的 我发呆   。。。
回复

使用道具 举报

150

主题

2312

帖子

5110

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
5110
金钱
2788
HASS币
298

活跃会员教程狂人灌水之王

QQ
发表于 2020-5-6 02:29:31 | 显示全部楼层
这个操作 真的是很强!!!
回复

使用道具 举报

55

主题

730

帖子

2435

积分

金牌会员

Rank: 6Rank: 6

积分
2435
金钱
1700
HASS币
30
发表于 2020-5-6 08:53:59 | 显示全部楼层
动手能力很赞!干扰的原因可能是供电部分共用电源不干净造成的,可以尝试用另一路电源供电来测试是否依旧存在干扰来确定是否因电源导致的干扰现象,如果是,换个带耦合的降压模块就可以解决了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2020-6-7 04:31 , Processed in 0.129545 second(s), 38 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表