把旧电视遥控器变智能!用树莓派+红外接收头(GPIO17)打造万能家庭控制中心

张开发
2026/4/18 5:24:13 15 分钟阅读

分享文章

把旧电视遥控器变智能!用树莓派+红外接收头(GPIO17)打造万能家庭控制中心
用树莓派红外接收头打造智能家庭控制中心的完整指南家里堆着几个旧遥控器扔了可惜留着又占地方不如让它们重获新生本文将带你用树莓派和红外接收头GPIO17把这些老古董变成智能家居的万能控制器。想象一下——用电视遥控器一键关闭所有灯光、启动影音系统或者用空调遥控器触发自定义场景这才是真正的极客范儿1. 硬件准备与环境配置1.1 所需材料清单树莓派任何型号均可推荐3B或4B红外接收头VS1838B或类似型号杜邦线若干闲置的各类遥控器电视、空调、风扇等可选红外发射管用于反向控制电器连接示意图红外接收头 树莓派 ┌──────┐ ┌──────┐ │ OUT ├───────┤ GPIO17│ │ GND ├───────┤ GND │ │ VCC ├───────┤ 3.3V │ └──────┘ └──────┘1.2 系统配置要点编辑/boot/config.txt文件确保包含以下两行如果已有请取消注释dtoverlaygpio-ir,gpio_pin17 dtoverlaygpio-ir-tx,gpio_pin18注意较新的树莓派OS基于4.19.x及以上内核不再需要旧版教程中提到的/etc/modules或lirc-rpi驱动配置这是许多过时教程容易忽略的关键点。安装必要软件包sudo apt update sudo apt install lirc配置/etc/lirc/lirc_options.confdriver default device /dev/lirc1验证接收功能mode2 -d /dev/lirc1按下遥控器按键如果看到类似pulse 629 space 518的输出说明硬件工作正常。2. 遥控器信号学习与配置2.1 使用irrecord获取信号模板虽然irrecord工具识别准确度有限但能帮我们快速建立配置文件框架sudo irrecord -f -d /dev/lirc1 --disable-spacename操作流程按回车后不要立即按键等待系统提示输入遥控器名称如old_tv按提示录入2-3个按键即可建议选择不常用的按键做测试生成的配置文件通常位于当前目录扩展名为.lircd.conf2.2 手动精校信号数据更可靠的方式是使用mode2获取原始信号mode2 -m -d /dev/lirc1典型输出示例620000 9170 4441 640 552 604 554 609 552 635 528 612 551 601 556 634 528 609 553 614 1629 610 1632 635 1615 627 1619 596 1602 639 1629 611 1618 616 1605 633 1607 638 552 610 1604 633 1615 596 562 621 541 594 567 595 564 568 594 593 1649 566 598 568 601 591 1678 516 1697 556 1692 547 1683 546 132000编辑/etc/lirc/lircd.conf时需注意只保留两个大数字之间的数据严格保持原始数据的对齐格式每个按键定义后留一空行完整示例begin remote name old_tv flags RAW_CODES eps 30 aeps 100 gap 108106 begin raw_codes name KEY_POWER 9170 4441 640 552 604 554 609 552 635 528 612 551 601 556 634 528 609 553 614 1629 610 1632 635 1615 627 1619 596 1602 639 1629 611 1618 616 1605 633 1607 638 name KEY_VOLUME_UP 8521 4452 621 541 594 567 595 564 568 594 593 1649 566 598 568 601 591 1678 516 1697 556 1692 547 1683 546 end raw_codes end remote3. 实现智能场景联动3.1 基础命令绑定创建~/.lircrc配置文件实现按键到命令的映射begin prog irexec button KEY_POWER config bash /home/pi/scripts/cinema_mode.sh end begin prog irexec button KEY_VOLUME_UP config amixer set PCM 5% end3.2 高级Python控制示例下面是一个用电视遥控器控制Philips Hue灯泡的完整案例#!/usr/bin/env python3 # hue_controller.py import requests import json BRIDGE_IP 192.168.1.100 USERNAME your-hue-username LIGHT_ID 1 def set_light(state, bri254, ct366): url fhttp://{BRIDGE_IP}/api/{USERNAME}/lights/{LIGHT_ID}/state payload {on: state, bri: bri, ct: ct} requests.put(url, datajson.dumps(payload)) if __name__ __main__: set_light(True) # 开灯并设置为冷白光在~/.lircrc中配置begin prog irexec button KEY_MENU config python3 /home/pi/hue_controller.py end3.3 多设备联动场景实现影院模式的shell脚本示例#!/bin/bash # cinema_mode.sh # 关闭客厅灯光 curl -X PUT http://hue-bridge/api/username/lights/1/state -d {on:false} # 调整空调到24度 irsend SEND_ONCE old_ac POWER_ON irsend SEND_ONCE old_ac TEMP_24 # 启动Kodi媒体中心 systemctl start kodi # 降低音量到30% amixer set PCM 30%4. 集成到智能家居生态系统4.1 与Home Assistant对接在Home Assistant的configuration.yaml中添加shell_command: activate_cinema_mode: ssh pi树莓派IP bash /home/pi/scripts/cinema_mode.sh automation: - alias: 红外触发影院模式 trigger: platform: mqtt topic: home/lirc/old_tv/KEY_POWER action: service: shell_command.activate_cinema_mode4.2 通过MQTT扩展功能Python MQTT订阅示例# mqtt_ir_bridge.py import paho.mqtt.client as mqtt import os def on_connect(client, userdata, flags, rc): client.subscribe(home/lirc/#) def on_message(client, userdata, msg): if KEY_POWER in msg.topic: os.system(bash /home/pi/scripts/shutdown_sequence.sh) client mqtt.Client() client.on_connect on_connect client.on_message on_message client.connect(mqtt-server, 1883, 60) client.loop_forever()4.3 红外信号数据库分享建议将调试好的遥控器配置上传到开源社区如https://github.com/probonopd/irdbhttps://sourceforge.net/p/lirc-remotes/wiki/Remotes/常见问题解决方案问题现象可能原因解决方法按键无响应GPIO引脚错误检查接线和config.txt配置信号不稳定供电不足确保使用3.3V而非5V供电按键串扰信号重复在lircd.conf中增加gap值服务启动失败配置文件格式错误使用irw测试并检查日志进阶技巧使用irsend LIST old_tv 查看已学习的按键通过irw命令实时调试信号接收在Python脚本中使用python-lirc库获得更精细控制现在你的旧遥控器已经变身成为智能家居的中枢控制器。下次朋友来访时用空调遥控器一键启动家庭影院的效果绝对让人惊艳

更多文章