class Pin – control I/O pins

A pin is the basic object to control I/O pins. It has methods to set the mode of the pin (input, output, etc) and methods to get and set the digital logic level. For analog control of a pin, see the ADC class.

Usage Model:

Board pins are identified by their string id:

g = pyb.Pin('GP9', mode=pyb.Pin.OUT, pull=None, drive=pyb.Pin.MED_POWER, alt=-1)

You can also configure the Pin to generate interrupts. For instance:

def pincb(pin):
    print(pin.id())

pin_int = pyb.Pin('GP10', mode=Pin.IN, pull=pyb.Pin.PULL_DOWN)
pin_int.irq(mode=pyb.Pin.IRQ_RISING, handler=pincb)
# the callback can be triggered manually
pin_int.irq()()
# to disable the callback
pin_int.irq().disable()

Now every time a falling edge is seen on the gpio pin, the callback will be executed. Caution: mechanical push buttons have “bounce” and pushing or releasing a switch will often generate multiple edges. See: http://www.eng.utah.edu/~cs5780/debouncing.pdf for a detailed explanation, along with various techniques for debouncing.

All pin objects go through the pin mapper to come up with one of the gpio pins.

Constructors

class pyb.Pin(id, ...)

Create a new Pin object associated with the id. If additional arguments are given, they are used to initialise the pin. See pin.init().

Methods

pin.init(mode, pull, *, drive, alt)

Initialise the pin:

  • mode can be one of:

    • Pin.IN - input pin.
    • Pin.OUT - output pin in push-pull mode.
    • Pin.OPEN_DRAIN - output pin in open-drain mode.
    • Pin.ALT - pin mapped to an alternate function.
    • Pin.ALT_OPEN_DRAIN - pin mapped to an alternate function in open-drain mode.
  • pull can be one of:

    • None - no pull up or down resistor.
    • Pin.PULL_UP - pull up resistor enabled.
    • Pin.PULL_DOWN - pull down resitor enabled.
  • drive can be one of:

    • Pin.LOW_POWER - 2mA drive capability.
    • Pin.MED_POWER - 4mA drive capability.
    • Pin.HIGH_POWER - 6mA drive capability.
  • alt is the number of the alternate function. Please refer to the pinout and alternate functions table. for the specific alternate functions that each pin supports.

Returns: None.

pin.id()

Get the pin id.

pin.value([value])

Get or set the digital logic level of the pin:

  • With no argument, return 0 or 1 depending on the logic level of the pin.
  • With value given, set the logic level of the pin. value can be anything that converts to a boolean. If it converts to True, the pin is set high, otherwise it is set low.
pin.pull()

Returns the currently configured pull of the pin. The integer returned will match one of the allowed constants for the pull argument to the init function.

pin([value])

Pin objects are callable. The call method provides a (fast) shortcut to set and get the value of the pin. See pin.value for more details.

pin.toggle()

Toggle the value of the pin.

pin.mode([mode])

Get or set the pin mode.

pin.pull([pull])

Get or set the pin pull.

pin.drive([drive])

Get or set the pin drive strength.

pin.irq(*, trigger, priority=1, handler=None, wake=None)

Create a callback to be triggered when the input level at the pin changes.

  • trigger configures the pin level which can generate an interrupt. Possible values are:

    • Pin.IRQ_FALLING interrupt on falling edge.
    • Pin.IRQ_RISING interrupt on rising edge.
    • Pin.IRQ_LOW_LEVEL interrupt on low level.
    • Pin.IRQ_HIGH_LEVEL interrupt on high level.

    The values can be ORed together, for instance mode=Pin.IRQ_FALLING | Pin.IRQ_RISING

  • priority level of the interrupt. Can take values in the range 1-7. Higher values represent higher priorities.

  • handler is an optional function to be called when new characters arrive.

  • wakes selects the power mode in which this interrupt can wake up the board. Please note:

    • If wake_from=pyb.Sleep.ACTIVE any pin can wake the board.
    • If wake_from=pyb.Sleep.SUSPENDED pins GP2, GP4, GP10, GP11, GP17`` or GP24 can wake the board. Note that only 1 of this pins can be enabled as a wake source at the same time, so, only the last enabled pin as a pyb.Sleep.SUSPENDED wake source will have effect.
    • If wake_from=pyb.Sleep.SUSPENDED pins GP2, GP4, GP10, GP11, GP17 and GP24 can wake the board. In this case all of the 6 pins can be enabled as a pyb.Sleep.HIBERNATE wake source at the same time.
    • Values can be ORed to make a pin generate interrupts in more than one power mode.

Returns a callback object.

Constants

Pin.IN
Pin.OUT
Pin.OPEN_DRAIN
Pin.ALT
Pin.ALT_OPEN_DRAIN

Selects the pin mode.

Pin.PULL_UP
Pin.PULL_DOWN

Selectes the wether there’s pull up/down resistor.

Pin.LOW_POWER
Pin.MED_POWER
Pin.HIGH_POWER

Selects the drive strength.

Pin.IRQ_FALLING
Pin.IRQ_RISING
Pin.IRQ_LOW_LEVEL
Pin.IRQ_HIGH_LEVEL

Selects the IRQ trigger type.