设置 RMT 设备

设置红外线设备

在本指南中,将使用 ESPHome 设置一个红外线设备。首先,将使用红外线接收模块(如这个)捕获遥控器代码。我们将使用 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 模拟一个按钮按下。首先,将红外二极管连接到 ESP 上的一个新引脚,并配置一个全局 remote_transmitter 实例:

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

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

button:
  - platform: template
    name: Panasonic 电源按钮
    on_press:
      - remote_transmitter.transmit_panasonic:
          address: 0x4004
          command: 0x8140DFA2

# 或者对于原始代码
button:
  - platform: template
    name: 原始代码电源按钮
    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 发射器以在用户在前端按下按钮时复制遥控器代码。

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

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

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

您应该看到如下日志输出:

# 如果编解码器已知:
[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 中实现,您将直接看到解码的值——否则您将看到原始数据转储(您同样可以使用)。您已经成功捕获了第一个射频代码。

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

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

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

button:
  - platform: template
    name: 射频电源按钮
    optimistic: true
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '100010000000000010111110'
          protocol: 2
          repeat:
            times: 10
            wait_time: 0s

# 或者对于原始代码
button:
  - platform: template
    name: 原始代码电源按钮
    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: 设置。

参考资料见