树莓派新用户无法访问 GPIO

当树莓派的新用户尝试通过 WiringPi 访问 GPIO 时,程序可能会停止,并显示类似这样的错误:

wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
Aborting your program because if it can not access the GPIO
hardware then it most certainly won't work
Try running with sudo?

通常的修复方法是把该用户加入 gpio 组:

sudo usermod -a -G gpio user_name

user_name 替换为实际的登录名。修改用户组成员关系后,退出登录再重新登录,或重启系统,以便新的用户组生效。可以用下面的命令检查当前生效的用户组:

groups

如果 /dev/gpiomem 的权限仍然不正确,可以重置它的所有者、用户组以及组写入权限:

sudo chown root:gpio /dev/gpiomem
sudo chmod g+rw /dev/gpiomem

如果问题仍未解决,而你是在 Python 虚拟环境中运行脚本,请停用虚拟环境,并在普通 shell 中再次测试。问题可能是脚本启动方式造成的,而不是 GPIO 权限本身造成的。

作为最后的办法,有些程序会尝试直接访问 /dev/mem,而不是 /dev/gpiomem。在这种情况下,可以把同样的用户组所有权和权限模式应用到 /dev/mem

sudo chown root:gpio /dev/mem
sudo chmod g+rw /dev/mem

使用 /dev/mem 时要小心:它提供的系统内存访问范围比 /dev/gpiomem 广得多。当库支持时,应优先使用 /dev/gpiomem

下面两个命令都是把用户加入用户组的等效方式:

sudo usermod -a -G target_group user_name
sudo adduser user_name target_group

例如,下面两个命令都会把 user_name 加入 gpio 组:

sudo usermod -a -G gpio user_name
sudo adduser user_name gpio

Leave a Reply