IRXmitter红外发射器扩展

« 返回首页 IoT专题

IRXmitter红外发射器扩展

IRXmitter 红外发射器扩展,让您的手机成为万能遥控器。

下载和安装

开发动机

我的电视遥控器总是藏得很隐蔽,但是要找到我的智能手机就容易多了。如果需要,我可以呼叫它,它会发出声音应答。可惜我的电视(Metz设备)没有可以发送合适红外代码的应用程序 :-(。有了这个MIT App Inventor扩展,我可以轻松地自己开发一个合适的应用程序。

功能概述

IRXmitter扩展是一个Android类ConsumerIrManager的包装器,用于发送红外信号控制家电设备:

  • 发送单个红外信号包
  • 支持自动重复发送
  • 支持交替模式发送(适用于开关功能)
  • 可配置载波频率和时序参数
  • 支持按钮自动注册功能
  • 提供完整的事件处理机制

使用原理

扩展设计的目标是尽可能减少在AI2积木中的工作量。在可视化编程中,积木中复杂的逻辑很快会导致应用程序混乱。我希望避免这种情况。

数据包模式

要发送的IR代码由一个数字列表表示,每个数字交替表示Mark(以设定频率发送IR信号)和Space(信号之间的暂停)的持续时间,单位为微秒。代码总是以Mark开始。

属性

具有红外发射器
指示设备是否具有红外发射器。返回值为truefalse。如果设备没有红外发射器,所有其他功能都会导致错误。
载波频率列表
以逗号分隔的字符串形式返回支持的载波频率。只有这些频率可以分配给CarrierFrequency属性。
载波频率列表
以逗号分隔的列表形式返回支持的载波频率。
载波频率
设置或获取要使用的载波频率,单位为赫兹(Hz)。默认值为38,000(38 kHz)。只能设置CarrierFrequenciesCarrierFrequencyList显示的值。如果指定了不支持的值,会触发Screen.ErrorOccurred事件,错误代码17302。
启动延迟
在自动重复模式下,StartDelay定义第一个数据包和后续数据包之间的暂停时间,单位为毫秒(ms)。有效值为0..1000。默认值为500ms。如果指定了不支持的值,会触发Screen.ErrorOccurred事件,错误代码17308。
重复延迟
RepetitionDelay指定自动重复模式下后续数据包之间的暂停时间,单位为毫秒(ms)。有效值为0..1000。默认值为500ms。如果指定了不支持的值,会触发Screen.ErrorOccurred事件,错误代码17309。
传输完成事件延迟
发送单个数据包后,TransmitDone事件的(额外)延迟时间,单位为毫秒。有效值为0..1000。默认值为0ms。

方法

发送(模式)
发送单个数据包。Pattern是要发送的交替开关模式,单位为微秒。

此方法是同步的;当它返回时,模式已经传输完成。传输完成后,会触发PatternXmittedTransmitDone事件。

Pattern可以是逗号分隔的整数列表字符串(如”300, 800, 300, …“)或整数列表。内部调用Android方法ConsumerIrManager.transmit()

不支持嵌套传输。如果另一个传输已经激活(由重复方法之一触发),会触发Screen.ErrorOccurred事件,错误代码17305。如果Pattern无法转换为整数数组,会触发Screen.ErrorOccurred事件,错误代码17303。

重复发送(重复次数,模式)
多次发送数据包。Repetitions是重复次数,-1表示无限发送,直到调用StopTransmissionPattern是要发送的交替开关模式,单位为微秒。

传输是异步的,方法立即返回。每次发送数据包后会触发PatternXmitted事件。传输完成或取消后会触发TransmitDone事件。

交替重复发送(重复次数,模式,交替模式)
发送一个起始数据包,然后多次发送后续数据包。Repetitions是后续数据包的重复次数,-1表示无限发送。Pattern是起始数据包,AltPattern是后续数据包。

传输是异步的,方法立即返回。每次发送数据包后会触发PatternXmitted事件。传输完成或取消后会触发TransmitDone事件。

停止传输()
停止重复传输。序列在一个数据包完全传输完成或当前暂停时间到期后中止。单个数据包或暂停不会被中断。
注册按钮单次模式(按钮,模式)
将指定的Button组件注册为自动单次数据包传输。Button.TouchDown运行指定PatternTransmit方法。

注册按钮重复模式(按钮,模式)
将指定的Button组件注册为带重复的自动数据包传输。Button.TouchDown运行指定PatternRepeatedTransmit方法。在Button.TouchUp时执行StopTransmission
注册按钮交替重复模式(按钮,模式,交替模式)
将指定的Button组件注册为带重复的自动数据包传输。Button.TouchDown运行指定PatternAltPatternRepeatedAlternateTransmit方法。在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

最佳实践

信号模式设计

  1. 准确计时: 确保Mark和Space的持续时间准确
  2. 频率匹配: 使用设备支持的载波频率
  3. 测试验证: 在实际设备上测试IR代码

应用开发

  1. 错误处理: 监听ErrorOccurred事件
  2. 用户反馈: 使用事件提供视觉或听觉反馈
  3. 资源管理: 避免同时进行多个传输操作

兼容性考虑

  • 检查设备是否支持红外发射
  • 验证载波频率兼容性
  • 测试不同品牌设备的兼容性

本文档基于Ulli的IRXmitter扩展原始文档整理而成,更多信息请参考原始文档

文档反馈