我想构建一个小型机器人,可以通过 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
有人可以帮助我吗?