linux - 树莓派 gpio 命令行 sysfs 不设置 gpio 输出高

标签 linux bash raspberry-pi

所以我一直在尝试通过使用命令行和 sysfs 写入和读取 /sys/class/gpio/ 让我的 Raspberry Pi GPIO 正常运行。根据以下教程,我无法复制将 GPIO 设置为输出并将其值设置为高值 (1)。

this one

and this one

我期望发生的是当我运行以下命令时

$ echo 18 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio18/direction
$ echo 1 > /sys/class/gpio/gpio18/value

我看到了以下命令的结果

$ cat /sys/class/gpio/gpio18/value
1

澄清一下,我没有连接到 GPIO 引脚,我真的只对读回输出值感兴趣并使其与我设置的值相同。对于它的值(value),我正在尝试为 Pi 的 GPIO 引脚制作我自己的 Ruby 驱动程序,并且我正在检查我是否能够读回我设置的相同 gpio 值(如果它是输出)。

以下是一个shell session 作为证明。

权限和操作系统版本控制

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.34+ #1110 Mon Apr 16 14:51:42 BST 2018 armv6l GNU/Linux
pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.4 (stretch)
Release:    9.4
Codename:   stretch
pi@raspberrypi:~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

通用输入接口(interface) 18

pi@raspberrypi:~ $ cd /sys/class/gpio/
pi@raspberrypi:/sys/class/gpio $ ls -a
.  ..  export  gpiochip0  unexport
pi@raspberrypi:/sys/class/gpio $ echo 18 > export 
pi@raspberrypi:/sys/class/gpio $ ls -a
.  ..  export  gpio18  gpiochip0  unexport
pi@raspberrypi:/sys/class/gpio $ cd gpio18/

GPIO 18 的权限和组

pi@raspberrypi:/sys/class/gpio/gpio18 $ stat value 
  File: value
  Size: 4096        Blocks: 0          IO Block: 4096   regular file
Device: fh/15d  Inode: 16223       Links: 1
Access: (0770/-rwxrwx---)  Uid: (    0/    root)   Gid: (  997/    gpio)
Access: 2018-05-01 00:41:52.493284419 +0000
Modify: 2018-05-01 00:41:52.493284419 +0000
Change: 2018-05-01 00:41:52.500207389 +0000
 Birth: -

尝试将它设置为 out 和 high

pi@raspberrypi:/sys/class/gpio/gpio18 $ ls -a
.  ..  active_low  device  direction  edge  power  subsystem  uevent  value
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
in
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo out > direction 
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo 1 > value 

这是我希望值文件的内容为 1

pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo in > direction 
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
in
none
0

更多检查

pi@raspberrypi:/sys/class/gpio/gpio18 $ echo high > direction 
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo low > direction 
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
out
none
0

对 GPIO 23 进行同样的尝试

pi@raspberrypi:/sys/class/gpio/gpio18 $ cd ..
pi@raspberrypi:/sys/class/gpio $ echo 23 > export 
pi@raspberrypi:/sys/class/gpio $ ls -a
.  ..  export  gpio18  gpio23  gpiochip0  unexport
pi@raspberrypi:/sys/class/gpio $ cd gpio23/

权限和组

pi@raspberrypi:/sys/class/gpio/gpio23 $ stat value
  File: value
  Size: 4096        Blocks: 0          IO Block: 4096   regular file
Device: fh/15d  Inode: 16238       Links: 1
Access: (0770/-rwxrwx---)  Uid: (    0/    root)   Gid: (  997/    gpio)
Access: 2018-05-01 01:26:37.121782992 +0000
Modify: 2018-05-01 01:26:37.121782992 +0000
Change: 2018-05-01 01:26:37.126033971 +0000
 Birth: -

尝试将它设置为 out 和 high

pi@raspberrypi:/sys/class/gpio/gpio23 $ ls -a
.  ..  active_low  device  direction  edge  power  subsystem  uevent  value
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value 
0
in
none
0
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo out > direction 
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo 1 > value  

这是我希望值文件的内容为 1

pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo in > direction 
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value 
0
in
none
0

更多检查

pi@raspberrypi:/sys/class/gpio/gpio23 $ echo high > direction 
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo low > direction 
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value 
0
out
none
0

清理

pi@raspberrypi:/sys/class/gpio/gpio23 $ cd ..
pi@raspberrypi:/sys/class/gpio $ echo 18 > unexport 
pi@raspberrypi:/sys/class/gpio $ echo 23 > unexport 
pi@raspberrypi:/sys/class/gpio $ ls -a
.  ..  export  gpiochip0  unexport
pi@raspberrypi:/sys/class/gpio $

这是全新安装的 NOOBS 以及在其上运行的第一条命令。似乎所有其他 sysfs 功能都按预期工作,除了 GPIO 的值文件。我对这种实际行为与我的预期行为不同的唯一解释是,要么有继承的上拉/下拉将输出保持在某个值,而没有下沉到某些电路(这对我来说仍然没有意义但是我以前错了)或者我的期望完全错误,值文件没有反射(reflect)引脚设置的实际物理电压水平。

也许一些更有用的信息是我不想使用命令行实用程序来执行此操作,我只想使用我正在构建的驱动程序的文件系统。话虽这么说,我用过

gpio write 18 1

但是读取GPIO 18的值文件内容时,结果和上面一样。

最佳答案

这是一个糟糕的 Raspberry Pi。我刚收到一个新的。这是一个 session 。

pi@raspberrypi:~ $ cd /sys/class/gpio/
pi@raspberrypi:/sys/class/gpio $ ls -a
.  ..  export  gpiochip0  unexport
pi@raspberrypi:/sys/class/gpio $ echo 18 > export 
pi@raspberrypi:/sys/class/gpio $ ls -a
.  ..  export  gpio18  gpiochip0  unexport
pi@raspberrypi:/sys/class/gpio $ cd gpio18/
pi@raspberrypi:/sys/class/gpio/gpio18 $ ls -a
.  ..  active_low  device  direction  edge  power  subsystem  uevent  value
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
in
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo out > direction 
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo 1 > value 
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
out
none
1

关于linux - 树莓派 gpio 命令行 sysfs 不设置 gpio 输出高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50120778/

相关文章:

linux - 在 Linux 中存储常用命令

bash - 如何从 Makefile 运行 bash 脚本?

python - Pyserial 不能像 linux shell 那样写入 tty

python - python中的非阻塞事件调度

linux - Linux 上应用程序的环境性能参数

c - 如何获得 NFS 文件句柄?

linux - 如何在虚拟机中的主机- guest 文件系统上使用 Git worktree

bash - 带换行符的管道字符串到 bash 中的命令?

linux - 文件夹名称 文件夹内

javafx - JavaFX 中 Raspberry Pi 的触摸屏校准不起作用