跳转到内容

设置 RMT 设备

在本指南中,我们将使用 ESPHome 设置一个红外设备。首先,我们将使用 IR 接收模块(如这个)捕获遥控代码。我们将使用 ESPHome 的转储功能直接输出解码的遥控代码。

然后,我们将使用红外 LED(如这个)设置一个新的遥控发射器,以在按下按钮时传输代码。

首先,将红外接收模块连接到开发板上的一个引脚,并设置一个 remote_receiver 实例:

remote_receiver:
pin: GPIOXX
dump: all

编译并上传代码。在查看 ESP 的日志输出时,按下您想要捕获的红外遥控器上的按钮(一次一个)。

您应该看到类似以下的日志输出:

# 如果编解码器已知:
[D][remote.panasonic] Received Panasonic: address=0x4004 command=0x8140DFA2
# 或者如果未知,则输出原始数据
# 数值可能会有一些波动,但只要相似就可以
[D][remote.raw] Received Raw: 4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
[D][remote.raw] -1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
[D][remote.raw] 1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022

如果编解码器已在 ESPHome 中实现,您将直接看到解码值 - 否则您将看到原始数据转储(同样可以使用)。您已成功捕获了第一个红外代码。

现在让我们使用这些信息来模拟 ESP 发出的按钮按下。首先,将 IR 二极管连接到 ESP 上的新引脚,并配置一个全局 remote_transmitter 实例:

remote_transmitter:
pin: GPIOXX
# 红外遥控器使用 50% 载波信号
carrier_duty_percent: 50%

这将允许我们通过 IR LED 发送任何我们想要的数据。要复制我们之前解码的代码,创建一个新的模板按钮,在触发时发送红外代码:

button:
- platform: template
name: Panasonic Power Button
on_press:
- remote_transmitter.transmit_panasonic:
address: 0x4004
command: 0x8140DFA2
# 或者对于原始代码
button:
- platform: template
name: Raw Code Power Button
on_press:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: [4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
-1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022]

再次编译,下次设备启动时,您将在前端看到一个新按钮。点击它,您应该看到遥控信号被发送。完成!

remote_transmitterremote_receiver 组件也可用于发送和接收 433MHz 射频 (RF) 信号。本指南将讨论设置 433MHz 接收器来捕获设备的遥控代码。之后我们将设置一个 433MHz 发射器,通过前端按钮按下来复制遥控代码。

首先,将 RF 模块连接到 ESP 上的一个引脚,并设置一个 remote_receiver 实例:

remote_receiver:
pin: GPIOXX
dump: all
# 优化 RF 设备识别的设置
tolerance: 50%
filter: 250us
idle: 4ms
buffer_size: 2kb # 仅适用于 ESP8266

编译并上传代码。在查看 ESP 的日志输出时,按下您想要捕获的 RF 遥控器上的按钮(一次一个)。

您应该看到类似以下的日志输出:

# 如果编解码器已知:
[D][remote.rc_switch] Received RCSwitch: protocol=2 data='100010000000000010111110'
# 或者如果未知,则输出原始数据
# 数值可能会有一些波动,但只要相似就可以
[D][remote.raw] Received Raw: 4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
[D][remote.raw] -1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
[D][remote.raw] 1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022

NOTE

如果日志输出被 “Received Raw” 消息淹没,您也可以禁用原始遥控代码报告,依靠 rc_switch 来解码值。

remote_receiver:
pin: GPIOXX
dump:
- rc_switch
...

如果编解码器已在 ESPHome 中实现,您将直接看到解码值 - 否则您将看到原始数据转储(同样可以使用)。您已成功捕获了第一个 RF 代码。

现在让我们使用这些信息来模拟 ESP 发出的按钮按下。首先,将 RF 发射器连接到 ESP 上的新引脚,并配置一个全局 remote_transmitter 实例:

remote_transmitter:
pin: GPIOXX
# RF 使用 100% 载波信号
carrier_duty_percent: 100%

这将允许我们通过 RF 发射器发送任何我们想要的数据。要复制我们之前解码的代码,创建一个新的模板按钮,在触发时发送 RF 代码:

button:
- platform: template
name: RF Power Button
optimistic: true
on_press:
- remote_transmitter.transmit_rc_switch_raw:
code: '100010000000000010111110'
protocol: 2
repeat:
times: 10
wait_time: 0s
# 或者对于原始代码
button:
- platform: template
name: Raw Code Power Button
on_press:
- remote_transmitter.transmit_raw:
code: [4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
-1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022]

再次编译,下次设备启动时,您将在前端看到一个新按钮。点击它,您应该看到遥控信号被发送。完成!

NOTE

某些设备要求重复传输的代码才能被识别为有效信号。此外,重复之间的间隔也可能很重要。请检查遥控器和发射器节点之间的重复日志节奏是否一致。您可以相应地调整 repeat: 设置。