树莓派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

posted on 2021-08-18 22:15  锦笙  阅读(2228)  评论(0编辑  收藏  举报

导航