XIAO IR Mate 智能红外遥控器入门指南(适用于 Home Assistant)
欢迎使用 XIAO IR Mate 智能红外遥控器!该设备专为 Home Assistant 用户设计,旨在提供无缝、高效且集成的智能红外遥控解决方案。通过本指南,您将学习如何设置设备、将其连接到家庭网络、集成到 Home Assistant 中,并释放其全部潜力,从基本信号学习到高级智能空调控制。

介绍
XIAO IR Mate 是一款基于 Seeed Studio XIAO ESP32-C3 的紧凑型智能红外模块。它集成了红外发射和接收、触摸感应、振动反馈和状态指示功能。通过 Wi-Fi 连接,可以完美集成到您的 Home Assistant 智能家居生态系统中。其核心使命是让所有使用红外遥控器的传统家电(如电视、空调、风扇等)变得"智能",并允许您通过 HA 控制它们进行自动化。






- 与 Home Assistant 无缝集成
基于 ESPHome 平台构建,IR Mate 可被 Home Assistant 自动发现,提供简单的实体以便轻松进行自动化和脚本编写。
- 强大的红外学习和发射功能
配备三个高功率红外发射器,实现 360° 覆盖,以及高灵敏度接收器。支持从标准遥控器学习多达 10 个红外命令(例如,控制投影仪、空调、定时器),可在 Home Assistant 中一键回放。
- 直观的物理交互反馈
配备振动马达和 LED 指示器。短振动确认操作,长振动表示学习模式,LED 显示网络状态,简化设置和故障排除。
- 可升级为狂热智能空调控制器
刷入自定义固件可将 IR Mate 转换为智能空调遥控器。直接在 Home Assistant 中设置精确的温度、模式和风扇速度,具有自动红外代码生成功能,无需重复学习。
- 紧凑设计,USB-C 供电
硬件概述
了解设备的基本组件将帮助您更好地使用它:
- 主控制器:Seeed Studio XIAO ESP32-C3,提供强大的性能和Wi-Fi连接。
- 电源供应:通过板载Type-C端口供电(5V)。
- 红外发射器:3个高功率红外LED(使用引脚D1),确保360°信号传输无盲区。
- 红外接收器:1个高精度红外接收器(使用引脚D2),用于学习其他遥控器的信号。
- 触摸传感器:设备集成了触摸模块(使用引脚D3)。单次触摸会触发短暂振动(0.5秒)作为操作反馈。
- 振动马达:内置振动马达(使用引脚D4)提供清晰的触觉反馈,具有不同的振动持续时间。
- 状态指示LED:LED灯(使用引脚D5)用于指示设备的不同工作状态。
- 复位按钮:设备上的物理按钮(连接到引脚D0),用于重启或恢复出厂设置。
首次使用和网络配置(出厂固件)
当您首次获得设备时,请按照以下步骤完成初始设置。
步骤1:开机
使用标准USB Type-C线缆为设备供电。启动后,设备将进入等待配置状态,您将看到白色LED以1Hz频率闪烁。
步骤2:进入AP配网模式
当网络未配置时,设备将自动创建一个名为XIAO IR Mate(或Seeed_ir,取决于您找到的名称)的Wi-Fi热点(AP)。

步骤3:连接热点并配置网络
- 在您的手机或电脑上打开Wi-Fi设置,搜索并连接名为XIAO IR Mate的网络。
热点的默认网络密码为'12345678'。
- 连接成功后,您的设备通常会自动打开配置页面。如果没有,请手动打开浏览器并访问**http://192.168.4.1**。
- 在此页面上,您将看到Wi-Fi网络列表。请选择您家的**2.4GHz Wi-Fi网络(SSID)**并输入正确的密码。
- 点击"Connect"或"Save"。设备将尝试连接到您提供的Wi-Fi网络。

步骤4:连接成功
一旦设备成功连接到您的家庭Wi-Fi,AP热点将自动关闭,状态指示灯将变为常亮。网络配置现已完成。

Home Assistant集成(出厂固件)
设备固件基于ESPHome,使其非常容易集成到Home Assistant中。
- 自动发现:确保您的Home Assistant主机和XIAO IR Mate连接到同一本地网络。通常,HA会自动发现新的ESPHome设备。您将在设置 > 设备和服务中看到"发现新设备"的通知。
- 手动添加:如果未自动发现,您可以点击右下角的**[添加集成]按钮,搜索"ESPHome"**,然后输入设备的主机名(例如,xiao-ir-mate)或IP地址来手动添加。




- 设备仪表板:成功添加后,XIAO IR Mate将作为设备出现在HA中。其仪表板将包含以下实体,用于控制10个不同的红外信号:

核心功能详情(出厂固件)
如果您想恢复设备或更新其固件,可以通过下面的按钮跳转。我们已经创建了一个专门用于 XIAO Gadget 直接刷写固件的页面。
红外信号学习
当您需要教 IR Mate 学习新的遥控器命令时,请按照以下步骤操作。出厂固件的核心界面包括一个信号槽选择列表,以及学习和发送按钮。
- 在 Home Assistant 设备仪表板中,首先找到名为**"Signal"**的下拉选择列表。
- 点击下拉列表并选择您想要使用的信号槽,例如**"signal_1"**。
- 选择后,找到**"Learn"按钮并点击旁边的"PRESS"**。
- XIAO IR Mate 现在将进入学习模式并开始持续振动,表示您可以开始配对。
- 将您的原始遥控器对准 IR Mate 的红外接收窗口,短按您想要学习的按钮。
- IR Mate 成功接收并记录信号后,振动将停止,表示学习成功。
- 此时,名为**"Is Learned Signal"**的状态指示器将自动变为"ON",表示下拉列表中当前选择的信号槽(即"signal_1")现在已存储了信号。
红外信号发送
一旦信号成功学习后,您可以随时发送它。
- 在**"Signal"下拉列表中,确保您已选择要发送的信号槽,例如"signal_1"**。
- 找到**"Send"按钮并点击旁边的"PRESS"**。
- XIAO IR Mate 将立即通过其 3 个红外发射器发送存储在当前选择槽中的信号。
- 注意:如果您在下拉列表中选择了从未学习过信号的信号槽,点击发送按钮将不会有任何效果。

物理交互与状态指示
除了HA控制外,您还可以通过物理交互来了解和控制设备。
状态指示灯(白色LED)
- 慢闪(1Hz):设备正在等待连接Wi-Fi网络。
- 常亮:设备已成功连接到Wi-Fi网络并正常运行。
振动反馈
- 短振动(100ms):用于一般操作确认,例如触摸设备时。
- 长振动(500ms):用于重要状态提醒,例如进入学习模式或执行恢复出厂设置时。
RESET按钮
- 短按(1秒内):设备将重启,伴随短振动。如果设备无响应,这非常有用。
- 长按(超过5秒):设备将执行恢复出厂设置。此操作将清除所有已保存的Wi-Fi凭据和所有10个已学习的红外信号。执行此操作时,设备将发出长振动作为提示。完成后,设备将重启并返回到初始等待配置状态(LED闪烁)。
高级用法 - 智能空调控制
出厂固件提供的基本"录制-重放"模式是通用的,但在控制像空调这样具有多种状态的设备(温度、模式、风速等)时可能会显得笨拙。为了实现更精细、更智能的空调控制,我们可以刷入专门的ESPHome固件,将XIAO IR Mate从"红外信号中继器"转变为真正的"智能空调控制器"。
在本章中,我们将以格力空调为详细示例,但这绝不是唯一选择。ESPHome强大的生态系统支持众多空调品牌,您可以轻松按照本指南中的概念,对配置代码进行微小更改,来实现对美的、大金、松下等其他品牌的智能控制。
核心优势
- 状态化控制:不再是简单的重放。您可以在HA中直接设置"24°C,制冷,自动风速",设备将立即生成并发送正确的红外命令。
- 更友好的UI:在HA中显示为标准的Climate卡片,操作直观。
- 节省空间:无需为每个温度或模式学习单独的信号;一个配置即可控制所有空调功能。
前提条件
- 安装ESPHome:如果您还没有安装,请从Home Assistant插件商店安装并启动ESPHome插件。
- 获取您的空调品牌协议:ESPHome支持许多空调品牌协议(如格力、美的、大金等)。您需要知道您的空调品牌以选择正确的协议。
刷入自定义固件
- 创建新设备配置
- 在HA中打开ESPHome界面。
- 点击右下角的**"+ NEW DEVICE"按钮,在弹出窗口中点击"Continue"**。
- 为您的设备命名(例如xiao-ir-ac-controller),然后选择板型为Seeed Studio XIAO ESP32C3。
- 编辑配置文件
- 点击新创建的设备卡片上的EDIT按钮进入YAML配置编辑器。
- 删除编辑器中的所有默认内容。
- 完整复制并粘贴下面的代码到编辑器中:
Details
substitutions:
name: "seeed-ir"
friendly_name: "格力空调控制器" # 您可以自定义一个更友好的名称
version: "v1"
esphome:
name: "${name}-${version}"
friendly_name: "${friendly_name}"
name_add_mac_suffix: True
esp32:
board: esp32-c3-devkitm-1
framework:
type: arduino
globals:
- id: is_wifi_connected
type: bool
initial_value: 'false'
- id: reset_press_time
type: uint32_t
initial_value: '0'
- id: touch_count
type: int
restore_value: no
initial_value: '0'
- id: touch_timer
type: unsigned long
restore_value: no
initial_value: '0'
logger:
level: INFO
api:
ota:
platform: esphome
password: "15afb09b5aba7b3d6a6ba01180c60df5" # 将此更改为您所需的密码
wifi:
# ssid: !secret wifi_ssid
# password: !secret wifi_password
on_connect:
- globals.set: {id: is_wifi_connected, value: 'true'}
- light.turn_on: rgb_light
on_disconnect:
- globals.set: {id: is_wifi_connected, value: 'false'}
ap:
password: "12345678"
captive_portal:
remote_transmitter:
id: default_ir_transmitter
pin: GPIO3
carrier_duty_percent: 50%
rmt_channel: 0
remote_receiver:
id: default_ir_receiver
pin:
number: GPIO4
inverted: true
rmt_channel: 2
dump: raw # 保留用于学习或调试其他红外代码
# 格力气候控制
climate:
- platform: gree
name: "格力空调" # 在Home Assistant中显示的名称
id: gree_ac # ESPHome使用的内部ID,用于触摸按钮控制
# --- gree平台的必需配置 ---
model: "yan" # [重要] 这是一个必需参数。格力有多种红外协议。
# 您可能需要尝试以下值来找到适合您空调的值:
# "generic", "yan", "yaa", "yac", "yac1fb9", "yx1ff", "yag"
# "yan"是一个常见的起点。
# 可选配置:
# sensor: my_temperature_sensor_id # 如果您有外部温度传感器
supports_cool: true
supports_heat: true # 如果您的格力空调不支持制热,请设置为false
# 注意:根据文档,gree平台似乎不支持receiver_id来从原始遥控器同步状态
binary_sensor:
- platform: gpio
id: touch_pad
pin:
number: GPIO5
mode: INPUT_PULLDOWN
on_state:
then:
- if:
condition:
binary_sensor.is_on: touch_pad
then:
- script.execute: vibe_short
- lambda: |-
unsigned long current_time = millis();
if (current_time - id(touch_timer) < 300) {
id(touch_count)++;
} else {
id(touch_count) = 1;
}
id(touch_timer) = current_time;
ESP_LOGD("touch_pad", "检测到触摸。当前计数:%d", id(touch_count));
if (id(check_touch_actions_script).is_running()) {
id(check_touch_actions_script).stop();
}
id(check_touch_actions_script).execute();
- platform: gpio
id: reset_button
pin:
number: GPIO9 # 绑定引脚!
mode: INPUT_PULLUP
filters:
- invert
on_press:
then:
- lambda: id(reset_press_time) = millis();
on_release:
then:
- lambda: |-
uint32_t press_duration = millis() - id(reset_press_time);
if (press_duration < 5000) {
id(vibe_short).execute();
ESP_LOGI("reset_button", "短按:重启设备。");
ESP.restart();
} else {
id(vibe_long).execute();
ESP_LOGI("reset_button", "长按:激活恢复出厂设置。");
id(factory_reset_switch).turn_on();
}
output:
- platform: gpio
id: vibration_output
pin: GPIO6
switch:
- platform: output
id: vibration_switch
name: "振动马达"
output: vibration_output
- platform: factory_reset
id: factory_reset_switch
name: "恢复出厂设置"
light:
- platform: esp32_rmt_led_strip
rgb_order: GRB
pin: GPIO7
num_leds: 1
rmt_channel: 1
chipset: ws2812
name: "RGB状态灯"
id: rgb_light
default_transition_length: 0s
on_turn_on:
- light.control:
id: rgb_light
red: 1.0
green: 1.0
blue: 1.0
brightness: 0.7
effects:
- addressable_scan:
- addressable_rainbow:
script:
- id: vibe_short
then:
- switch.turn_on: vibration_switch
- delay: 100ms
- switch.turn_off: vibration_switch
- id: vibe_long
then:
- switch.turn_on: vibration_switch
- delay: 500ms
- switch.turn_off: vibration_switch
- id: check_touch_actions_script
mode: restart
then:
- delay: 350ms
- if: # 单击动作
condition:
lambda: 'return id(touch_count) == 1;'
then:
- logger.log: "单击:切换格力空调电源"
- lambda: |-
// [重要] 确保下面使用的气候ID是gree_ac
if (id(gree_ac).mode == climate::CLIMATE_MODE_OFF) {
ESP_LOGD("touch_action", "格力空调已关闭,尝试切换到制冷模式。");
auto call = id(gree_ac).make_call();
call.set_mode(climate::CLIMATE_MODE_COOL);
call.set_target_temperature(25);
call.perform();
} else {
ESP_LOGD("touch_action", "格力空调已开启,尝试关闭。");
auto call = id(gree_ac).make_call();
call.set_mode(climate::CLIMATE_MODE_OFF);
call.perform();
}
else: # 如果不是单击,则检查双击
- if:
condition:
lambda: 'return id(touch_count) == 2;'
then: # 双击动作
- logger.log: "双击:格力空调温度升高"
- lambda: |-
// [重要] 确保下面使用的气候ID是gree_ac
if (id(gree_ac).mode != climate::CLIMATE_MODE_OFF) {
float current_temp = id(gree_ac).target_temperature;
float max_temp = id(gree_ac).get_traits().get_visual_max_temperature();
if (current_temp < max_temp) {
ESP_LOGD("touch_action", "格力空调温度从%.1f升高到%.1f", current_temp, current_temp + 1.0f);
auto call = id(gree_ac).make_call();
call.set_target_temperature(current_temp + 1.0f);
call.perform();
} else {
ESP_LOGD("touch_action", "格力空调已达到最高温度:%.1f", max_temp);
}
}
else: # 如果不是双击,则检查三击
- if:
condition:
lambda: 'return id(touch_count) == 3;'
then: # 三击动作
- logger.log: "三击:格力空调温度降低"
- lambda: |-
// [重要] 确保下面使用的气候ID是gree_ac
if (id(gree_ac).mode != climate::CLIMATE_MODE_OFF) {
float current_temp = id(gree_ac).target_temperature;
float min_temp = id(gree_ac).get_traits().get_visual_min_temperature();
if (current_temp > min_temp) {
ESP_LOGD("touch_action", "格力空调温度从%.1f降低到%.1f", current_temp, current_temp - 1.0f);
auto call = id(gree_ac).make_call();
call.set_target_temperature(current_temp - 1.0f);
call.perform();
} else {
ESP_LOGD("touch_action", "格力空调已达到最低温度:%.1f", min_temp);
}
}
else: # 其他点击次数
- logger.log:
level: WARN
format: "触摸动作:未为%d次点击定义特定动作。"
args: ['id(touch_count)']
# 重置触摸计数
- lambda: 'id(touch_count) = 0; ESP_LOGD("check_touch_actions", "触摸计数重置为0。");'
interval:
- id: blink_rgb_interval
interval: 500ms
then:
- if:
condition:
lambda: 'return !id(is_wifi_connected);'
then:
- lambda: |-
static bool intervalos_led_state = false;
intervalos_led_state = !intervalos_led_state;
auto call = id(rgb_light).turn_on();
if (intervalos_led_state) {
call.set_rgb(0, 0, 1);
call.set_brightness(0.5);
} else {
call.set_rgb(0, 0, 0); // 关闭
}
call.perform();
- 自定义您的配置
- Wi-Fi:如果您不使用
!secret
文件,请取消注释wifi:
部分,并将Your_WiFi_SSID
和Your_WiFi_Password
替换为您自己的 Wi-Fi 信息。 - 选择正确的空调协议:这是最关键的步骤!示例使用
platform: gree
。如果您的空调不是格力品牌,请将其替换为您品牌的平台。如何找到支持的品牌?请访问 ESPHome Climate Components 页面,该页面列出了所有支持的品牌及其平台名称(例如daikin
、midea
、panasonic_ac
等)。- 选择相应平台后,您可能还需要根据该平台的文档微调
model
或支持的模式等参数。
- 选择相应平台后,您可能还需要根据该平台的文档微调
- Wi-Fi:如果您不使用
- 编译和烧录
- 保存您的 YAML 配置。
- 通过 USB 线将您的 XIAO IR Mate 连接到运行 HA 的计算机。
- 点击设备卡片上的 INSTALL 按钮。
- 选择 "Plug into this computer" 选项。
- ESPHome 将编译固件并通过浏览器将其烧录到您的设备。按照屏幕提示完成该过程。
- 烧录成功后,设备将自动重启并连接到您配置的 Wi-Fi。
在 Home Assistant 中使用
烧录和重启后,您的设备将在 Home Assistant 中显示为新的 Climate 实体(例如 climate.gree_air_conditioner
)。您可以在仪表板中添加"恒温器卡片"以获得功能齐全的空调控制面板,让您可以自由调节温度、模式、风速和摆风,就像原生智能空调一样!
进一步展望:开拓您的思路!
恭喜!到现在为止,您已经掌握了 XIAO IR Mate 的两个核心用途:一个是开箱即用的"万能遥控学习"功能,另一个是用于精确空调控制的"专业气候控制器"模式。
但不要止步于此,因为这只是开始!XIAO IR Mate 的真正乐趣在于其令人难以置信的灵活性。将其视为由您定义的"创意积木",您可以用它构建远超想象的东西。以下是两个开拓思路的想法来启发您:
想法 1:将旧遥控器复活为万能场景开关
应用场景
看看您周围。您是否有很多闲置的旧遥控器?旧电视、DVD 或音响的遥控器,有很多按钮和很好的手感,现在只是在抽屉里积灰。如果您能使用这些遥控器上的按钮来控制智能灯、扫地机器人,甚至复杂的"回家"场景,那不是很酷吗?
工作原理
这个想法的核心是将 XIAO IR Mate 从"发射器"转变为"监听器"。它不再主动控制其他设备,而是静静地监听来自任何旧遥控器的信号,然后告诉 Home Assistant:"我听到了一个信号,您决定做什么!"
-
实施步骤
-
配置"监听器"固件: 在您的 ESPHome 固件中,核心配置是
remote_receiver
组件。设备开机后的唯一工作就是"监听"红外信号。 -
识别每个按钮的"密码": 拿起一个旧遥控器,指向设备按任意按钮。在 ESPHome 日志中,您将看到按钮的唯一红外代码(如一串
RAW
数据或NEC
协议代码)。记下这个"密码"。 -
在 HA 中创建自动化规则: 在 Home Assistant 中,设置一个自动化,触发条件为:"当 XIAO IR Mate 检测到特定红外密码时。"
-
定义动作: 规则的动作可以是任何事情!例如:
-
当检测到 电视遥控器的"音量 +"按钮 -> 启动扫地机器人 开始清洁。
-
当检测到 Apple Remote 的"播放"按钮 -> 打开浴室灯。
-
当检测到 DVD 遥控器的"红色"按钮 -> 执行"离家模式"场景。
-
-
-
这种方法的优势
-
升级改造和环保: 为闲置硬件注入新生命,让电子垃圾重新发挥作用,既省钱又环保。
-
真实的触觉按钮体验: 与触摸屏相比,具有数十个不同、手感扎实按钮的物理遥控器在许多场景中更直接、更令人满意。
-
高妻子接受因子 (WAF): 对于不习惯手机应用或智能音箱的家庭成员(如老人或儿童),告诉他们"按这个按钮开灯"是最直观、最容易学习的交互方式。
-
不需要充电的"智能开关": 传统遥控器的电池通常可以使用一两年,这比许多需要频繁充电的智能设备方便得多。
-
想法 2:创建万能"IoT 魔法按钮"
核心概念
设备上的触摸按钮真的只能用来控制红外吗?当然不是!我们可以将其变成控制您家中 任何东西 的魔法按钮。关键是"解耦"——完全分离"按下按钮"的物理动作和"实际发生什么"的智能动作。
-
实施步骤
-
让按钮只做"报告者": 在固件中,配置触摸按钮(单击、双击、长按)不执行任何特定任务,只向 Home Assistant 发送"事件通知"。例如,双击时,它只向 HA 报告:"嘿!我被双击了!"
-
让 HA 成为"指挥官": 在 Home Assistant 中,创建专门监听按钮这些各种"报告"(事件)的自动化。
-
连接一切,做任何事: 一旦 HA 收到报告,它就可以命令您家中的任何设备执行动作!
-
收到 "单击" 报告 -> 切换房屋中所有 Zigbee 灯 的开/关状态。
-
收到 "双击" 报告 -> 命令 扫地机器人 开始清洁。
-
-
-
接收到**"长按"**报告 -> 执行"电影模式"场景,关闭窗帘,调暗灯光,并打开投影仪和音响系统。
-
这种方法的优势
-
打破边界,无限可能: 您的触摸按钮不再只是"红外遥控器"的一部分,而是整个智能家居的物理开关,能够控制连接到 HA 的任何设备。
-
灵活定义,随心改变: 今天双击启动吸尘器,但明天您想让它播放音乐?只需在 HA 界面中编辑自动化,完全不需要触碰固件。
-
最直观的交互: 为您的家人提供最简单的控制方式。带有触觉反馈的物理按钮通常比打开手机应用程序更方便、更优雅。
-
简而言之,不要只把 XIAO IR Mate 看作红外工具。把它想象成一个连接到 Wi-Fi 的迷你机器人,具有触觉和"声音"(红外发射器)。它能做什么只受您的想象力限制!
常见问题 (FAQ)
问:为什么我在手机上找不到 XIAO IR Mate 的热点? 答: 请确认设备通过 Type-C 正常供电。检查白色 LED 是否闪烁。如果指示灯熄灭,请尝试更换线缆或电源。如果设备之前已成功配置网络,除非网络连接失败或通过长按 RESET 按钮恢复出厂设置,否则不会再次创建 AP 热点。
问:红外学习失败怎么办?(出厂固件) 答: 请确保您的原装遥控器电池电量充足,并尽可能靠近 IR Mate 的接收器(通常是黑色半透明组件)。同时,避免在强光下或其他红外干扰源附近进行学习过程。
问:设备在 HA 中显示为离线? 答: 请检查您的家庭 Wi-Fi 是否正常工作,以及 IR Mate 是否在 Wi-Fi 信号范围内。您可以尝试短按 RESET 按钮重启设备。
问:刷入自定义固件后,如何恢复出厂固件? 答: 您需要获取出厂固件的
.bin
文件或其 ESPHome YAML 源文件,然后通过 ESPHome 再次刷入以覆盖自定义固件。
问:如何在自动化中使用学习的信号(出厂固件)或空调控制(高级固件)? 答: 在 HA 的自动化或脚本编辑器中,选择"调用服务"。
资源
技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。