Page17-红外发送与接收(树莓派控制家电)

Page17-红外发送与接收(树莓派控制家电)

00-申明:本系列专栏相关说明与镜像包、源码等:

说明:树莓派4B的红外模块存有系统问题,这个在树莓派的官网论坛上也有讨论过了(如下链接中有说)。用3B毫无问题,我也很尴尬。

一、红外接收与发送(空气净化器等设备)实验:

1、器件介绍:

使用树莓派配套的IR发射板,连接如下。当然我们不选用这种啦,用简单一点的即可。

树莓派配套IR发射板(没用过哦)
简易红外发射头


此红外模块只能呈现-45度--- +45度角发射信号。

2、红外接收实验:


a.连线:

本实验,可以选用VS1838红外,器件接线如上图所示。连接好

b.安装lirc,修改配置文件

(注:lirc文档都不适用于内核4.19.x的版本raspberrypi.org/forums/)buster 内核4.19.x 不包含lirc_dev,因此需要用gpio-ir。如果只使用 "irsend" 去发送IR信号,不需要打补丁。如果要使用 "irrecord" "mode2" "irw" "irexec"去接收IR信号,则需要打补丁。

但想要同时做到 接收和发送 IR信号,好像很吃力。

安装方法如下:

回退内核版本

哈希传递rpi-update 回滚:

sudo rpi-update 963a31330613a38e160dc98b708c662dd32631d5

重新启动后,用一下命令,查看内核是否回滚

uname -a


回滚之后可能会有无线网络连接不上的问题,rfkill list 查看射频是否被block,是的话使用

rfkill unblock all

解锁设备。然后 ifconfig wlan0 up 就可以工作了。

c.安装lirc,修改配置文件

LIRC (Linux Infrared remote control)是一个linux系统下开源的软件包。这个软件可以让Linux系统接收及发送红外线信号。

sudo apt-get install lirc

sudo vim /etc/lirc/hardware.conf

修改以下几处:

LIRCD_ATGS="--uinput --listen"

DRIVER="default"

DEVICE="/dev/lirc0"

MODULES="lirc-rpi”

sudo vim /etc/modules

添加下面两行到模块配置文件:

lirc-dev

#我把红外接收模块的OUT接口接到了树莓派的GPIO18

#如果本例中未用到红外发射模块,所以后面的gpio_out_pin可以不写

lirc-rpi gpio_in_pin=18 gpio_out_pin=17

再配置文件 sudo vim /boot/config.txt:


sudo reboot重启树莓派.

d.终端执行

重新登录后,执行:

sudo mode2 -d /dev/lirc0

此时,按空气净化器的红外遥控,发现出现如下界面,说明已经接收红外信号:


e.红外编码录制

首先关闭lirc软件,然后查看可用的按键名

sudo /etc/init.d/lirc stop

irrecord -list-namespace //查看LIRC下有哪些键名列表。

根据我的净化器的遥控器,我选择了以下几个按键名并记录下来:

KEY_NUMERIC_0-9

然后,执行红外线编码录制命令

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


根据软件的提示操作即可,这个程序会自动算出你按下的遥控器按键的编码和时长,并录制下来记录在~/lircd.conf文件中。


最后,将录制好的~/lircd.conf文件覆盖lirc软件的相应文件

sudo cp ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc restart   重启LIRC服务后,使用irw命令,按遥控器,查看单个编码


irsend LIST /home/pi/lircd.conf ""查看所有所录制码的编码:


f.红外发射

irsend SEND_ONCE /home/pi/lircd.conf KEY_NUMERIC_0测试红外对设备的开关。

g.设置lirc开机自启动:

配置开机自启动,修改rc.local 或者配置init.d ,这里修改rc.local

修改/etc/rc.local文件,加入以下红框的内容:

二、空调的红外接收与发送实验:

说明:空调遥控器这种带逻辑控制的比较麻烦.每次发射的都是含有温度、模式、制冷制热等一连串的指令,按照之前irrecord指令生成conf文件,行不通。只能使用raw的原始码,记录也是通过mode2 命令实现。在做本章节实验之前需对红外NEC协议有一个了解:

cnblogs.com/yulongchen/

Step1:在lirc服务关闭的情况下,运行sudo mode2 –d /dev/lirc0>>temp.code

再按下相应的键后,再按ctrl+C结束。

vim打开temp.code会发现一连串的pluse与space码,这里需要将第一行的space XXXX去掉。



再使用将它改成可以被irsend识别的格式可以通过

:%s/^.\{5} 
:%s!^! ! 
:%s/\n/ 

几条小命令实现,这时temp.code的文件如下图所示:



Step2:按上述的方法多做几个空调遥控器的码文件,然后新建lircd.conf文件,并将码型添加到lircd.conf中,添加后文件应该如下所示:




Step3:测试

先用irsend LIST /home/pi/lircd.conf ""命令查看是否会出现相应的命令,/home/pi/lircd.conf 是配置文件中的名字,可以修改,正确识别的结果是:



(说明各个KEY的选择可以自便)

将lircd.conf文件复制到/etc/lirc中,并在重启lirc服务后进行测试



然后就可以通过 irsend SEND_ONCE /home/pi/lircd.conf KEY_FN_1或其它键时,发送开机指令了,如果你听到滴滴的声音,那么恭喜你,如果没有听到,那么还是去看看硬件电路是不是有问题。

(说明:本实验可以采用普通的红外发射器,也可以采用树莓派特制的红外模块)

发布于 2020-06-15 21:18