红外篇
硬件:红外发射和接收管。软件:lirc 系统:raspbian(2017-04-10-raspbian-jessie版,2017-11-29-raspbian-stretch不成功)
关于树莓派红外摇控器摇控码的学习接收与发射网上已经有很多教程并且多数都很成熟,本人也是根据众多大神的教程中学习并经过自己实践总结。所以在这里我对于红外的架设部分只简单介绍,对于其中的坑做详细说明,帮助有兴趣的同学少走些弯路。
一、硬件选择及连接。
之所以这单独讲一下硬件的选择,是因为我红外的发射管和接收管共买了5套,各有不同的问题,这些问题都会导致不同的麻烦,影响效果,也可能是我人品不好,遇到了这些问题,但毕竟是有这些问题,希望大家注意。
接收管只有一个问题,就是不稳定,在用mode2 -d /dev/lirc0(该命令后面有介绍)的时候,不按摇控键也有代码出来,非常影响摇控码的制作,所以建议买稍好点的,尽量不要买只有一个接收管的。(听朋友说1838T也不会出现误码,但我的会。)我用的是这种(下图)比较稳定,而且有一个led有数据的时候led会闪。
发射管毛病就比较多了,多数是发射距离问题,从20厘米到3米,下图是我买到的比较好,功率比较大,几乎360度无死角如图
接法可用面包板,也可以不用,只要不接错正负级问题不大,不过要注意管子所使用的电压,3.3V的千万不要接到5V上,不然肯定坏,5V接到3.3V上到是没问题,但功率会下降,甚至不工作。全部接完如下图:(具体接GPIO脚后面介绍)
二、软件篇
我用的是系统是raspbian系统,我原来用的是centos7,但centos没有lirc软件,没办法改用raspbian系统。
lirc软件下载安装(我用的是命令行,习惯了): sudo apt-get install lirc (如果已启用root用户,不用输入sudo)直到命令行再现,安装完成。
lirc环境设置(重要),如下文件我都是用vim编辑,nano不会:
1、vim /boot/config.txt增加如下代码:
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=27
(BCM编码27,物理13脚)(BCM编码18,物理12脚),默认是接收脚为GPIO18,发射脚为GPIO17,将发射脚改为GPIO27(物理13脚),因为后面的315发射器默认是用GPIO17脚,且无法更改(至少我没改成功)。
GPIO对应图如下:
接好后用:sudo systemctl start lirc 启动服务。再输入sudo mode2 -d /dev/lirc0, 按遥控上的任何键,查看是否有输出,有输出,如下图,有输出证明接收管和软件安装正常。
2、修改hardware.conf文件:vim /etc/lirc/hardware.conf 只修改如下两行即可,其他不要改。(黄色为修改后内容)
# Run "lircd --driver=help" for a list of supporteddrivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
3、摇控码录制:
方法一:irrecord -d /dev/lirc0 ~/tv.conf 回车后会再现Press RETURN to continue.回车,按摇控器按键会出现小点,直到停止。再出现Press RETURN to continue.回车后用相同的方法按键,直到停止。然后给要录制的按键取名字,不是瞎取的,名字必须在irrecord--list-namespace | grep -i key 内,可用irrecord--list-namespace | grep -i key >list将所有可用名字导出到list文件内用vim list查看。名字虽然是大写的,但小写也可以用。
录制好的tv.conf文件暂时存放在~目录下。具体放在哪个目录下,根据自己喜欢,不过在改下一个文件的时候要把路径写对,不然该文件无法生效。vim ~/tv.conf 打开该文件,有一个name字段,后面应该是tv.conf,改成tv或别的自己能记住的,录制生成的其他设备的摇控器码这个字段也改成tv,为以后发射写代码的时候方便。vim tv.conf文件内容如下图,红框内为修改的name字段:
key_power 等按键内容不一样没关系,可能是一堆数字,一样用,不影响。
方法二:如上只是录制一般摇控器时的方法,有些摇控器(电视机顶盒等)会出现其他的问题这种方法录制不成功要用如下方法:
irrecord -f -d /dev/lirc0 ~/leshi.conf 这样录制出来的是原始码,所有的key都是一堆数字,一样可以用。也要改name字段。如上两种方法基本可以录制成功80%的摇控器。我在用irrecord -d /dev/lirc0 ~/tv.conf 录制深圳天威机顶盒摇控器的时候出现下面错误:
用irrecord -f -d /dev/lirc0 ~/leshi.conf 可录制成功。
方法3:有些摇控器用irrecord -f -d /dev/lirc0 ~/leshi.conf 也无法录制(乐视盒子摇控器就无法录制),按键后根本没反映,没有小点出现。还有空调摇控器也不可以用以上的方法录制。必须用如下终极方法录制:
用如上方法一或二随便录制摇控器内容,做为模板,并删除所有按键内容(该码无法使用)。(如果小点根据就不动就算了,可用其他摇控器的conf文件做模板,本人实测有效。)
用mode2 -d /dev/lirc0 >list命令把原始码录制到list文件内(建议一个键一个键录制,不容易出错),因为录制的内容很多没用且不符合conf的文件要求,所以要如下操作:用vim list打开文件,删除最前面最长的数字。并用如下三个命令:(1):%s/^.\{5}(去掉开头的5个字母)(2):%s/^/ /(功能是在行首加空格。)(3):%s/\n/(多行改成一行).(注:见正则表达式)。保存。同时打开list和conf文件(vim list tv.conf,显示的是list文件,shift+:输入v,用方向键选择后按y复制,shift+:再按n,切换到tv.conf文件中按p粘贴。),把list中的数据全部自制到conf文件中的key中。比如:你录制的是开机键。则在conf文件的key_power后面粘贴list中的数字。其他键也如此操作即可。
4、vim /etc/lirc/lircd.conf,添加如下内容(重要):
include "/etc/lirc/remotes/tv.conf"(双引号为conf文件存放的路径。)
5、至此录制摇控器摇控码的工作完成,下面就可以进行发送实验了。
输入irw并回车,红外接收管准备接收,按下摇控器按键,会显示如下信息:
表示一切正常。现在可以用代码控制设备了,命令如下:
sudo irsend send_once tv key_power 解释:send_once表示发射一次,tv就是上面要修改的name名字,key_powre这按键名。其他按键只要改key就可以了。
特别说明:
有时候我们并不是只有一个摇控器,如果有多个摇控器要实现摇控就要记住所有摇控器的name字段,还要改lirc.conf内文件名,否则irsend会出如下错误:
因为找不到tianwei这个name.
所以我们所有的文件都不用改,只要把name字段都改成一样的,控制不同设备的时候,把需要的conf文件改名覆盖tv.conf即可。比如我上面lirc.conf内容为include "/etc/lirc/remotes/tv.conf"表示系统只认tv.conf配置文件,而我要使用乐视的配置文件leshi.conf,我只需要cp leshi.conf tv.conf,把乐视的文件改名覆盖tv.conf文件,因为name字段都一样,所以发送代码都不变,但代码内容实际上是摇控乐视盒子的,就可以摇控乐视盒子了。其他的摇控器也样操作就可以了。注意:换了conf文件以后要输入如下代码才可生效:
rm /var/run/lirc/*
systemctl restart lirc
lircd -d /dev/lirc0第一行主要为了删除lirc. pid文件,这个文件是保存conf文件的UID,不删除的话新conf文件不会生效。第二行重启lirc服务。第三行重新使conf生效。如上代码可以编辑成sh脚本文件运行。
其实这样还是比较麻烦,毕竟要不停的输入代码,后面将介绍如何使用菜单的方式使用脚摇控,方便了很多。后面还有使用其他摇控器进行多设备控制。
根据大神们的经验本人实践总结,随便转载,注明出处,欢迎讨论!谢谢!