我一直试图通过使用命令行和sysfs写入和读取/sys/class/gpio/
来使我的Raspberry Pi GPIO正确运行。根据以下教程,我无法复制将GPIO设置为输出并将其值高(1)的操作。
我期望的结果是当我运行以下命令时:
$ 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引脚,我只是希望读取输出值,并且它与我设置的值相同。值得一提的是,我正在尝试制作自己的树莓派GPIO引脚Ruby驱动程序,并且我正在检查是否能够读取相同的GPIO值,如果它是输出。
以下是作为证明的shell会话。
权限和操作系统版本
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
GPIO 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: -
尝试将其设置为输出和高电平。
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上运行的第一批命令。除了GPIO的值文件之外,所有其他sysfs功能似乎都按预期工作。我对这种实际行为与我的预期行为不同的唯一解释是,可能存在继承的拉/推电阻将输出保持在某个固定值而没有接到电路中(这对我来说仍然毫无意义,但以前我也犯过错),或者我的期望是错的,值文件并不反映引脚设置的实际物理电压水平。
也许更有用的信息是,我不想使用命令行工具来完成这个任务,我只想使用我正在构建的驱动程序的文件系统。话虽如此,我已经使用了
gpio write 18 1
但是当读取GPIO 18的值文件内容时,结果与上述相同。