我正在 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)
我以为 RPi.GPIO 现在是基于 GPIO 字符而不是 sysfs 了?虽然我远不是专家,所以我可能是错误的/困惑的
我稍微研究了一下我的 RPi 上的 /sys/class/gpio:
[blabla@hostname]$ ls /sys/class/gpio/ export gpiochip446 gpiochip454 unexport
在我看来,尝试创建 /sys/class/gpio/gpio6 在这里没有任何意义,应该读取控制器的基数并执行 base+6 ?这难道不能解释权限被拒绝的原因吗?
再次抱歉,我远不是专家,所以可能只是让自己感到困惑,任何帮助解除这种情况的帮助都会很棒!
非常感谢 最美好的祝愿
(*)
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()
我使用的是 Raspberry Pi 4。 我创建并激活虚拟环境 (python3 -m venv myenv,源 myenv/bin/activate) 我用 python 制作应用程序。 在我格式化 Raspberry Pi 4 之前,应用程序可以正常工作。但格式化后,出现以下错误。
(RuntimeWarning:此通道已在使用中,无论如何都会继续。使用 GPIO.setwarnings(False) 禁用警告。 GPIO.设置(R1_PIN,GPIO.OUT) 运行时错误:无法添加边缘检测)
它显示“GPIO 引脚已在使用中”。 我找不到解决方案。