鱼喃

听!布鲁布鲁,大鱼又在那叨叨了

树莓派---红外遥控设置

基于raspbian、树莓派3B

硬件

  • 树莓派 * 1
  • 红外接收器 * 1
  • 红外遥控器 * 1
  • 杜邦线 * 3

预览图

先放图

遥控器

e2831ae232961a8f1ea1f78fe6e4c401.jpg

红外接收器

58e4b4ff07882b6b60746ceb8540f3b7.jpg

最终效果图

d52500e3983419cd1fddd76551aee74f.jpg

如果你的遥控器碰巧跟我的一样,这里有一份一键配置脚本: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
2
# sudo apt update
sudo apt install -y lirc

lirc修改配置文件

编辑 /etc/lirc/hardware.conf,修改以下几项

1
2
3
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc-rpi"

编辑 /boot/config.txt 允许lirc模块,并修改默认gpio

找到

1
#dtoverlay=lirc-rpi

修改为

1
2
# gpio10 在 gpio24 左边,19号引脚
dtoverlay=lirc-rpi/dtoverlay=lirc-rpi,gpio_in_pin=24,gpio_out_pin=10

有的教程通过其他方法来修改引脚配置,但是实际操作都不可行,用的还是默认引脚

对于大部分红外接收器来说,接法是:
vcc 连 pin1 (3.3v)
gnd 连 pin6(ground)
data连 pin12(gpio18)

重启、测试

1
sudo reboot

重启之后输入命令

1
mode2 -d /dev/lirc0

之后,按遥控,如果终端出现以下类似输出说明配置成功,如果没有反应请检查引脚接的对不对

1
2
3
4
5
space 16300
pulse 95
space 28794
pulse 80
space 19395

红外编码录制

红外接收器已经能接收到输入并传递给树莓派了,但是现在还不能分辨出按下的是哪个键。为了达到这个目的,我们需要训练它,也就是红外编码录制。

为了统一,lirc定义了一系列的按键名,在录制时需要指定当前录制的是哪一个按键。
全部可用按键名通过命令 irrecord -list-namespace 查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
KEY_0
KEY_102ND
KEY_1
KEY_2
KEY_3
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
KEY_A
KEY_AB
KEY_ADDRESSBOOK
KEY_AGAIN
KEY_ALTERASE
...

输入以下命令开始录制

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 button KEY_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
2
sudo /etc/init.d/lirc restart
irw

按下遥控器按钮,发现可以识别录制的按键
输出类似:

1
2
3
4
5
6
7
8
0000000000ffa25d 01 KEY_CHANNELDOWN /etc/lirc/lircd.conf
0000000000ffa25d 01 KEY_CHANNELUP /etc/lirc/lircd.conf
0000000000ffa25d 00 KEY_CHANNEL /etc/lirc/lircd.conf
0000000000ffa25d 01 KEY_CHANNEL /etc/lirc/lircd.conf
0000000000ffa25d 00 KEY_PLAY /etc/lirc/lircd.conf
0000000000ffa25d 01 KEY_PLAY /etc/lirc/lircd.conf
0000000000ffa25d 00 KEY_VOLUMEUP /etc/lirc/lircd.conf
0000000000ffa25d 01 KEY_VOLUMEUP /etc/lirc/lircd.conf

编写触发事件

树莓派已经知道遥控器按下的是哪个键了,现在还需要设置按键按下的相关触发事件。
新建文件 ~/.lircrc 并写入以下内容

1
2
3
4
5
6
7
8
9
10
begin
prog = irexec
button = BTN_LEFT
config = echo "BTN_LEFT" >> ~/lirc.log
end
begin
prog = irexec
button = KEY_NUMERIC_0
config = echo "BTN_LEFT" >> ~/lirc.log
end

我写了两条规则,每条规则以begin开始,end结束,包含prog、button、config三项
button 是指定按键名
config 则是触发事件,是一条bash命令

重启lirc 并启动irexec

1
2
sudo /etc/init.d/lirc restart
irexec -d

再次按下遥控器上的按键,可以发现 ~/.lirc.log 文件中会记录按下的按键

把命令加到 /etc/rc.local 中以实现开机启动

参考

树莓派红外遥控测试
打造增强型Raspberry Pi-红外遥控篇
使用树莓派(Raspberry Pi)实现智能家居(2/4)
树莓派3B——-使用lirc配置遥控器