带有 Centos 和 RPI.GPIO 的 RPi4:无法添加边缘检测

问题描述 投票:0回答:1

我正在 RPi4 上运行带有内核 5.4.206-v8.1.el7 的 CentOS7,并且我正在尝试使用 RPi.GPIO-0.7.1-py3.9 (*) 在 GPIO 上设置边缘检测 (*)

无论我尝试配置哪个引脚,我都会收到以下错误:

RPi.GPIO.add_event_detect(self.pin, RPi.GPIO.BOTH, self._on_event) RuntimeError: Failed to add edge detection

当我在 sudo 中运行时我也会得到它。我之前调整了权限以获得:

[blabla@hostname]$  ls -l /dev/gpiomem  crw-rw----. 1 root gpio 246, 0 Jan  1  1970 /dev/gpiomem

这样 GPIO 在输出模式下(例如让 LED 闪烁)就可以正常工作。

使用 strace 运行我的基于 RPi.GPIO 的基本边缘检测代码 (*),我注意到一些可疑的行:

faccessat(AT_FDCWD, "/sys/class/gpio/gpio6", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/sys/class/gpio/export", O_WRONLY) = -1 EACCES (Permission denied)

  1. 我以为 RPi.GPIO 现在是基于 GPIO 字符而不是 sysfs 了?虽然我远不是专家,所以我可能是错误的/困惑的

  2. 我稍微研究了一下我的 RPi 上的 /sys/class/gpio:

[blabla@hostname]$ ls /sys/class/gpio/ export  gpiochip446  gpiochip454  unexport

在我看来,尝试创建 /sys/class/gpio/gpio6 在这里没有任何意义,应该读取控制器的基数并执行 base+6 ?这难道不能解释权限被拒绝的原因吗?

  1. 我尝试运行 bcm2835 库的 event.c 示例,效果很好,即正确检测到按下的按钮。出于技术原因,我想使用 RPi.GPIO。

再次抱歉,我远不是专家,所以可能只是让自己感到困惑,任何帮助解除这种情况的帮助都会很棒!

非常感谢 最美好的祝愿

(*)

import RPi.GPIO as GPIO

X=6

# Set pin X in GPIO mode
GPIO.setmode(GPIO.BCM)
GPIO.setup(X, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Define a callback function to detect edge events
def my_callback(channel):
    print(f"Edge event detected on pin {X}")

# Set the callback function
GPIO.add_event_detect(X, GPIO.RISING, callback=my_callback)

# Main loop
try:
    while True:
        pass

# Exit gracefully
except KeyboardInterrupt:
    GPIO.cleanup()
python-3.x centos7 gpio
1个回答
0
投票

我使用的是 Raspberry Pi 4。 我创建并激活虚拟环境 (python3 -m venv myenv,源 myenv/bin/activate) 我用 python 制作应用程序。 在我格式化 Raspberry Pi 4 之前,应用程序可以正常工作。但格式化后,出现以下错误。

(RuntimeWarning:此通道已在使用中,无论如何都会继续。使用 GPIO.setwarnings(False) 禁用警告。 GPIO.设置(R1_PIN,GPIO.OUT) 运行时错误:无法添加边缘检测)

它显示“GPIO 引脚已在使用中”。 我找不到解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.