树莓派无需 LIRC 捕获红外遥控指令:Python UART 方案
将红外遥控器与树莓派集成,若绕过 LIRC 直接利用 UART 串口接口,将变得简单可靠。本指南涵盖从硬件搭建到 Python 解码的全过程,让你以最少代码可靠捕获遥控信号。
为何跳过 LIRC?
LIRC 为红外设备提供通用框架,但对简单项目而言大材小用,且有时引入延迟或兼容性问题。利用内置 UART 引脚 (TX/RX) 和低速串口协议,可实现轻量、确定性的解决方案,调试更容易。
硬件概览
- 红外传感器:HX1838(或任意 5V 红外接收器),输出串行数据。
- 树莓派 GPIO:传感器输出脚接 GPIO 15 (RX)。传感器 VCC 接 5V,GND 接地。
- UART 引脚配置:禁用 ttyAMA0 上的默认控制台,使 UART 专用于传感器输入。
步骤 1 — 为 UART 准备树莓派
1. 备份内核命令行:
sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt
2. 从 /boot/cmdline.txt 移除 ttyAMA0 参数(如 console=ttyAMA0,115200 和 kgdboc=ttyAMA0,115200):
sudo nano /boot/cmdline.txt
修改后应类似:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait
3. 在 /etc/inittab 中屏蔽 ttyAMA0 登录提示:
sudo nano /etc/inittab
注释掉:
#X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
步骤 2 — 安装 pySerial
安装 Python 串口库,提供 serial 模块用于 UART 通信:
sudo apt-get install python-serial
安装后即可在脚本中导入:
import serial
步骤 3 — 接线红外传感器
- 传感器 输出脚 接 GPIO 15 (RX)。
- 传感器供电 5V 和 地。
- 本项目仅接收数据,TX (GPIO 14) 暂不使用。
步骤 4 — 读取红外字节的基础 Python 脚本
HX1838 以 2400 bps 发送串行流。下面片段读取每次按键 12–16 字节并打印 ASCII 码。
import serial
ser = serial.Serial('/dev/ttyAMA0')
ser.baudrate = 2400
for _ in range(15): # 捕获最多 15 字节
byte = ser.read(1)
print(ord(byte))
实测 2400 bps 最可靠,较低速率可能降低空中传输误码率。
步骤 5 — 解码三星遥控按键
用三星电视遥控器测试,发现每次按键产生 12–16 字节:
- 字节 0–5:帧头 — 所有按键恒定。
- 字节 6–11:载荷 — 唯一标识按下的按钮。
- 字节 12:尾部(该遥控特有)。
为映射按键,我们计算字节 6–11 的加权和:
keyidentity = (byte[6] + 2*byte[7] + 3*byte[8] + 4*byte[9] + 5*byte[10] + 6*byte[11])
虽非最稳健方法,但能为每个按钮产生唯一值,便于比对。如需更强抗冲突,可替换为哈希或 XOR。
完整示例:ir_serial3samsung.py
下方精简脚本:
- 捕获 24 字节(两帧)清空串口缓冲。
- 仅用前 12 字节解码按键。
- 打印计算出的
keyidentity供快速参考。
import serial
ser = serial.Serial('/dev/ttyAMA0', 2400)
while True:
# 读取 24 字节清空缓冲
raw = ser.read(24)
# 前 12 字节对应单次按键
key_bytes = raw[:12]
key_id = sum((i+1)*b for i, b in enumerate(key_bytes[6:12]))
print(f'Key ID: {key_id}')
运行脚本并按下三星遥控器按键,每次按键打印唯一 Key ID。将这些 ID 存入查找表,映射到应用动作。
结论
利用 UART 和简易 Python 脚本捕获红外遥控信号,省去 LIRC,降低延迟,完全掌控解码逻辑。代码极简透明,调试直观。可适配任何输出串行数据的红外遥控器,是树莓派项目的通用方案。
深度教程见原文:How to Use and Emulate…
制造工艺
- 树莓派温度画像:Python+SQLite+LabVIEW实战
- 树莓派2上使用DS18B20读取温度完整指南
- 树莓派结合 Maxim 1-Wire 传感器与 DS2482 I2C 桥接器的多点温度测量
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 树莓派 3 配合 PubNub 实现远程气象监测
- 树莓派 Zero 配合 Node‑RED 融合 TI SensorTag 与 Blynk 物联网平台
- 树莓派与 AS3935 闪电检测传感器实战指南
- 树莓派无原生 ADC 读取模拟传感器:阶跃响应法实战
- 树莓派 LIRC 通用红外遥控器专业构建指南
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 树莓派 2 无头模式水浸报警器:基于 Adafruit T‑Cobbler Plus 构建