树莓派3B,网上买的红外收发模块,参考网上资料自己捯饬了下,如下:
1、安装LIRC软件
sudo apt-get install lirc
2、编辑config.txt
sudo vim /boot/config.txt
添加3、参考网上资料编辑LIRC的配置文件
sudo vim /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"
mode2 -d /dev/lirc0
(使用任何红外线遥控器,对着红外收发板按下任意按键时,屏幕打印一堆space、pulse的内容,就说明红外线接收功能正常。)
irrecord -d /dev/lirc0 ~/lircd.conf (根据提示操作即可)
录制完成可以在~/lircd.conf 中看到类似如下:
begin codes
KEY_0 0xAXXXXXX
end codes
<<<<<<<<<<
name ~/lircd.conf
bits 32
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100 //怀疑此处是指误差范围30%
header 9118 4393 //NEC格式,第一个完整 引导码:9 ms + 4.5 ms
one 670 1579 //逻辑“1”是由0.56ms的38KHZ载波和1.68ms的无载波间隔组成
zero 670 460 //逻辑“0”是由0.56ms的38KHZ载波和0.560ms的无载波间隔组成
ptrail 671 //结束位是0.56ms
repeat 9124 2153 //重复引导码:9 ms + 2.25 ms
gap 107516 //两个引导脉冲上升沿之间的间隔都是108ms
toggle_bit_mask 0x0 //若红外码为RC6码则需要获取toggle_bit_mask
begin codes
KEY_0 0xA81B58A7
end codes
例如:KEY_0 0xA81B58A7
get_lengths()通过采样值,计算出红外遥控码的特性。在获取红外的数据特征之后,get_lengths()调用get_scheme()函数来分析红外的协议。此例采用的是是NEC Protocol 的PWM( 脉冲宽度调制) 标准:
1)A81B表示16位用户代码;
2)58表示8位数据代码(0101 1000),A7表示8位取反的数据代码 (1010 0111);
需要注意的是:波形先是发低位地址再发高位地址,所以对应的KEY_0对应的键值是 1A(0001 1010)。
参考文章:
http://blog.csdn.net/zhangfei714/article/details/42424199
https://wenku.baidu.com/view/422790114431b90d6c85c73b.html
https://www.cnblogs.com/lijumiao/archive/2013/07/30/3225660.html
>>>>>>>>>>>
8、复制配置文件后,重启LIRC软件注意:
在使用irsend命令 时,提示如下:
irsend: could not connect to socket
irsend: No such file or directory;
说是需要启动lircd服务,执行如下:
sudo lircd -d /dev/lirc0
提示如下错误:
can't open or create the file /var/run/lirc;
No such file or directory;
你可以手动创建创建文件夹,sudo mkdir /var/run/lirc ,然后 sudo lircd -d /dev/lirc0
但是,每次开机都要执行这两步。
如果不想每次都执行,可以在/etc/rc.local中的 exit 0 前添加
mkdir /var/run/lirc
lircd -d /dev/lirc0
这样,应该就OK了。