通过树莓派的 gpio 接口接入红外接收器以及红外发射器,可以实现红外信号的接收和发射功能.
安装 lirc
配置驱动
使用 pinout
命令查看树莓派管脚:
1 |
|
启用 ir 管脚:
1 | sudo vi /boot/config.txt |
并找到如下内容:
1 | # Uncomment this to enable infrared communication. |
把下面两行注释掉
lirc使用BCM编号方式,先确定自己要使用那个GPIO针脚,这里使用17作为接收,18作为发送。
1 |
|
其中第一行代表红外信号输入,对应树莓派 gpio17 接口,
第二行代表红外信号输出,对应树莓派 gpio18 接口.
完成这一步修改以后需要重启树莓派.
重启以后 ls -l /dev | grep lirc
应该可以看到 lirc0 和 lirc1 两项:
1 | crw-rw---- 1 root video 251, 0 10月 29 14:52 lirc0 |
根据官方给出的说明:
Please note that in Raspbian Buster with LIRC 0.10 device /dev/lirc1 is the receiver and device /dev/lirc0 is the transmitter. Initially /dev/lirc1 in /etc/lirc/lirc_options.conf is used to scan a remote control. After that the configuration has to be updated to /dev/lirc0 in order to send infrared commands. LIRC has to be restarted after a change in /etc/lirc/lirc_options.conf/.
lirc0
是输出源(外接红外信号发射器),lirc1
为输入源(外接红外信号接收器),这个信息 很重要!,后面在配置的时候会用到.
安装 lirc
1 |
|
接着编辑 /etc/lirc/lirc_options.conf
文件中的一下内容为:
1 |
|
这里需要注意的是,device 设置为 /dev/lirc1
意味着我们现在是要进行信号的录入.进行到信号输出时需要把 device
修改为 /dev/lirc0
,并且每次修改 以后,都需要重启 lirc 服务:
1 |
|
查看 lirc 启动信息:
1 | service lircd status |
接收
执行:
1 |
|
接着用遥控器对准红外接收器按按钮,就可以看到 类似下面的输入:
1 | pulse 1075 |
使用:
1 |
|
来获取 raw 格式的输入信号:
1 | Using driver default on device /dev/lirc1 |
发射
参考了这篇文章:
https://segmentfault.com/a/1190000014135418
模板文件获取
cd 到 /etc/lirc
下进行模板文件生成:
1 | cd /etc/lirc |
生成如下的格式:
1 | begin remote |
name on
以及下面的数字是 按钮on
对应的红外码.
gap
是程序计算出来的你的遥控器的参数.
修改模板文件
后面的步骤就是重复 mode2 -m -d /dev/lirc1
记录不同的按键对应的红外码,开头和结尾很大的数字要去除掉.
生成的文件格式:
1 |
|
最后,把配置文件复制到指定目录 /etc/lirc/lircd.conf/ 并重启lircd服务:1
2sudo cp aircon.lircd.conf /etc/lirc/lircd.conf.d/
sudo service lircd restart
发射信号
1 | irsend SEND_ONCE aircon on |
后记
空调遥控器每个按钮代表的是一个场景,而不是修改状态的一个步骤.举个例子,当前空调的状态是制热 25 度,我按下了温度+1 的按钮,并不是单纯的温度+1 的指令,而是把空调调整到 制热 26 度的状态.因此我们无法简单地录制温度+1 的指令.每个温度都需要录制单独的状态.
由于树莓派版本/传感器版本/lirc 版本不同,实现的过程也会有很大的不同,如果遇到问题可以发邮件给我,我们一起讨论.