树莓派4b 红外发射与接收
硬件:树莓派4b 1G
系统:2020-02-13-raspbian-buster
内核:4.19.97
安装lirc:
sudo apt-get update sudo apt-get install lirc
修改confi.txt:
sudo vim /boot/config.txt
找到 infrared module 的部分,按需要修改接收引脚和发射引脚
树莓派默认17对应GPIO17(红外接收),18对应GPIO18(红外发射),但我修改红外的发射和接收引脚,测试正常使用
config.txt相关文件内容:
# Uncomment this to enable infrared communication. dtoverlay=gpio-ir,gpio_pin=17 dtoverlay=gpio-ir-tx,gpio_pin=18
我的配置:
修改驱动文件/etc/lirc/lirc_options.conf :
sudo vim /etc/lirc/lirc_options.conf
# 把: driver = devinput device = auto # 修改为: driver = default device = /dev/lirc0
将device设置为/dev/lirc1也可以,但我测试发现这样只能接收红外信号,而且device无论设置为/dev/lirc0还是/dev/lirc1,接收红外时只能使用/dev/lirc1,故我认为lirc0应该是红外发射设备,lirc1是红外接收设备
我的配置:
重启树莓派:
sudo reboot
红外信号接收测试 :
mode2 -d /dev/lirc1
1.如果提示以下信息,请检查mode2 -d /dev/lirc1,红外接收应该是/dev/lirc1
Trying device: /dev/lirc0
Please use the --raw option to access the device directly instead through the abstraction layer
2.如果失败可能是必须停止lircd服务才能进入接收红外信号模式,可以先运行sudo service lircd stop再运行红外接收命令
红外发射配置(树莓派可以通过lirc库发射接收红外信号,所以我们可以通过lirc库进行红外信号的发射):
1.生成遥控器配置文件的样板:
lirc有一个自动录入红外信号、生成遥控器文件的功能,但该方法只适于简单的设备
# 请cd到有读写权限的目录下,因为需要创建一个遥控器配置文件
# 参数-f --force 表示 Force raw mode
运行:
irrecord -f -d /dev/lirc1
认真阅读提示信息,根据提示按Enter、输入 遥控器名称 、按Enter、按照要求随机按遥控器、输入 按钮名称 、按对应的遥控器按钮。由于只是为了生成样板,可以只录制一个按钮。
# 提示 Press RETURN to continue. --> 回车等待
# 提示 Enter name of remote (only ascii, no spaces) --> 输入配置文件的名字 (只能输入ASCII字符,不能输入空格)
# 提示 Press RETURN now to start recording. --> 回车开始录入
# 这一步操作时间较长,嫌麻烦的可以直接使用模板修改
# 官方要求是按不同的遥控器键,至少出现1个点,但不超过10个点,直到出现提示,由于我们只是为了获取配置文件格式,我们可以只录制一两个键,但不管怎样需要录满两行点才能出现下一步的提示
# 提示 Please enter the name for the next button (press <ENTER> to finish recording --> 输入按钮名称,然后按住该按钮
# 这一步操作忽略则可以在 irrecord 命令后加 --disable-spacename
# 建议用 KEY_1、KEY_2 类似的名字,由于他默认是对键名格式有要求的,也可以通过irrecord -l命令查看可用键名
# 提示 Press RETURN to continue --> 回车后会在当前目录生成一个配置文件,文件名格式:遥控器名称.lirc.conf
# 复制模板到 /etc/lirc/lircd.conf目录下
样板模板:该模板文件对于空格要求比较严格,每个字段为右对齐
begin remote name 遥控器名称(配置文件名) flags RAW_CODES(有些是这样的-->RAW_CODES|CONST_LENGTH,但建议RAW_CODES) eps 30 aeps 100 gap 19991(一般默认的便可以) begin raw_codes name 按钮名称 9042 4438 700 1602 705 526 678 528 681 531 674 527 679 528 679 528 677 527 677 528 679 528 678 528 677 1632 676 529 676 531 676 531 649 556 672 532 650 558 654 552 652 553 649 558 648 1661 650 558 648 558 648 1661 649 562 644 558 647 558 648 1657 651 558 647 1659 650 557 653 553 648 1660 648 557 649 9056 2212 593 9056 2245 587 end raw_codes end remote
2.录入红外信号 :
mode2 -d /dev/lirc1
对着红外接收器按下红外遥控器,控制台会输出如下形式的数字:
16777215 9059 4432 706 1604 706 528 679 524 681 1603 703 526 680 1602 715 1596 704 526 679 527 679 527 680 527 679 1604 705 530 673 530 674 529 682 529 675 530 674 532 674 532 650 557 648 556 654 1653 676 533 649 559 647 1667 639 559 648 558 656 553 647 1658 648 558 650 1659 649 559 647 559 648 1659 648 558 646 19991 648 558 648 558 650 567 638 557 648 1668 640 557 649 558 650 558 646 1660 650 556 649 557 649 559 654 552 648 1657 651 558 647 554 660 549 649 559 647 557 649 559 648 559 647 557 644 561 648 559 648 556 647 560 648 556 652 563 642 1658 648 1661 649 1660 646 1658 650
除去第一行很大的那个数,把其他数据全部复制,粘贴到配置文件的 name 按钮名称 的下方,注意这些字段都是右对齐,第一个数要与原数位置对应,一般第一个数字在name的字符e下开始
我的配置:
3.重启lirc服务:
sudo service lircd restart
测试 :
sudo irw
对着红外接收器按下之前录制的按键。控制台会出现如下形式字段:
00000000xxxxxxxx xx 按钮名称 遥控器名称
红外发射测试:
# 发射命令:irsend SEND_ONCE 遥控器名称 按钮名称
irsend SEND_ONCE orange_scale_ir KEY_16
1.如果前面的步骤一切正常,但在发射信号时报错“transmission failed”。请检查生成的遥控器配置文件,查看flags项,若是flags RAW_CODES|CONST_LENGTH,请尝试将其修改成flags RAW_CODES并重启lircd服务。再测试能否发射信号
2.如果发射信号时报错以下信息,请查看驱动文件/etc/lirc/lirc_options.conf中是否修改为device=/dev/lirc0或者检查config.txt中发射引脚和硬件连接引脚是否一致:
hardware does not support sending
Error running command: Input/output error
3.如果发射信号时报错以下信息,分别是/etc/lirc/lircd.conf目录下没有该配置文件或该配置文件中没有该按钮信息
unknown remote: "遥控器名称"
Error running command: Input/output error
或
unknown command: "按钮名称"
Error running command: Input/output error
4.还有要注意的是,如果配置文件中的按钮信息不准确也会报"Error running command"错误,比如我测试时少复制一行内容或者接收的红外数据中有一行空格我复制到配置文件却删除了,这可能会导致报错,具体解决方法还是要看报错信息
参考:
https://blog.csdn.net/weixin_30896727/article/details/116803129?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242
https://segmentfault.com/a/1190000014135418
https://www.jianshu.com/p/abdcd3e06726
https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=235256