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