GPIO

Code Example

from periphery import GPIO

# Open GPIO /dev/gpiochip0 line 10 with input direction
gpio_in = GPIO("/dev/gpiochip0", 10, "in")
# Open GPIO /dev/gpiochip0 line 12 with output direction
gpio_out = GPIO("/dev/gpiochip0", 12, "out")

value = gpio_in.read()
gpio_out.write(not value)

gpio_in.close()
gpio_out.close()

API

class periphery.GPIO(path, line, direction)
class Cdev2GPIO(path, line, direction, **kwargs)

Character device GPIO (ABI version 2)

Instantiate a GPIO object and open the character device GPIO with the specified line and direction at the specified GPIO chip path (e.g. “/dev/gpiochip0”). Defaults properties can be overridden with keyword arguments.

Parameters:
  • path (str) – GPIO chip character device path.

  • line (int, str) – GPIO line number or name.

  • direction (str) – GPIO direction, can be “in”, “out”, “high”, or “low”.

  • edge (str) – GPIO interrupt edge, can be “none”, “rising”, “falling”, or “both”.

  • bias (str) – GPIO line bias, can be “default”, “pull_up”, “pull_down”, or “disable”.

  • drive (str) – GPIO line drive, can be “default”, “open_drain”, or “open_source”.

  • inverted (bool) – GPIO is inverted (active low).

  • label (str, None) – GPIO line consumer label.

Returns:

GPIO object.

Return type:

Cdev2GPIO

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if path, line, direction, edge, bias, drive, inverted, or label types are invalid.

  • ValueError – if direction, edge, bias, or drive value is invalid.

  • LookupError – if the GPIO line was not found by the provided name.

class periphery.GPIO(line, direction)
class SysfsGPIO(line, direction)

Sysfs GPIO

Instantiate a GPIO object and open the sysfs GPIO with the specified line and direction.

direction can be “in” for input; “out” for output, initialized to low; “high” for output, initialized to high; or “low” for output, initialized to low.

Parameters:
  • line (int) – GPIO line number.

  • direction (str) – GPIO direction, can be “in”, “out”, “high”, or “low”,

Returns:

GPIO object.

Return type:

SysfsGPIO

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if line or direction types are invalid.

  • ValueError – if direction value is invalid.

  • TimeoutError – if waiting for GPIO export times out.

class periphery.GPIO(*args, **kwargs)[source]

Bases: object

read()[source]

Read the state of the GPIO.

Returns:

True for high state, False for low state.

Return type:

bool

Raises:

GPIOError – if an I/O or OS error occurs.

write(value)[source]

Set the state of the GPIO to value.

Parameters:

value (bool) – True for high state, False for low state.

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if value type is not bool.

poll(timeout=None)[source]

Poll a GPIO for the edge event configured with the .edge property with an optional timeout.

For character device GPIOs, the edge event should be consumed with read_event(). For sysfs GPIOs, the edge event should be consumed with read().

timeout can be a positive number for a timeout in seconds, zero for a non-blocking poll, or negative or None for a blocking poll. Default is a blocking poll.

Parameters:

timeout (int, float, None) – timeout duration in seconds.

Returns:

True if an edge event occurred, False on timeout.

Return type:

bool

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if timeout type is not None or int.

read_event()[source]

Read the edge event that occurred with the GPIO.

This method is intended for use with character device GPIOs and is unsupported by sysfs GPIOs.

Returns:

a namedtuple containing the string edge event that occurred (either "rising" or "falling"), and the event time reported by Linux in nanoseconds.

Return type:

EdgeEvent

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • NotImplementedError – if called on a sysfs GPIO.

static poll_multiple(gpios, timeout=None)[source]

Poll multiple GPIOs for the edge event configured with the .edge property with an optional timeout.

For character device GPIOs, the edge event should be consumed with read_event(). For sysfs GPIOs, the edge event should be consumed with read().

timeout can be a positive number for a timeout in seconds, zero for a non-blocking poll, or negative or None for a blocking poll. Default is a blocking poll.

Parameters:
  • gpios (list) – list of GPIO objects to poll.

  • timeout (int, float, None) – timeout duration in seconds.

Returns:

list of GPIO objects for which an edge event occurred.

Return type:

list

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if timeout type is not None or int.

close()[source]

Close the GPIO.

Raises:

GPIOError – if an I/O or OS error occurs.

property devpath

Get the device path of the underlying GPIO device.

Type:

str

property fd

Get the line file descriptor of the GPIO object.

Type:

int

property line

Get the GPIO object’s line number.

Type:

int

property name

Get the line name of the GPIO.

This method is intended for use with character device GPIOs and always returns the empty string for sysfs GPIOs.

Type:

str

property label

Get the line consumer label of the GPIO.

This method is intended for use with character device GPIOs and always returns the empty string for sysfs GPIOs.

Type:

str

property chip_fd

Get the GPIO chip file descriptor of the GPIO object.

This method is intended for use with character device GPIOs and is unsupported by sysfs GPIOs.

Raises:

NotImplementedError – if accessed on a sysfs GPIO.

Type:

int

property chip_name

Get the name of the GPIO chip associated with the GPIO.

Type:

str

property chip_label

Get the label of the GPIO chip associated with the GPIO.

Type:

str

property direction

Get or set the GPIO’s direction. Can be “in”, “out”, “high”, “low”.

Direction “in” is input; “out” is output, initialized to low; “high” is output, initialized to high; and “low” is output, initialized to low.

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if direction type is not str.

  • ValueError – if direction value is invalid.

Type:

str

property edge

Get or set the GPIO’s interrupt edge. Can be “none”, “rising”, “falling”, “both”.

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if edge type is not str.

  • ValueError – if edge value is invalid.

Type:

str

property bias

Get or set the GPIO’s line bias. Can be “default”, “pull_up”, “pull_down”, “disable”.

This property is not supported by sysfs GPIOs.

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if bias type is not str.

  • ValueError – if bias value is invalid.

Type:

str

property drive

Get or set the GPIO’s line drive. Can be “default” (for push-pull), “open_drain”, “open_source”.

This property is not supported by sysfs GPIOs.

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if drive type is not str.

  • ValueError – if drive value is invalid.

Type:

str

property inverted

Get or set the GPIO’s inverted (active low) property.

Raises:
  • GPIOError – if an I/O or OS error occurs.

  • TypeError – if inverted type is not bool.

Type:

bool

class periphery.EdgeEvent(edge, timestamp)[source]

Bases: EdgeEvent

EdgeEvent containing the event edge and event time reported by Linux.

Parameters:
  • edge (str) – event edge, either “rising” or “falling”.

  • timestamp (int) – event time in nanoseconds.

class periphery.GPIOError[source]

Bases: OSError

Base class for GPIO errors.