之前就发过一个改装这款红外遥控器的文章了. 文末有提到这个红外控制器还有几个悬空的GPIO引脚. 可以通过飞线的方式把这几个引脚接到射频模块上, 打造成一个集红外和射频为一身的"全能遥控器". 实际操作下来, 确实是可行的.
首先看一看大佬抄板给出的原理图:
可以看到GPIO 2和GPIO 13都是空置的, 其中GPIO 2还有一个上拉电阻. 另外3.3V和5V也是在板上有相应的引脚的. 用这些引脚驱动一个射频模块是足够的了.
这里补一张背面的图
如下图把杜邦线焊接上去, 把模块插上就行. 因为是触点而不是过孔的焊盘, 所以比较难焊.
这里的GPIO 2和GPIO 13怎么选呢? 说实话我也不太清楚. 以前上学的时候倒是有说过一些管脚需要做上拉下拉的操作, 奈何本来就学的不明白, 现在更是忘干净了. 总之这里我接的是 GPIO 13/5V/GND三个引脚就是了
这里补一张焊接好的图
焊好之后, 用ESPHome的remote_transmitter
组件即可驱动433射频模块
# 其它代码
remote_transmitter:
- id: rc_transmitter
pin: 13
carrier_duty_percent: 100%
# 其它代码
button:
- platform: template
name: Send RC1
id: send_rc1
# friendly_name : 射频开关1
# Optional variables:
icon: "mdi:radio-tower"
web_server:
sorting_weight: 2
on_press:
- remote_transmitter.transmit_rc_switch_raw:
code: '000111011100110110100100'
repeat:
times: 10
wait_time: 0ms
protocol:
#The pulse length of the protocol - how many microseconds one pulse should last for.
pulse_length: 320
- platform: template
name: Send RC2
id: send_rc2
# friendly_name : 射频开关2
# Optional variables:
icon: "mdi:radio-tower"
web_server:
sorting_weight: 2
on_press:
- remote_transmitter.transmit_rc_switch_raw:
code: '011111000101101001100100'
repeat:
times: 10
wait_time: 0ms
protocol:
#The pulse length of the protocol - how many microseconds one pulse should last for.
pulse_length: 100
remote_transmitter
组件除了能驱动433射频模块之外, 还能驱动红外发射管. 所以可以基于这个组件进一步改装红外遥控的源码, 减少对外部库的依赖, 可以让代码更简洁.
但是remote_transmitter
也不是能完全取代IRremoteESP8266
的. 我看了又看, 似乎这个组件没法实现原来代码里dump出红外信号的能力. 它要嘛dump出raw信号, 要嘛就只能给每一个协议做一个事件钩子. 没法实现下面所示的一行代码既输出value又输出协议类型的功能:
if (results.overflow) ESP_LOGW("ir_dump", "Buffer is full");
ESP_LOGI("ir_dump", "-> value = %s addr = %d command = %d decode_type = %d",
uint64ToString(results.value, HEX),
results.address,
results.command,
results.decode_type
);