基于raspbian、树莓派3B
硬件
- 树莓派 * 1
- 红外接收器 * 1
- 红外遥控器 * 1
- 杜邦线 * 3
预览图
先放图
遥控器
红外接收器
最终效果图
如果你的遥控器碰巧跟我的一样,这里有一份一键配置脚本:pi-setup-lirc.sh
接线
红外接收器根据型号不同,引脚顺序应该也不一样,这个查引脚图或者自己拿万用表去测吧。
什么都没有的我反正是冒着烧树莓派的风险试出来的,不要学我。。。
红外接收器都有三个引脚:VCC、GND、data
由于上次风扇用掉了PIN 6、PIN 8、PIN 10,选择了另一个3.3V所在的PIN 17。为了尽可能保持各个组件的接线在一块,选择了PIN 17、PIN 18、PIN 20
注意引脚叫法的不同
VCC: 连接17号引脚 3.3V
GND: 连接20号引脚 接地
DATA:连接18号引脚,GPIO24
步骤
安装lirc
1 | # sudo apt update |
lirc修改配置文件
编辑 /etc/lirc/hardware.conf
,修改以下几项
1 | DRIVER="default" |
编辑 /boot/config.txt
允许lirc模块,并修改默认gpio
找到
1 | #dtoverlay=lirc-rpi |
修改为
1 | # gpio10 在 gpio24 左边,19号引脚 |
有的教程通过其他方法来修改引脚配置,但是实际操作都不可行,用的还是默认引脚
对于大部分红外接收器来说,接法是:
vcc 连 pin1 (3.3v)
gnd 连 pin6(ground)
data连 pin12(gpio18)
重启、测试
1 | sudo reboot |
重启之后输入命令
1 | mode2 -d /dev/lirc0 |
之后,按遥控,如果终端出现以下类似输出说明配置成功,如果没有反应请检查引脚接的对不对
1 | space 16300 |
红外编码录制
红外接收器已经能接收到输入并传递给树莓派了,但是现在还不能分辨出按下的是哪个键。为了达到这个目的,我们需要训练它,也就是红外编码录制。
为了统一,lirc定义了一系列的按键名,在录制时需要指定当前录制的是哪一个按键。
全部可用按键名通过命令 irrecord -list-namespace
查看
1 | KEY_0 |
输入以下命令开始录制
1 | irrecord -d /dev/lirc0 ~/lircd.conf |
一直回车,直到看到“Press RETURN now to start recording.”,再回车一次,然后把遥控器上的每一个按键依次按一下,每次按键屏幕上都会出现一个“.”。
我在操作时,这个步骤要做两遍
按满两行后屏幕提示“Please enter the name for the next button (press to finish recording)”,然后依次输入想要录制的按键,例如输入:
KEY_LEFT
,然后提示“Now hold down buttonKEY_LEFT
.”,这时候按下遥控器上的播放按钮,软件会自动记录并跳转回“Please enter the name for the next button (press to finish recording)”,把每一个想录制的按钮全部输入一遍,最后直接回车结束,配置文件就保存了。
都录制一遍时间有点长,可以先录需要的部分
把生成的文件放到lirc目录下
1 | sudo mv ~/lircd.conf /etc/lirc/lircd.conf |
重启lirc服务并测试
1 | sudo /etc/init.d/lirc restart |
按下遥控器按钮,发现可以识别录制的按键
输出类似:
1 | 0000000000ffa25d 01 KEY_CHANNELDOWN /etc/lirc/lircd.conf |
编写触发事件
树莓派已经知道遥控器按下的是哪个键了,现在还需要设置按键按下的相关触发事件。
新建文件 ~/.lircrc
并写入以下内容
1 | begin |
我写了两条规则,每条规则以begin开始,end结束,包含prog、button、config三项
button 是指定按键名
config 则是触发事件,是一条bash命令
重启lirc 并启动irexec
1 | sudo /etc/init.d/lirc restart |
再次按下遥控器上的按键,可以发现 ~/.lirc.log
文件中会记录按下的按键
把命令加到 /etc/rc.local
中以实现开机启动
参考
树莓派红外遥控测试
打造增强型Raspberry Pi-红外遥控篇
使用树莓派(Raspberry Pi)实现智能家居(2/4)
树莓派3B——-使用lirc配置遥控器