openSUSE:GPIO

跳转到:导航搜索

要管理 GPIO,您可以使用 'libgpiod' 包中的工具,适用于内核 >= 4.8,包括 Leap 15.0+ 和 Tumbleweed。您也可以使用已弃用的 'sysfs' 接口。

libgpiod

安装

要安装 libgpiod,只需从主 OSS 仓库安装即可。一键安装也可用: https://software.opensuse.net.cn/package/libgpiod

检查可用 GPIO:gpiodetect

gpiodetect 将列出所有 GPIO 芯片,打印它们的标签和 GPIO 线路的数量。

 gpiodetect

对于 RPi2,将返回

 gpiochip0 [pinctrl-bcm2835] (54 lines)


获取当前 GPIO 的信息:gpioinfo

 gpioinfo gpiochip0

将列出指定 gpiochip(此处为 gpiochip0)的所有线路,它们的名称、使用者、方向、活动状态和附加标志。对于 RPi2,它返回

 gpiochip0 - 54 lines:
       line   0:      unnamed       unused   input  active-high 
       line   1:      unnamed       unused   input  active-high 
       line   2:      unnamed       unused   input  active-high 
       line   3:      unnamed       unused   input  active-high 
       line   4:      unnamed       unused   input  active-high 
       line   5:      unnamed       unused   input  active-high 
       line   6:      unnamed       unused   input  active-high 
       line   7:      unnamed       unused   input  active-high 
       line   8:      unnamed       unused   input  active-high 
       line   9:      unnamed       unused   input  active-high 
       line  10:      unnamed       unused   input  active-high 
       line  11:      unnamed       unused   input  active-high 
       line  12:      unnamed       unused   input  active-high 
       line  13:      unnamed       unused   input  active-high 
       line  14:      unnamed       unused   input  active-high 
       line  15:      unnamed       unused   input  active-high 
       line  16:      unnamed       unused   input  active-high 
       line  17:      unnamed       unused   input  active-high 
       line  18:      unnamed       unused   input  active-high 
       line  19:      unnamed       unused   input  active-high 
       line  20:      unnamed       unused   input  active-high 
       line  21:      unnamed       unused   input  active-high 
       line  22:      unnamed       unused   input  active-high 
       line  23:      unnamed       unused   input  active-high 
       line  24:      unnamed       unused   input  active-high 
       line  25:      unnamed       unused   input  active-high 
       line  26:      unnamed       unused   input  active-high 
       line  27:      unnamed       unused   input  active-high 
       line  28:      unnamed       unused   input  active-high 
       line  29:      unnamed       unused   input  active-high 
       line  30:      unnamed       unused   input  active-high 
       line  31:      unnamed       unused   input  active-high 
       line  32:      unnamed       unused   input  active-high 
       line  33:      unnamed       unused   input  active-high 
       line  34:      unnamed       unused   input  active-high 
       line  35:      unnamed       "led1"  output  active-high [used]
       line  36:      unnamed       unused   input  active-high 
       line  37:      unnamed       unused   input  active-high 
       line  38:      unnamed       unused   input  active-high 
       line  39:      unnamed       unused   input  active-high 
       line  40:      unnamed       unused   input  active-high 
       line  41:      unnamed       unused   input  active-high 
       line  42:      unnamed       unused   input  active-high 
       line  43:      unnamed       unused   input  active-high 
       line  44:      unnamed       unused   input  active-high 
       line  45:      unnamed       unused   input  active-high 
       line  46:      unnamed       unused   input  active-high 
       line  47:      unnamed       "led0"  output  active-high [used]
       line  48:      unnamed       unused   input  active-high 
       line  49:      unnamed       unused   input  active-high 
       line  50:      unnamed       unused   input  active-high 
       line  51:      unnamed       unused   input  active-high 
       line  52:      unnamed       unused   input  active-high 
       line  53:      unnamed       unused   input  active-high

读取值(输入):gpioget

 gpioget gpiochip0 4

将读取 gpiochip0 中 gpio 4 的值,并返回

 1
 gpioget gpiochip0 4 5

将读取 gpiochip0 中 gpio 4 和 5 的值,并返回

 1 1

写入值(输出): gpioset

 gpioset --mode=wait gpiochip0 4=1

将把 GPIO 4 的值设置为 1,并等待您按下 ctrl-c 退出并停止设置该值。

 gpioset --mode=wait gpiochip0 4=1 5=0

将把 GPIO 4 的值设置为 1,将 GPIO 5 的值设置为 0,并等待您按下 ctrl-c 退出并停止设置该值。

使用 --mode= 选项,您可以等待 ctrl-c(如上所述),等待信号,或在退出(并释放 GPIO)之前等待一段时间。

GPIO 的释放可能会将其重置为高阻抗(未连接)状态,或者保持最后一个值。这取决于 GPIO 芯片。大多数 SoC GPIO 将重置为高阻抗,而 I2C GPIO 芯片将保持设置的最后一个值。

libgpiod 绑定(C++ 和 Python)

您可以使用 C++ 绑定。示例在此处提供: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/cxx/examples

对于 Python 绑定,您需要安装 python-libgpiod。示例在此处: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/python/examples

python3-gpiod

python3-gpiod 包包含来自 libgpiod 的 python 绑定,以从 python3 访问 GPIO。


安装

要安装 python3-gpiod,您只需使用 zypper 或 YaST,因为它包含在 openSUSE 发行版的仓库中。

一键安装也可用: https://software.opensuse.net.cn/package/python3-gpiod

示例

您可以在 https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/python/examples 上找到很多示例


sysfs 接口(已弃用)

这个旧的(已弃用)接口目前仍然有效,但不推荐使用。

export:获取对 GPIO 的访问权限

 echo 229 > /sys/class/gpio/export

将获取对 GPIO 229 的访问权限。

请注意,基数(即 /sys/class/gpio/gpiochipN 中的 N)必须添加到 GPIO 号。这通常没有提及,因为在 Raspbian 中 N 为 0。

可能有多个芯片提供 GPIO。尝试查看 /sys/class/gpio/gpiochipN/label 以找出哪个是哪个。

direction:选择输入或输出引脚

 echo in > /sys/class/gpio/gpio229/direction

将把 GPIO 229 设置为输入。

 echo out > /sys/class/gpio/gpio229/direction

将把 GPIO 229 设置为输出,初始值为 0,否则,使用 high 值设置为输出,默认值为 1。

value:读取/写入值

 cat /sys/class/gpio/gpio229/value

将输出 GPIO 229 的当前值。

 echo 1 > /sys/class/gpio/gpio229/value

将把 GPIO 229 设置为 1

unexport:释放对 GPIO 的访问权限

完成后,使用以下命令释放对 GPIO 的访问权限

 echo 229 > /sys/class/gpio/unexport

参见