目的:早晨定时打开显示屏(电视),树莓派虽然省电,可以常开,但显示屏是耗电的。
材料:红外接收头(原来玩51开发板上带的,好久不用不知坏没坏)、红外发射管(曾买过一个红外避障器上有个红外发射管)、树莓派、电视及遥控器。
制做:
1、录制遥控器开机信号。接收头只是临时用,差不多就行,这个接收头在试验过程中出现问题很多,耽误很长时间,之前3.3V好使,后来不好使了,过程重试了N次,结果换在5V上好使了,这个过程网上很多,最麻烦的莫过于,那个点那个,现在也是莫名其妙,好在我只是要个结果文件,弄出来就使,反正到现在irw和LIST那个命令还是不好使。
过程:
安装sudo apt-get install lirc
sudo nano /boot/config.txt
dtoverlay=lirc-rpi
gpio_in_pin=18
gpio_out_pin=17
sudo nano /etc/lirc/hardware.conf
#Chosen Remote Control
REMOTE="None"
REMOTE_MODULES="lirc_rpi"
REMOTE_DRIVER="default"
REMOTE_DEVICE="/dev/lirc0"
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS="--uinput-listen"
#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES="lirc_rpi"
TRANSMITTER_DRIVER="default"
TRANSMITTER_DEVICE="/dev/lirc0"
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS="--uinput-listen"
(不知道用不用非这么复杂,反正成了,我就没再探究)
************以下两行是后加的,在新版本得用:
sudo nano /etc/lirc/lirc_options.conf
改两行:
driver=default
device=/dev/lirc0
**********************
重启一下,重新载入配置:(这里我的是用的lircd,用lirc不好使,网上大部分是lirc)
sudo /etc/init.d/lircd stop
sudo /etc/init.d/lircd start
以上改动完成之后,下面进入重要步骤:
首先说一下硬件:正着拿接收头,左为数据,中间地,右边vcc,网上有图可查看。vcc开始我接3.3也好使,但后来就只能接5了,不知为何,网上有说千万不能接5的。地线不用说,数据线接GIOP18,这个是BCM编码(缺省)也就是5v那边数第6个。3.3这边数第6个就是接的发射管的正极(这个也是在网上查了半天,因为我的红外发射管是在板上的,没有长短脚,我也不知红外发射管有没有长短脚,反正对比我手里的二极管也是这么猜着接的,一次成功!)红外发射管的另一极是接的地线。我是先录制,然后拆下接收头,只用发射管。
说完硬件,还是回来先说接收头。
mode2 -d /dev/lirc0
提示:
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
按遥控器,屏幕打印一堆space、pulse的内容,这说明接收头好使。我在后边试时,用3.3这里就不出东西了,原因不明。
接下来就可以录制按键了
看这个吧,比较详细:http://tieba.baidu.com/p/5430954730
sudo /etc/init.d/lircd stop
irrecord --list-namespace 会出一堆键名儿
我本来只想用电源,但也录了一下up,down,结果把音量也顺便做了,以后也许会用上。
KEY_POWER
KEY_VOLUMEUP(我用的KEY_UP)
KEY_VOLUMEDOWN(KEY_DOWN)
irrecord -d /dev/lirc0 (这往下要注意操作)
先是显示一堆,回一下车,又显示一堆,(这时不要按键,稍等一下,会接着显示提示信息)
这个信息是要求你输入一个名字,用简单的英文吧,这里有个重要问题,你输入的名字,一会儿会用到,要记住,为此我耽误了一天!后来我输入的是a
之后会提示:下面的操作很重要。如果你英语不错,你可以快速读一下。
再回一下车,就开始按随意遥控器了,说是随意,按说明点不能一次按过10个..反正你得按两趟点,一趟点后会提示你:类似这个 Got gap
(97849 us)}
两趟后会提示你:请输入你要学习的名字,就是前面KEY_POWER那些,我先输入了KEY_POWER,回车,会要求你按住这个遥控器键,这里我也弄不明白,是一直按还是连按两下,反正按完,就会提示你继续输入名字,比如KEY_UP,再按键,如果不想继续学了,就回车,这里我没弄明白,怎么退出,反正回车后也得按一下遥控器上刚才学过的键,反正,只要出现这个就赢了:Successfully
written config file a.lircd.conf
这时,你可以用nano打开现在所在文件夹中这个文件a.lircd.conf
如果像这样:
begin
codes
KEY_POWER 0x00FDB04F 0x7EBCED6C
KEY_UP 0x00FD22DD
0x7EBCED6C
KEY_DOWN 0x00FDC23D 0x7EBCED6C
end
codes
就说明你录下来了,祝贺已完成一大半!接收头可以暂时收起来了。
接上发射管。
------把刚生成的文件改名为lirc.conf
-------sudo cp lirc.conf /etc/lirc/lirc.conf
上两句不对了,改成下面这句,主要就是现在是lircd.conf 不是lird.conf
sudo cp tv.lircd.conf /etc/lirc/lircd.conf
重启(这里我试了irw,LIST都不好使)(后来发现是后边的十进制数没删除,必须在/etc/lirc/lircd.conf中删除)
sudo /etc/init.d/lircd stop
sudo /etc/init.d/lircd restart
irsend SEND_ONCE a KEY_POWER
竟一试而成,接着试了一下声音的两个键,也都没问题。
(问题的关键就是这个a,之前在这里耽误了一天,就是说没找到远程的什么,原来是起的这个名要写在这里,之前在网上只有一个教程里看到这里边打了个pi,估计也是这个意思,但没有说明)
至此这东西就这么完成了。(输入上面一行代码,电视(树莓的显示器)就开了。)
接续:这次先上图
对,这次把接收头也安上了,不知怎么弄的,这次试了几下,3.3V也好使了,为安全起见,就接在3.3V上试验。
进入pi目录,就是Desktop的上一级,我一般不习惯在这里操作,都是在Desktop中,这回按网上教程来吧,
先编辑一个.lircrc文件,前面的点是个隐藏文件,为什么我也不知,先这么弄着,再在这里编辑一个yaokong.py文件:
1、sudo nano .lircrc
begin
prog = irexec
button =
KEY_VOLUMEUP
config = sudo python
/home/pi/Desktop/yaokong.py
end
2、sudo nano /home/pi/Desktop/yaokong.py(这个文件只是个测试)
import os
print("aaa")
重启lirc软件并执行"irexec"命令
sudo /etc/init.d/lircd restart
irexec
按遥控器的增加音量键,会在执行irexec的控制台,打印出“aaa”,完工。具体以后再改善吧。
至此,遥控器控制树莓派,以及树莓派当红外遥控器都实现了,同样,irw仍然无效,原因未知。
同时又学了个命令:irsend list "" "" 会把你录制遥控器按键时用的名字显示出来,比如:tv
原来那个命令不是不好使么?用这个:irsend LIST tv "" 后面的双引号很重要,前面的tv同样,否则你就是显示不出来.....
2020重做进又发现问题:其实最重要的文件就是
/etc/lirc/lircd.conf
这是你录好后再转存到系统中的文件,irw运行时用的是这个,所以在这里要把录制时的第二个没用的编码去掉,这又浪费了我一天时间,真TMD
------关于输入irw:没有任何反应---------------------------------------------------------------------
树莓派安装红外接收,irw无输出:https://www.hachina.io/dwqa-question/10554.html
also, i have faced a problem where everything seemed to work fine,
but i didn’t get any output running irw command. in case someone’s
stuck there: the problem is lircd.conf file which you’ve just
generated. take a look at it – you probably will get two hex codes
for each button, where the second one is always the same. simply
delete this value from each line and everything should work
now.
另外,我也遇到过这样一个问题:一切看起来都很好,但是我没有得到任何运行irw命令的输出。万一有人被困在那里:问题是您刚刚生成的lircd.conf文件。看看它-你可能会得到两个十六进制代码为每个按钮,其中第二个总是相同的。只需从每一行中删除这个值,现在一切都应该正常了
XXX.lircd.conf文件如下:删除每行的第二个十六进制的数,就可以使用irw输出了