尽管 /sys/class/gpio/gpio18/value 具有文件权限,但仍无法写入 GPIO 引脚

Cam*_*all 8 permissions sysfs gpio

这是在树莓派上。

这是 sudo ls -lL /sys/class/gpio/gpio18 的输出:

-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 active_low
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:52 direction
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 edge
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 power
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 subsystem
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 uevent
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 value
Run Code Online (Sandbox Code Playgroud)

所以看起来我现在应该可以使用价值了,太好了。然而:

cameron@raspberrypi~ $ echo 1 > /sys/class/gpio/gpio18/value
-bash: /sys/class/gpio/gpio18/value: Permission denied
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?如果我 chmod 777 一切正常,那么它就可以工作,但是当我拥有该文件时,我不必这样做。

Cam*_*all 8

我通过将卡梅隆添加到 gpio 组解决了这个问题:

sudo usermod -aG gpio cameron
gpio export 18 out
echo 1 > /sys/class/gpio/gpio18/value
Run Code Online (Sandbox Code Playgroud)

现在一切正常。


gol*_*cks 5

我没有以这种方式使用 GPIO 引脚,但根据 lgeorgets第二条评论和这篇文章,您必须首先将引脚的方向设置为“out”。该direction节点归 root 所有,因此:

sudo sh -c 'echo out > /sys/class/gpio/gpio18/direction'
Run Code Online (Sandbox Code Playgroud)

sh -c这里需要在根子shell中执行该命令。这是因为sudo echo out > direction将以echoroot 身份执行,但重定向 ( > direction) 将由您当前的(非 root )shell 完成。你也可以这样做su root

之后,你应该,希望能够设置valuecameron