搞定树莓派的红外接收

树莓派 杨博, 卫 788次浏览 0个评论

自己买了一个树莓派,一直只是用来看视频,挂BT,或者当NAS用。200多块大洋的物联网设备完全没有发挥出作用啊,水平有限,但是还是可以搞些简单的。

第一步我决定搞定红外遥控,遥控器算是这是比较便捷的控制方式了。Let’s do it!

一、准备材料

除了树莓派,杜邦线以外还要用到TSOP38238红外接收器和遥控器。遥控器的型号无所谓,我们后面要对遥控器的按键进行学习,但是不要用空调这样带逻辑判断的遥控器,可以用电视的都行,我这里用的是普通的车载mp3遥控器。raspberry_pi_overview

二、接线

红外传感器只有三个引角, 都需要连上树莓派的GPIO管脚.。

按下图所示进行连接. 跳线的颜色无关紧要, 只是不同颜色更容易区分。25200748_ErhE注意在树莓派上用红外传感器需要3.3V电压, 千万别用5V.出了事别怪我没有提醒你啊。

三、搞定红外驱动模块

1.lirc_rpi项目为Linux内核提供了支持GPIO口的红外接收管的驱动,在最新的Raspbian系统中应该已经包含。但是我用系统是基于Raspbian精简的DietPi(我强烈推荐这个镜像只有100MB的系统,真的很好用!谁用谁知道!),他是没有自带的,所以我们手动安装。

sudo apt-get install lirc

2.修改LIRC配置文件

vi /etc/lirc/hardware.conf
########################################################
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

# Don't start lircmd even if there seems to be a good config file
# START_LIRCMD=false

# Don't start irexec, even if a good config file seems to exist.
# START_IREXEC=false

# Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
########################################################

一行一行对照哦,错了可不怪我。

3.接着我们要让树莓派开机时自己加载红外模块。

编辑/etc/modules,添加下面的内容

lirc_dev
lirc_rpi gpio_in_pin=18

设置gpio18为红外输入。

4.重要!重要!十分重要!很多教程都只有前3步,我不知道大家是不是这么顺利,反正我重启之后,是没有/dev/lirc0这个module出现的。可能时过境迁,教程也没有更新吧。查了一下,找到https://www.jybee.com/2015/02/hardware/raspberry-pi/rpi2-openelec-gpio-chip-not-found-lirc-ir-receiver/,大概就是说要在/boot/config.txt中加入dtoverlay=lirc-rpi。但是要先解锁/boot。

sudo mount /boot -o remount,rw
sudo vi /boot/config.txt

然后在文件末尾另起一行,添加

dtoverlay=lirc-rpi

保存并退出。最后重启你的树莓派。

5.检验红外线接收功能

不出意外应该可以用了,我们来检验一下。

首先关闭LIRC软件

sudo /etc/init.d/lirc stop

然后执行如下命令。

mode2 -d /dev/lirc0

对准红外接收器凸起的那一面,按遥控器上的键,如果终端上能显示出一串pluse和space值的话,多半就是正常了。

space 16300
pulse 95
space 28794
pulse 80
space 19395

四、学习遥控器按键

到此为止,你离成功不远了,但是我就遇到过学习失败的,这个后面再说。

1.首先关闭LIRC软件,然后查看可用的按键名,对着遥控器,记下你想要学习的键名。

sudo /etc/init.d/lirc stop
irrecord --list-namespace | grep -i key_

注:列出几个常用的按键名
KEY_POWER
KEY_VOLUMEUP
KEY_VOLUMEDOWN
KEY_PLAY
KEY_STOP
KEY_VIDEO_PREV
KEY_VIDEO_NEXT

2.执行红外线编码录制命令

irrecord -d /dev/lirc0 ~/lircd.conf

后面就是考验你的英语水平了,根据向导把你要的按键都学习完。
替换配置

sudo mv ~/lircd.conf /etc/lirc/lircd.conf

反正我这边学习是可以学习,但是学习完老是出现识别和按下的键不符,学习了几次,有时就一个键不准,有时整个遥控器就没几个键是对的。

这个时候可以用Lirc的RAW模式,就是单纯将遥控器发射出的信号的pulse和space的延续时间原封不动地记下来,这样生成的配置文件大,同时这样会导致按住某一个键只能识别一次信号,而普通模式学习完之后可以识别长按某个键这个动作(就是可以接收到按住按键时遥控器发出的多个信号)。也就是如果采用RAW模式的话,日后编写程序就不用考虑按键去抖了 :!: 。。。因为鉴于RAW模式准确率高我还是选择了它。加参数-f –force : force raw mode 强制使用raw模式

sudo /etc/init.d/lirc stop
irrecord -f -d /dev/lirc0 ~/lircd.conf
sudo mv ~/lircd.conf /etc/lirc/lircd.conf

3.测试学习成果

sudo /etc/init.d/lirc start
irw

随意按下按键看看显示的名称与你按下的键是否对应。
到此大功告成。


本文版权:霜之哀伤 转载请注明搞定树莓派的红外接收
喜欢 (3)or分享 (0)
杨博, 卫
关于作者:
喜欢折腾路由器,懂一点Linux,最近正在学习树莓派...
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址