IRXmitter红外发射器扩展
IRXmitter 红外发射器扩展,让您的手机成为万能遥控器。
下载和安装
开发动机
我的电视遥控器总是藏得很隐蔽,但是要找到我的智能手机就容易多了。如果需要,我可以呼叫它,它会发出声音应答。可惜我的电视(Metz设备)没有可以发送合适红外代码的应用程序 :-(。有了这个MIT App Inventor扩展,我可以轻松地自己开发一个合适的应用程序。
功能概述
IRXmitter扩展是一个Android类ConsumerIrManager的包装器,用于发送红外信号控制家电设备:
- 发送单个红外信号包
- 支持自动重复发送
- 支持交替模式发送(适用于开关功能)
- 可配置载波频率和时序参数
- 支持按钮自动注册功能
- 提供完整的事件处理机制
使用原理
扩展设计的目标是尽可能减少在AI2积木中的工作量。在可视化编程中,积木中复杂的逻辑很快会导致应用程序混乱。我希望避免这种情况。
数据包模式
要发送的IR代码由一个数字列表表示,每个数字交替表示Mark(以设定频率发送IR信号)和Space(信号之间的暂停)的持续时间,单位为微秒。代码总是以Mark开始。

属性
- 具有红外发射器
- 指示设备是否具有红外发射器。返回值为
true或false。如果设备没有红外发射器,所有其他功能都会导致错误。 - 载波频率列表
- 以逗号分隔的字符串形式返回支持的载波频率。只有这些频率可以分配给
CarrierFrequency属性。 - 载波频率列表
- 以逗号分隔的列表形式返回支持的载波频率。
- 载波频率
- 设置或获取要使用的载波频率,单位为赫兹(Hz)。默认值为38,000(38 kHz)。只能设置
CarrierFrequencies或CarrierFrequencyList显示的值。如果指定了不支持的值,会触发Screen.ErrorOccurred事件,错误代码17302。 - 启动延迟
- 在自动重复模式下,
StartDelay定义第一个数据包和后续数据包之间的暂停时间,单位为毫秒(ms)。有效值为0..1000。默认值为500ms。如果指定了不支持的值,会触发Screen.ErrorOccurred事件,错误代码17308。 - 重复延迟
RepetitionDelay指定自动重复模式下后续数据包之间的暂停时间,单位为毫秒(ms)。有效值为0..1000。默认值为500ms。如果指定了不支持的值,会触发Screen.ErrorOccurred事件,错误代码17309。- 传输完成事件延迟
- 发送单个数据包后,
TransmitDone事件的(额外)延迟时间,单位为毫秒。有效值为0..1000。默认值为0ms。
方法
- 发送(模式)
- 发送单个数据包。
Pattern是要发送的交替开关模式,单位为微秒。
此方法是同步的;当它返回时,模式已经传输完成。传输完成后,会触发PatternXmitted和TransmitDone事件。
Pattern可以是逗号分隔的整数列表字符串(如”300, 800, 300, …“)或整数列表。内部调用Android方法ConsumerIrManager.transmit()。
不支持嵌套传输。如果另一个传输已经激活(由重复方法之一触发),会触发Screen.ErrorOccurred事件,错误代码17305。如果Pattern无法转换为整数数组,会触发Screen.ErrorOccurred事件,错误代码17303。
- 重复发送(重复次数,模式)
- 多次发送数据包。
Repetitions是重复次数,-1表示无限发送,直到调用StopTransmission。Pattern是要发送的交替开关模式,单位为微秒。
传输是异步的,方法立即返回。每次发送数据包后会触发PatternXmitted事件。传输完成或取消后会触发TransmitDone事件。
- 交替重复发送(重复次数,模式,交替模式)
- 发送一个起始数据包,然后多次发送后续数据包。
Repetitions是后续数据包的重复次数,-1表示无限发送。Pattern是起始数据包,AltPattern是后续数据包。
传输是异步的,方法立即返回。每次发送数据包后会触发PatternXmitted事件。传输完成或取消后会触发TransmitDone事件。
- 停止传输()
- 停止重复传输。序列在一个数据包完全传输完成或当前暂停时间到期后中止。单个数据包或暂停不会被中断。
- 注册按钮单次模式(按钮,模式)
- 将指定的
Button组件注册为自动单次数据包传输。Button.TouchDown运行指定Pattern的Transmit方法。

- 注册按钮重复模式(按钮,模式)
- 将指定的
Button组件注册为带重复的自动数据包传输。Button.TouchDown运行指定Pattern的RepeatedTransmit方法。在Button.TouchUp时执行StopTransmission。 - 注册按钮交替重复模式(按钮,模式,交替模式)
- 将指定的
Button组件注册为带重复的自动数据包传输。Button.TouchDown运行指定Pattern和AltPattern的RepeatedAlternateTransmit方法。在Button.TouchUp时执行StopTransmission。
事件
- 模式已发送()
- 每个数据包发送后触发
PatternXmitted事件。 - 传输完成()
- 当传输序列停止或中断时触发此事件。发送单个数据包时,可以选择延迟触发此事件(参见
EventTransmitDoneDelay属性)。 - 发生错误(错误信息)
- 扩展使用错误时发生错误的消息。没有用户可以响应的错误,因此错误通过中央错误事件触发。
使用示例
Metz电视遥控器
一个小示例应用展示了扩展的使用(参见下载)。它模拟Metz RM18遥控器。
| 原装遥控器 | 应用界面 |
|---|---|
![]() |
![]() |
应用核心的必要代码很长,因为有很多按钮要控制,但结构非常简单:

红外代码录制

为了录制红外代码,我将红外接收器连接到Arduino。需要注意的是接收器必须为正确的载波频率设计。
录制红外代码的程序基于Ken Shirriff的IRremote库的IRrecord示例。为了为扩展提供代码序列,我调整了程序。
经过初步尝试,我发现遥控器使用以下信号长度:
- MARK: 400 μs, 800μs
- SPACE: 1000 μs, 1700 μs, 2400 μs
代码会考虑这些因素并尝试将时间映射到这些值(可以关闭)。你会得到这样的输出:
800,2400,400,1000,400,1000,400,1700,400,1700,400,1000,400,1700,400,
1000,400,1700,400,1000,400,1000,400,1000,400,1700,400,1000,400,1700,400,
1000,400,1700,400,1700,400,1700,400,1000,400,1700,400,1000,400,1700,400
输出可以直接复制到扩展Transmit函数的Pattern属性中。
错误代码
| 代码 | 消息 | 含义 |
|---|---|---|
| 117301 | 载波频率不支持 | |
| 17302 | 设备没有红外发射器 | |
| 17303 | 无法将模式转换为整数 | Pattern参数包含不可转换的内容 |
| 17304 | 无法将模式转换为整数 | AltPattern参数包含不可转换的内容 |
| 17305 | 不允许嵌套传输 | |
| 17306 | 组件不是按钮 | 传递的组件不是Button类型 |
| 17307 | EventTransmitDoneDelay的值无效 | EventTransmitDoneDelay属性的值无效,值范围为0..1000 |
| 117308 | StartDelay的值无效 | StartDelay属性的值无效,值范围为0..1000 |
| 17309 | RepetitionDelay的值无效 | RepetitionDelay属性的值无效,值范围为0..1000 |
最佳实践
信号模式设计
- 准确计时: 确保Mark和Space的持续时间准确
- 频率匹配: 使用设备支持的载波频率
- 测试验证: 在实际设备上测试IR代码
应用开发
- 错误处理: 监听
ErrorOccurred事件 - 用户反馈: 使用事件提供视觉或听觉反馈
- 资源管理: 避免同时进行多个传输操作
兼容性考虑
- 检查设备是否支持红外发射
- 验证载波频率兼容性
- 测试不同品牌设备的兼容性
本文档基于Ulli的IRXmitter扩展原始文档整理而成,更多信息请参考原始文档。


扫码添加客服咨询