openSUSE:GPIO

Jump to: navigation, search

To manage GPIO, you can use tools from 'libgpiod' package, available for kernel >= 4.8, which includes Leap 15.0+ and Tumbleweed. You can also use the deprecated 'sysfs' interface.

libgpiod

Installation

To install libgpiod, just install it from main OSS repo. One click installation is also available : https://software.opensuse.org/package/libgpiod

Check available GPIO: gpiodetect

gpiodetect will list all GPIO chips, print their labels and number of GPIO lines.

 gpiodetect

will return for the RPi2:

 gpiochip0 [pinctrl-bcm2835] (54 lines)


Get information of current GPIO: gpioinfo

 gpioinfo gpiochip0

will list all lines of specified gpiochips (here, gpiochip0), their names, consumers, direction, active state and additional flags. For RPi2, it returns:

 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

Read values (input): gpioget

 gpioget gpiochip0 4

will read value of gpio 4 from gpiochip0 and will returns:

 1
 gpioget gpiochip0 4 5

will read value of gpio 4 and 5, from gpiochip0 and will returns:

 1 1

Write values (output): gpioset

 gpioset --mode=wait gpiochip0 4=1

will set the value of GPIO 4 to 1 and wait you hit ctrl-c to exit and stop setting the value.

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

will set the value of GPIO 4 to 1 and GPIO 5 to 0 and wait you hit ctrl-c to exit and stop setting the value.

With --mode= option, you can wait for ctrl-c (as above), wait for a signal, or an amount of time before exiting (and releasing the GPIO).

The release of the GPIO may reset it to an high-impedance (unconnected) state or leave the last value. It depends on the GPIO chip. Most SoC GPIO will reset to high impedance, whereas I2C GPIO chips will keep the last value set.

libgpiod bindings (C++ and Python)

You can use C++ binding. Examples are provided here: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/cxx/examples

For Python binding, you need to install python-libgpiod. Examples are here: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/python/examples

python3-gpiod

python3-gpiod package contains the python binding from libgpiod to access GPIO from python3.


Installation

To install python3-gpiod, you just need to use zypper or YaST as it is part of openSUSE distributions repositories.

One click installation is also available : https://software.opensuse.org/package/python3-gpiod

Example

You have lots of example on https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/python/examples:


sysfs interface (deprecated)

This old (deprecated) interface is still working so far, but is not recommended.

export: get access to your GPIO

 echo 229 > /sys/class/gpio/export

will get access to GPIO 229.

Note that the base, which is the N from /sys/class/gpio/gpiochipN, must be added to the GPIO number. This is never mentioned because on Raspbian N is 0.

There may be more than one chip providing GPIO. Try looking in /sys/class/gpio/gpiochipN/label to find out which is which.

direction: choose input or output pin

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

will set GPIO 229 to input.

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

will set GPIO 229 to out, with initial value of 0, otherwise, use high value to set as out, default to 1.

value: read/write value

 cat /sys/class/gpio/gpio229/value

will output the current value of GPIO 229.

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

will set GPIO 229 to 1.

unexport: release access to GPIO

Once done, release access to GPIO with:

 echo 229 > /sys/class/gpio/unexport

See also