通过树莓派的 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 版本不同,实现的过程也会有很大的不同,如果遇到问题可以发邮件给我,我们一起讨论.