树莓派红外遥控 (lirc、gpio-ir)—— 一篇就够了!

超简单!树莓派红外遥控配置

  • 前言
  • 第一步:驱动配置(/boot/config.txt)
  • 第二步:安装lirc,并配置
  • 第三步:测试
  • 第四步:按键配置(/etc/lirc/lircd.conf)
  • 第五步:测试
  • 第六步:使用
    • 配置(~/.lircrc)
  • 写在最后

前言

  1. 网上很多关于树莓派红外配置的教程,但都讲的很不清晰,也有很多是上个世纪的老古董了,本篇是综合众多教程并结合本人树莓派系统(2020-05-27 Raspberry Pi OS (32-bit) Lite)写的。
  2. 在很多重要配置处下方,会对比其他教程。
  3. 本配置是基于 4.19.x 及更高内核的,你并不需要降低你的系统内核,如果你是4.19.x以下的内核,那么网上有很多教程。
  4. 本教程仅配置红外接收。

第一步:驱动配置(/boot/config.txt)

	# dtoverlay=gpio-ir,gpio_pin=17 
	# dtoverlay=gpio-ir-tx,gpio_pin=18 # 只配置接收可不修改

前边注释 ‘#’ 去掉,这两行在 /boot/config.txt文件默认是有的
17对应GPIO17(红外接收),18对应GPIO18(红外发射)
这里需要重启一次树莓派

对比:

其他教程有说配置/etc/modules文件的,这里并不需要!
有说modprobe加载lirc-rpi的,这里并不需要!4.19.x 及更高内核并没有该驱动啦!
还有在/boot/config.txt配置 dtoverlay=lirc-rpi 的,这是4.19.x之前的配置方式!

第二步:安装lirc,并配置

sudo apt-get install lirc

这里跟其他教程一样,需要安装lirc软件包

/etc/lirc/lirc_options.conf 配置

driver          = default
device          = /dev/lirc1

修改这两处即可!
ls /dev 你会看到 lirc0、lirc1其中一个或两个,至此驱动程序配置成功,就这么简单!
上文device,接收就跟接收的GPIO引脚对应的设备一样,如果之前配置跟我一样,这里就一样即可。

对比:

其他教程有修改 /etc/lirc/hardware.conf 文件的,这里不需要,那是之前的修改方式。

第三步:测试

到这里你可以测试接收了

mode2 -d /dev/lirc1

执行该命令后 按遥控器会有类似下面的输出:

pulse 629
space 518
pulse 627
space 523
pulse 628
space 523
pulse 631
space 517
pulse 629

红外接收正常!!!

第四步:按键配置(/etc/lirc/lircd.conf)

lirc软件包有一个irrecord命令可以配置你的按键,但是准确度极低,这里我仅用它输出配置格式而已

irrecord -f -d /dev/lirc1
...
# 提示 Press RETURN to continue. 回车,之后等待,千万别按键
# 提示 Enter name of remote (only ascii, no spaces) : 输入配置文件的名字 (比如:mini_con)
# 提示 Press RETURN now to start recording. 回车开始录入
# 之后录入随意,我们只是为了获取配置文件格式,官方要求是按不同的遥控器键,至少出现1个点,但不超过10个点,直到出现提示
# 接下来会让输入键名,然后按住该键,这里建议用 KEY_1、KEY_2 类似的名字,这样不会报错,他默认是对键名格式有要求的,忽略则可以在 irrecord 命令后加 --disable-spacename
# 录入一两个键就可以了,回车结束,我们只为了获得配置文件格式
# 回车后可能在当前目录直接生成 mini_con.lirc.conf 文件,也可能会让按一个键再结束(注意!是按一个键,快按,不是按住不动!)
# 复制模板到 /etc/lirc/lircd.conf

这里强烈建议加 -f 参数,没有该参数输出的配置文件都有问题,看运气

配置文件格式就得到了!类似下面这种格式:

# 前边是一大片注释

begin remote

 name  mini_con
 flags RAW_CODES|CONST_LENGTH
 eps            30
 aeps          100

 gap          108106

     begin raw_codes

         name KEY_1
            9100    4521     628   
            
         name KEY_2
            9820    4520     556
            
		end raw_codes

end remote

该文件对格式,空格有严格要求!!!!!

接下来开始录入信号

mode2 -m -d /dev/lirc1

# 开始录入,配置 /etc/lirc/lircd.conf 文件
# 按要配置的键(比如 1 ),会有类似输出
	620000
		9170     4441      640      552      604      554
         609      552      635      528      612      551
         601      556      634      528      609      553
         614     1629      610     1632      635     1615
         627     1619      596     1602      639     1629
         611     1618      616     1605      633     1607
         638      552      610     1604      633     1615
         596      562      621      541      594      567
         595      564      568      594      593     1649
         566      598      568      601      591     1678
         516     1697      556     1692      547     1683
         546   132000

加-m参数是为了获得raw格式的输出,而不是前文space pulse格式输出
620000 并不是真的620000 ,反正会有一个很大的数(相比于9170)
132000 也不是真的 132000,也会有一个很大的数(相比于9170)
复制 两个大数之间的内容,复制到lircd.conf文件中 name KEY_X 下,第一个数要与原数位置对应,前文说过,这里有严格的空格要求,他这里每个字段都是右对齐的
切记!lircd.conf 文件中不要两个大数,亲测保留会报错的!!!
建议每个key配置后留一空行

name KEY_1
       xxxx    xxxx     xxx  
       ... 
 # 空行
name KEY_2
       xxxx    xxxx     xxxx
       ...

第五步:测试

可以测试按键配置了!

irw

按键,看是否跟配置的键名一样
类似如下输出:

xxxxxxxxx 0xXX KEY_1 mini_con

到此所有配置就结束了!!!

第六步:使用

本人使用的是 lirc 软件包中的 irexec

配置(~/.lircrc)

配置格式如下:

begin
        prog = irexec
        button = KEY_1
        config = python3 /root/pydata/lirc_commond/list_root.py && bash /root/pydata/lirc_commond/end.sh
end

begin
        prog = irexec
        button = KEY_2
        config = echo "This key is not set."
end

是不是 very nice

配置文件一定要在执行 irexec 命令的用户家目录,文件名为 .lircrc
在这里你就可以开始你的想象了 ^_^
ps:一键开启smb,一键apache2、httpd,或者控制一个硬件开关等等…

写在最后

欢迎留言、私信、讨论;
文章有知识性错误请立马联系博主,博主将非常感谢;
无需经过允许即可随意使用转载,知识本来就是被广泛用来学习的;
非常感谢您能看到此处,本文为博主学习笔记,如有不同见解,请不吝赐教。

你可能感兴趣的:(嵌入式,python,linux)