通过 iOS 上的耳机插孔获取开关控制输入

Get input of switch control via headphone jack on iOS

作为一个小假期项目,我想通过一个辅助功能开关控制一个应用程序,该开关通过 3.5 毫米耳机插孔连接到 iOS 设备。

这是开关和插头:

我的问题是,我不知道按下按钮时会触发哪种信号 - 我认为它的作用类似于耳机的遥控器。

有没有办法测量这个的输入,或者有人知道如何获得 iOS 上按钮的输入吗?

如果它是耳机插孔,你可以使用

来处理它
 override func remoteControlReceived(with event: UIEvent?) {}

并在其中切换 event?.type.subType 类似这样的东西。

override func remoteControlReceived(with event: UIEvent?) {
            if let e = event , e.type == .remoteControl {
                if  e.subtype == UIEventSubtype.remoteControlPause {
                // do something
                }else if(e.subtype == .remoteControlPlay){
                //do something else
                }else if(e.subtype == .remoteControlTogglePlayPause){
                // do something else
                }
            }
        }

Apple 带音量控制的有线 3.5 毫米耳机有 4 根导线。在你的照片中,我只看到 2 个导体。所以你的开关不能发送苹果自己的耳机远程命令——因为用于发送数据的麦克风环丢失了。 我猜你的开关只是让两个导体接触。

这是我会做的。

用万用表验证开关在打开和关闭位置的电阻。 我预计收盘时阻力很低或接近于零。

现在找一副带音量控制的(旧)Apple 3.5 毫米耳机。拆下耳机的音量控制并将辅助功能开关焊接到音量控制垫上。现在您的辅助功能开关模拟推动音量控制。

或者看看http://david.carne.ca/shuffle_hax/shuffle_remote.html

所以用一个微控制器来模拟耳机音量控制,用你的无障碍开关来控制微控制器。它看起来像一个有趣的项目 - 享受吧。

您的按钮是 "Big Buddy Button Switch," 由 AbleNet 为中度至重度上肢和运动障碍人士设计的按钮。它不能插入 IOS 设备,也不能插入任何移动平板电脑或 phone。

有一个 "Hook + Switch" 接口(目前为 185 美元)设计用于此按钮和 IOS 设备之间,允许将两个这样的按钮连接到闪电连接器。以这种方式连接时,可以检测到按下按钮并将其映射到使用苹果辅助功能设置的许多不同类型的 IOS 操作。这是一大笔钱,但由于新的 iphones 甚至没有音频插孔,它可能最终还是值得的。

您的按钮的 link 是 here

挂机+开关接口的link是here

Apple 关于辅助功能开关的 link 信息是 here

Big Buddy Button 是一种被动瞬时动作开关。附带的单声道 TS 插头在内部连接到瞬时动作常开开关,因此按下开关将使 TIP 与 SLEEVE 短路。

将此 TS 插头插入设计用于接收 TRRS 插头的 ios 设备将使 RING1 and RING2 and SLEEVE 短路即使没有按下按钮,它们也在一起,这不会完成任何有用的事情。按下按钮将进一步将 TIP 短接到 RING1 and RING2 and SLEEVE。如果直接插入 TS 插头,则无法从 ios 内部读取此类按钮按下。

如果您想拼凑出适用于许多移动设备的解决方案(例如,android),只需将 TS 插头替换为 TRRS 插头(或连接适配器)即可实现如下:

两个 Big Button 导体中的一个应该连接到 SLEEVE,它携带电源(对于微型phone)并且是内部感应音量变化和切换的电压源。另一个 Big Button 导体应连接到 RING2,这是两个耳塞通道和 microphone 的地线。 TIP 或 RING1 不应连接任何东西。

按下大按钮会使 Sleeve 暂时短路到 Ring2,这与按下耳机线上的开关相同。如果您想模拟音量增大或音量减小命令,您可以将一个电阻与按钮串联(音量减小 220 欧姆,音量增大 600 欧姆)。

iOS 设备的音频插孔电气连接与 Android 相同,但如果您想连接按钮并让它们成为现实,则必须克服额外的障碍在 iOS 内检测到。作为其 MFI(为 iPod/iPhone 制造)计划的一部分,Apple 在将任何设备插入音频插孔(或闪电连接器)时使用启动识别线性调频序列。您的设备内部必须装有正确的芯片(或模拟该芯片的行为),否则当您未能响应身份验证请求时,按钮控制界面将被禁用。该协议似乎随着时间的推移而发生了变化,因为适用于 phone 一种型号的售后市场产品并不总是适用于另一种型号。 Apple 内部人士表示,MFI 芯片包含一个序列号,Apple 可以在连接时读取该序列号。他们说逆向工程认证在今天有效,但 Apple 可以随时阻止它工作。

如果你想把这个设计成产品,可以申请MFI项目here

如果您只想制造少量设备,您将无法加入 MFI 计划。在那种情况下,您需要购买 Hook + Switch 接口(或类似的东西),否则您需要添加一个小型微处理器,如 Arduino 或 Teensy 来模拟身份验证 chirp,就像 David Carne 所做的那样 here.

如果您只想构建一个工作按钮,最简单的方法是使用现有的一对包含必要芯片的头phone,然后简单地将按钮线与 SLEEVE 和环2。如果我这样做,我会得到一根 TRRS 延长线并将 Big Buddy Button 电线拼接到延长线的正确两根电线上。只要将一对苹果认证的 headphone 插入扩展以提供身份验证,您的大按钮就应该可以工作。然后,您将像往常一样检测按钮按下(描述 here)。

EDIT: I tested connecting an accessory button to SLEEVE and RING2 of a TRRS extension cable that's plugged into the iPhone, and as long as a functioning headset is plugged into the extension cable, the accessory button does work. This way the accessory button ends up in parallel to the built-in button, without having to cut apart the headset.

您还有其他选择。例如,您可以构建一个电路,只要按下按钮,它就会在两个导体之间传输麦克风级别的音调。然后将该信号插入 SLEEVE 和 RING2 之间的 iOS 设备,然后编写一个 iOS 程序来收听声音并将其视为按下按钮。这种方法不需要 MFI 身份验证,并且现有的实用程序可以帮助您完成 90% 的工作。你可以找到一个例子 here

也可以在不注册 MFI 的情况下通过 BLE 连接到 iOS,并且由于 Apple Accessibility 包括使用蓝牙设备控制某些 iOS 功能的能力,您也许能够无需身份验证即可执行此操作。

显示大多数移动设备(包括iPhone)上 TRRS 连接器的连接示意图的图像是 here

为方便起见转载于此。

  • Function/Mic == 袖子
  • Common/Gnd == RING2
  • Right/R+ == RING1
  • Left/L+ ==提示