1

我买了这个 [IR Sensor and Remote][1] 与我的 Raspberry Pi 3 一起使用。

我有 LIRC 设置,并且能够使用以下命令检测来自 IR 遥控器的输入:

须藤 /etc/init.d/lirc 停止

模式2 -d /dev/lirc0

当我运行上述命令时,我能够检测到来自 IR Remote 的输入。当我按下 IR REmote 上的任何按钮时,我会得到如下输出:

在此处输入图像描述

我的问题是 - 在上面的输出中,我在遥控器上按下了“2”。我该如何解密(在 python 中)真正按下了哪个按钮?

更新1:

我尝试使用 python-lirc 包,但在这一行出现错误:

sockid=lirc.init(

4

3 回答 3

1

前面的答案简化了 lirc 解码。由于您有一个工作模式2,内核驱动程序可以工作并将正确的数据发送到 lircd。但是,mode2 不会告诉您解码是否有效。

要检查解码,请使用 irw(1)。在您获得该程序的工作输出之前,您不知道 lirc 是否可以解码您的遥控器。

上面描述的 lircrc 文件用于将通用按钮按下(如 irw 所示)转换为特定于应用程序的命令。要调试此文件,请使用 ircat(1)。

当你有来自 irw(1) 和 ircat(1) 的工作输出时,你的 lirc 设置就完成了。在使用任何 python 包之前,确实需要一个有效的 lirc 设置。顺便说一句,从即将到来的 0.10.0 lirc 将具有本机 python 绑定。

可以在http://lirc.org/html/configuration-guide.html找到设置 lirc 的综合指南

于 2017-04-30T09:21:36.040 回答
0

您可能不想为此使用mode2输出。有一个可用的 Python 库(Here),这对于这个项目来说可能是一个更好的方法。

代码:

import lirc
sockid = lirc.init("myprogram")
print(lirc.nextcode())
lirc.deinit()

lircrc 配置文件

begin
  button = 1          # what button is pressed on the remote
  prog = myprogram    # program to handle this command
  config = one, horse # configs are given to program as list
end

begin
  button = 2
  prog = myprogram
  config = two
end

按下按钮 1 后的结果

['one', 'horse']
于 2017-04-29T01:57:50.420 回答
0

现在没有必要使用 lirc,因为 IR 事件是通过内核处理的

在我的情况下,我在 GPIO 引脚上设置了一个 IR 接收器/boot/config.txt

dtoverlay=gpio-ir,gpio_pin=16

然后安装了evdev

pip install evdev

重新启动,以下工作(您的输入设备路径不同)

from evdev import InputDevice, categorize, ecodes
dev = InputDevice('/dev/input/event0')

for event in dev.read_loop():
    print(event)

当按下遥控器上的一些按钮时,我得到:

$> sudo python3 irtest.py
device /dev/input/event0, name "gpio_ir_recv", phys "gpio_ir_recv/input0"
event at 1639133806.295636, code 04, type 04, val 64
event at 1639133806.295636, code 00, type 00, val 00
event at 1639133806.405607, code 04, type 04, val 64
event at 1639133806.405607, code 00, type 00, val 00
event at 1639133808.745610, code 04, type 04, val 16
...
于 2021-12-10T11:52:16.890 回答