Wi-Fi 红外复制器:远程控制家电设备
元器件与物料清单
![]() |
|
× | 1 | |||
|
× | 1 | ||||
|
× | 1 | ||||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 |
应用与在线服务
|
项目详解
不久前,我着手解码红外空调遥控器,旨在通过 Wi-Fi 实现空调远程控制。过程中学到大量知识,特分享给大家(也是留给未来的自己)。本项目使用 Particle Photon,但因采用 Ken Shirriff 的 IRremote Arduino 库,支持众多其他 MCU,您可自行选择。库官方页面见此,含大量红外信号工作原理的深度解析,建议细读。下文复现关键要点。
红外编码基础知识
以下为原作者帖子转录:
红外遥控器通过特定模式开关 LED 发射信号。为防阳光、灯光等红外源干扰,LED 并非持续发光,而是以调制频率(通常 36、38 或 40 kHz)快速开关。调制信号发射期称为“标记”,LED 熄灭期称为“空间”。
遥控器每个按键对应特定编码(通常 12-32 位),按下时广播该编码。长按时通常重复广播;NEC 协议长按发送特殊重复码而非重复原码;Philips RC5/RC6 协议则在码中翻转一位,接收端以此判断二次按下。
接收端红外探测器解调信号,输出逻辑电平指示是否接收到信号。探测器频率与发射端匹配时效果最佳,但实际中频率微差影响不大。
准备好进入下一步了……
搭建红外接收电路
解码红外信号需要红外接收二极管:

按库说明搭建接收电路:

引脚定义:
我的面包板实物图:

现阶段只需连接接收二极管(黑色),暂忽略发射管(透明),稍后处理。
解码红外信号
项目通过串口输出接收码,需将设备连接电脑。用 USB 线给 Photon 供电并连接电脑 USB 口。现在刷入附件固件。
打开控制台/终端,用 Particle CLI 监控 USB 口。Ubuntu Linux 下监控 Photon 串口命令:
$ sudo chmod 666 /dev/ttyACM0
$ particle serial monitor
不同电脑/系统端口名可能不同,chmod 可能不需要。也可用其他软件接收 USB 串口数据。
将待解码遥控器对准接收二极管(黑色 LED 状元件)按键,观察控制台输出。正常会得到类似输出:
1FEA05F 29168950,8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END
3,3,2,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,END
- 第一行(1FEA05F)和第三行:暂忽略
- 第二行:遥控器发送的红外指令脉冲序列
首个解码红外指令分析
关注第二行脉冲序列:
29168950,8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END
首值 29168950 为“首个标记前的空隙时长”,库文档说明此为测试间隔或按键耗时,可丢弃。真正构成红外指令的是后续脉冲宽度(微秒)。
若要发送该指令,代码示例:
function sendIt() {
unsigned int ircommand[59]={8550,4000,550,1500,550,450,550,500,500,550,500,1550,500,500,500,500,550,500,500,500,550,500,500,500,550,500,500,1500,550,500,500,500,550,500,500,500,550,450,550,1500,550,1500,550,500,500,1500,550,500,550,1500,500,500,550,500,500,500,550,450,550};
irsend.sendRaw(ircommand,59,38);
}
发送前需搭建发射电路,下文详述。
搭建红外发射电路
最简电路如下:
该电路射程不足 1 米。若条件允许,建议搭建下述增强版电路(射程约 10 米):

我的发射端实物图:

测试红外发射电路
固件内置两个控制三星电视音量的函数,供测试发射电路是否工作。将发射 LED 对准电视,调用 sendSamsungVolumeUp() 和 sendSamsungVolumeDown()。
提示:手机摄像头可查看红外 LED 是否发光(红外在手机屏幕可见)。

让红外指令更易读
将 ~500µs 编为 0、~1500µs 编为 1、>5000µs 编为 3、~4000µs 编为 2(人为约定),上述指令转为:
3,3,2,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,END
编码含义:
- 3 = 8500 µs 脉冲
- 2 = 4000 µs 脉冲
- 1 = 1500 µs 脉冲
- 0 = 500 µs 脉冲
为何数字化编码?便于可视化对比不同指令间脉冲的变化与不变模式。例如对比空调遥控器设定 18℃ 与 19℃ 的指令差异,0/1 序列一目了然。固件存储也采用此格式,发射前调用 convertToPulseDuration() 还原脉冲宽度。
参考阅读资源
- 逆向工程空调红外遥控协议
- Arduino IRremote 库配合任意遥控器使用
- Particle 社区相关讨论帖
- 空调遥控器红外协议解析
- Adafruit 相关博客
结语
只要投入精力,配备一款 MCU 与少量元件,即可解码并复刻家中大多数遥控器。虽有局限,但已能实现从手机、平板、笔记本、电脑控制这些设备,甚至创建简单自动化。酷不酷?

接下来可考虑接入 Blynk、用 Ionic Framework 开发 App、对接 Google Assistant 或 Alexa、或通过 Porter 控制。
我计划将此知识应用于家中几台设备控制,并争取产出更多实战笔记。持续关注!
2018 年 2 月 5 日更新:
这是一个项目实现案例:通过互联网控制红外壁炉。
需要帮助?
若项目需专业协助,欢迎邮件联系:gusgonnet@gmail.com。谢谢!
代码
infraredReplicator
源代码:https://github.com/gusgonnet/infraredReplicator
原理图
制造工艺
- 用 Leap Motion 控制的激光坦克——Arduino、树莓派、RGB LED
- UnifiedWater v1 — 基于 Arduino MKR GSM 1400 的完整水质监测套件
- 树莓派 + Arduino 联手打造 Wi-Fi 网络收音机,畅听全球电台
- 便携式 GSM 投票箱:基于 Hologram + IFTTT 实现云端数据采集
- DIY 打地鼠街机游戏(按键版)——Arduino Mega 2560 实现
- 博思工况监测系统让货运列车化身智能IoT资产
- 工业4.0与物联网时代的智能压缩空气系统:互联互通重塑制造新范式
- 第7期:物联网与工业4.0——智能互联压缩机深度解析
- 物联网与 5G:驱动联网汽车未来
- 保障智能家居安全:为何生物识别对 IoT 网络安全至关重要
- 物联网:编织互联世界
- 革新教育:利用物联网增强学习与教学







