
1. 项目切入点与整体设计选择Part 1 做完我手里的 iPad 已经能通过音频口输出一段红外载波把 940nm 的红外发光管点亮。但坦白讲那时候离“能做日常遥控器”还很远亮归亮发送出来的信号接收端不认家里的电视、空调没有一个理它。到了 Part 2目标就很具体了把“发光”变成“发码”让 iPad 真正取代茶几上那三四个遥控器。也就是说要实现原遥控器信号的学习、识别、回放并管理一组可以随时增删的设备码库。1.1 从第1部分到第2部分目标从“能亮”变成“能控”红外遥控是生活里最容易被忽略但无处不在的协议。电视、空调、投影、风扇、机顶盒几乎全是红外。iPad 做遥控器一是屏幕足够大可以按设备展示全键盘不用来回翻找实体遥控器二是不受实体按键数量限制想加多少自定义按钮都行三是整个链路 DIY出了任何问题都能从底层查起。这种掌控感是成品智能遥控器给不了的也是我一直愿意把这套东西折腾下去的原因。第二部分的推进我按三条线走硬件线负责把发射电路和接收电路调稳软件线负责协议帧的构造、识别和回放应用线负责码库和 UI。三条线最后合并成一条完整链路。这么划分是有讲究的——红外遥控最大的变量不在硬件而在协议。同一台电视信号源切到 HDMI 和切到本地播放时遥控码可能完全不同空调遥控器更是各品牌“各自为政”有的帧长超过 100ms有的一个命令要发送好几个字节。如果一上来就先做界面很容易被协议细节拖到返工。先把协议链路验证通再补 UI反而是最快路径。这个项目适合两类人。一类是想把闲置 iPad 或老手机重新利用起来的硬件玩家另一类是想实打实理解红外遥控协议、接触音频波形处理的软件开发者。前者可以直接参考硬件电路和码库设计后者可以重点看协议实现和问题排查部分。两边不冲突本文尽量都覆盖到。1.2 方案选型为什么坚持音频口路线我最终依然采用音频口方案没有直接转投 ESP32WiFi 的桥接系统原因是 Part 1 已经在这条路上投了基础电路而且音频方案的优点很实际每一段载波都能直接在音频波形上看到调试时“所见即所得”。比如你发一个 NEC 逻辑 1示波器上能看到约 2.25ms 的载波包络再对应 0.56ms 的静音整个协议是透明的、可观察的。这对理解协议本身帮助很大尤其是第一次接触红外遥控的新手。当然音频方案也有明显的短板最大的问题是现代 iPad 大多只剩 USB-C 或 Lightning 口3.5mm 耳机孔已经没了必须借助外置音频适配器。适配器内部的 DAC 和滤波电路会对高频载波造成衰减这个坑我在 Part 2 里花了不少时间才摸透。后面第 2 章我会专门讲怎么选适配器、怎么绕开高频衰减这是所有用新 iPad 做音频口遥控器的人都绕不开的一关。2. 硬件电路搭建发射电路选型与参数计算2.1 从音频波形到红外光整条链路在做什么先把原理掰开揉碎讲清楚。红外遥控的本质是发射端用“载波数据”驱动 LED接收端用光电二极管和前置放大器把载波解调成数据脉冲。载波通常是 38kHz因为多数市售接收头比如 VS1838B、TSOP38238在 38kHz 附近灵敏度最高。数据位不是直接控制 LED 亮灭而是控制“载波是否出现以及持续多久”。举个例子NEC 协议里的逻辑 1LED 并不是连续亮 2.25ms而是以 38kHz 频率快速闪烁 2.25ms再熄灭 0.56ms。接收头收到这段载波后解调输出一个“低电平持续 2.25ms 再高电平 0.56ms”的数字信号后面的解码器再根据高低电平宽度还原出位值。音频口输出的是毫瓦级信号直接推 LED 远远不够。iPad 耳机口输出电压大约在 0.5V 到 1V RMS直接接 LED 的话电流最多十几毫安还想靠 38kHz 的载波传几米远基本不可能。常规做法是用音频信号驱动一个 NPN 三极管再由三极管控制 LED 的电流。电路其实很简单音频信号经过一个 1kΩ 电阻接到三极管基极LED 阳极接电源5V阴极串一个限流电阻后接到三极管集电极发射极接地基极和地之间再接一个 10kΩ 下拉电阻防止音频口空闲时基极悬空导致 LED 误亮。限流电阻的取值可以直接用欧姆定律算。以 5V 供电、LED 正向压降 1.2V、三极管饱和压降 0.2V 为例如果希望峰值电流 100mA限流电阻就是 (5-1.2-0.2)/0.136Ω实际选 33Ω 或 47Ω 都行。这里的关键是弄清楚“峰值电流”和“平均电流”的区别。红外遥控的数据是强占空比信号平均电流远小于峰值LED 不会烧反而能靠大电流冲击获得更长的传输距离。想加长遥控距离可以进一步减少限流电阻到 27Ω 甚至 22Ω但这时候要留意三极管的功耗如果手摸上去发烫就需要换更大功率的管子比如 S8050 换成 BD139。2.2 新版 iPad 的音频输出难题USB-C 适配器怎么选Part 1 里如果用的还是老款带耳机孔的 iPad直接从耳机座引出信号就行。但现在的 iPad 大多只有 USB-C 或者 Lightning 口。用 USB-C 转 3.5mm 的适配器我实测下来有个关键坑适配器内部的 DAC 和输出级几乎都会在 20kHz 以上开始滚降有些廉价方案甚至在更低频率就开始滤波。38kHz 载波虽然人耳听不到但也在 DAC 的负反馈环路里输出幅度会被明显压低严重时 LED 根本不亮或者只能发出极微弱的光。怎么选适配器我的经验是注意看频响指标尽量挑那些明确标注支持“32bit/384kHz”或“Hi-Res Audio”的型号这类产品在 30kHz 以上通常还保有一定输出幅度。但指标只能作为参考同型号产品在不同批次上的表现也可能有差异。更靠谱的办法是把适配器输出直接接到示波器上看先用 App 生成连续 38kHz 正弦波再比较 1kHz 信号和 38kHz 信号的实测幅度。如果 38kHz 的幅度比 1kHz 衰减超过 30%就要考虑换型号或者改用其他方案。如果你的适配器实在不理想还有一条妥协路线把载波频率从 38kHz 下调到 36kHz。很多接收头在 36kHz 到 38kHz 范围内都有兼容带宽36kHz 信号在同一个 DAC 下衰减更小虽然接收灵敏度会有细微损失但通常不影响正常使用。如果再不行就老老实实用外部单片机去生成 38kHz PWMiPad 只负责协议和 UI通过 WiFi 把命令帧转发给单片机。这相当于换了技术路线稳定性和传输距离都会提升但不在 Part 2 的主线范围内我会在文末扩展部分简单提一下。2.3 接收电路让 iPad 拥有“学习”的能力要让 iPad 能学习原遥控器的信号必须加一个红外接收头。接收头不是简单的光电二极管它内部集成了前置放大器、自动增益控制和带通滤波输出已经是解调后的数据脉冲。正因为有这个模块我们才能用很便宜的电路把各种协议的学习问题统一简化成“测量一组高低电平的时长”。接收头通常有 3 个引脚电源、地、输出。空闲时输出为高电平一旦检测到 38kHz 载波段输出就被拉低。要把输出信号读进 iPad理论上可以接到麦克风输入但直接接会有电平匹配问题。接收头的输出通常是 3.3V 或 5V 的逻辑电平而 iPad 麦克风输入的满幅电平比这个小得多直接接很容易削波失真。我实测下来的简化做法是输出脚串一个 10kΩ 电阻再接一个 10kΩ 电阻到地把 3.3V 逻辑电平分压到 1.65V 左右。虽然对部分设备来说这个幅值仍然偏高但配合 App 里调低录音增益就能在波形上得到干净的高低电平边界。App 用 48kHz 采样录音时能清楚看到起始的引导码和后续的高低电平段这就保留了原始协议的脉宽信息。接收电路还有一个容易忽略的点接收头对光非常敏感强日光、节能灯甚至某些屏幕背光都可能让它误触发。学习模式里最好拉上窗帘或者把 iPad 和原遥控器放在一个相对暗的环境里等波形稳定后再采集。否则你采到的可能是噪声叠加后的“假协议”存进码库之后回放时当然不工作。3. 红外控制协议与编码实现3.1 NEC 协议结构拆解NEC 协议是被消费电子产品用得最多、也最适合新手分析的协议。一条完整的 NEC 帧包含9