需求主要是我只有一个显示器,电脑,xbox,安卓盒子切换太麻烦了,还要拔线,于是买了这个切换器。三进一出。
品牌 山泽 塑料感及强。
好了,现在开始改造了,
上面只有3个LED灯,显示在输出为哪一个。一个轻触开关,按一下切换输入
万用表量了一下,LED灯电压2.1V刚好可以驱动ESP8266的gpio为 高电平。
轻触按钮就是给一个引脚低电平。了解了,开始焊接,在3个LED灯接一根线接到ESP8266上面,我接的是led1---gpio5,led2---gpio14,led3---gpio12,轻触开关的一个脚接入GPIO15,板子上一个没焊接的电源接口,可以用来窃取HDMI的5V电压,可以用来给ESP8266供电。我这里是接了一个5V转3.3v的模块,然后给esp供电的
然后编译固件
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;
最后效果就是这样子了,单击按钮可以切换到想要的屏幕,也可以单击切换一个一个切换
不足:一个非常坑爹的地方,折腾了整整一天。HDMI如果设置了1080P ,60HZ 以上参数的时候,会对2.4G有强烈干扰。导致无法连接wifi,一直没找到原因,我换了3块esp8266板子,换了GPIO引脚。换了HDMI线。始终没找到问题。直到我发现切换到安卓盒子的时候wifi就连上了。最后把xbox和电脑从2K分辨率调整到1080P.50hz所有的解决了。围绕干扰问题,最后在切换器上面贴铝箔。线上面缠绕铝箔做屏蔽,都解决不了。网上看有人说设计电路板的时候wifi芯片离hdmi要5cm以上,我延长了线还是无法解决干扰问题。看样子智能1080P凑合用了
|