"GPIO" (General Purpose I/O)

"GPIO" provides low-level general-purpose input and output through digital pins directly connected to the processor running the Wolfram Language.

Note: By default, "GPIO" allows any pin to be used interchangeably in read and write mode. DeviceConfigure can be used to configure specific pins as read or write.

  • The possible values of GPIO pins are taken to be 0 and 1, corresponding to "low" and "high".
  • "GPIO" allows pins to be specified by integers.
  • On a Raspberry Pi, the following pins are available for reading and writing: 4, 7, 8, 9, 10, 11, 14, 15, 17, 18, 22, 23, 24, 25, 28, 29, 30, 31.
  • On the Raspberry Pi, pins can also be referenced using the WiringPi numbering scheme by specifying them in the form "WiringPin".
  • Device Discovery

    Opening the Device

    • If GPIO is present, it is always accessible and does not require a connection step.
    • DeviceOpen["GPIO"] is not required, but can be used to obtain a DeviceObject whose properties can be queried.

    Configuring the Device

    • Configuration is not required for GPIO. Without configuration, any pin will automatically switch between input and output on read and write. Note that if a pin is used in a direction that is not intended, this may damage your system.
    • DeviceConfigure["GPIO",n->dir]

      sets the direction of pin n to be dir.

      DeviceConfigure["GPIO",{n1->dir1,n2->dir2,}]

      sets direction diri for pin pini.

    • Possible directions are "Input", "Output", and None.
    • Setting the direction to None releases a pin if it has previously been configured.
    • DeviceConfigure ignores requests to configure any pin that is being accessed by an asynchronous task.
    • If an attempt is made to use a GPIO pin in a direction inconsistent with its configuration, an error will be generated.

    Reading Data

      DeviceRead["GPIO",p]

      gives the value of GPIO pin p.

      DeviceRead["GPIO",{p1,p2,}]

      gives a list of the values of GPIO pins pi.

    • The value of a GPIO pin is always either 0 or 1.
    • Note
      By default, "GPIO" allows any pin to be used interchangeably in read and write mode. DeviceConfigure can be used to configure specific pins as read or write.

    Writing Data

      DeviceWrite["GPIO",p->v]

      writes the value v to GPIO pin p.

    • The value v must be either 0 or 1.
    • Note
      By default, "GPIO" allows any pin to be used interchangeably in read and write mode. DeviceConfigure can be used to configure specific pins as read or write.

    Closing and Releasing Resources

    • DeviceClose["GPIO"] is not required, but can effectively be used to reset all pins to their default state and marks the corresponding DeviceObject as closed.

    Examples

    Basic Examples  (2)

    Find GPIO devices on the system:

    Configure pin 4 for writing and pin 17 for reading:

    Read the digital value on pin 17:

    Set pin 4 to digital "High":

    Read the digital value on pin 17: