无法打开/dev/mem:不允许操作Raspberry Pi

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

我想构建一个小型机器人,可以通过 Raspberry Pi 控制单个 LED (WS2811),并实现音频输出。我通过 rpi_ws281x 库控制 LED,并通过 subprocess.call 函数控制音频输出。我现在的问题是 LED 必须通过 sudo 命令控制,否则会出现错误消息(无法打开 /dev/mem:不允许操作

Traceback (most recent call last):
  File "/home/pi/Desktop/robot.py", line 97, in <module>
    strip.begin()
  File "/home/pi/.local/lib/python3.11/site-packages/rpi_ws281x/rpi_ws281x.py", line 143, in begin
    raise RuntimeError('ws2811_init failed with code {0} ({1})'.format(resp, str_resp))
RuntimeError: ws2811_init failed with code -5 (mmap() failed)
Memory access error) occurs.

但是,通过 subprocess.call 的音频输出只能在不执行 sudo 命令的情况下起作用。由于这两个函数是在一个文件中实现的,因此我无法使用 sudo 来执行它们,也不能没有 sudo 来执行它们。因此,我现在尝试将用于控制 LED 的 GPIO 输出 12 添加到组中,以便仅获得 LED 的更多权限。不幸的是,当我将用户“pi”添加到“Gpio”和“kmem”组时,没有任何变化。我在其他论坛上读到,许多人建议切换到带有 SPI 的 GPIO PIn,但不幸的是我不明白为什么。

我尝试过的事情:

“Gpio”和“kmem”添加到组用户 pi 中。 执行此命令:

sudo usermod -aG gpio www-data
sudo chown root:gpio /dev/gpiomem
sudo chmod g+rw /dev/gpiomem

在文件中添加一行:

/etc/udev/rules.d/99-custom-permissions.rules
:

KERNEL=="mem", GROUP="kmem", MODE="0660"

添加到 sudoers 文件:%pi ALL=(ALL) ALL

有人可以帮助我吗?

python raspberry-pi subprocess
1个回答
0
投票

我已经解决了这个问题。我把12脚改成了10脚,兼容SPI。

请参阅此文档。

https://pypi.org/project/rpi-ws281x/

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