==== Pins ==== .. currentmodule:: gpiozero As of release 1.1, the GPIO Zero library can be roughly divided into two things: pins and the devices that are connected to them. The majority of the documentation focuses on devices as pins are below the level that most users are concerned with. However, some users may wish to take advantage of the capabilities of alternative GPIO implementations or (in future) use GPIO extender chips. This is the purpose of the pins portion of the library. When you construct a device, you pass in a pin specification. However, what the library actually expects is a :class:`Pin` implementation. If it finds anything else, it uses the existing ``Device.pin_factory`` to construct a :class:`Pin` implementation based on the specification. Changing the pin factory ======================== The default pin factory can be replaced by specifying a value for the ``GPIOZERO_PIN_FACTORY`` environment variable. For example: .. code-block:: console pi@raspberrypi $ GPIOZERO_PIN_FACTORY=native python Python 3.4.2 (default, Oct 19 2014, 13:31:11) [GCC 4.9.1] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import gpiozero >>> gpiozero.Device.pin_factory To set the ``GPIOZERO_PIN_FACTORY`` for the rest of your session you can export this value: .. code-block:: console pi@raspberrypi $ export GPIOZERO_PIN_FACTORY=native pi@raspberrypi $ python Python 3.4.2 (default, Oct 19 2014, 13:31:11) [GCC 4.9.1] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import gpiozero >>> gpiozero.Device.pin_factory >>> quit() pi@raspberrypi $ python Python 3.4.2 (default, Oct 19 2014, 13:31:11) [GCC 4.9.1] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import gpiozero >>> gpiozero.Device.pin_factory If you add the ``export`` command to your :file:`~/.bashrc` file, you'll set the default pin factory for all future sessions too. The following values, and the corresponding :class:`Factory` and :class:`Pin` classes are listed in the table below. Factories are listed in the order that they are tried by default. +---------+-----------------------------------------------+-------------------------------------------+ | Name | Factory class | Pin class | +=========+===============================================+===========================================+ | rpigpio | :class:`gpiozero.pins.rpigpio.RPiGPIOFactory` | :class:`gpiozero.pins.rpigpio.RPiGPIOPin` | +---------+-----------------------------------------------+-------------------------------------------+ | rpio | :class:`gpiozero.pins.rpio.RPIOFactory` | :class:`gpiozero.pins.rpio.RPIOPin` | +---------+-----------------------------------------------+-------------------------------------------+ | pigpio | :class:`gpiozero.pins.pigpio.PiGPIOFactory` | :class:`gpiozero.pins.pigpio.PiGPIOPin` | +---------+-----------------------------------------------+-------------------------------------------+ | native | :class:`gpiozero.pins.native.NativeFactory` | :class:`gpiozero.pins.native.NativePin` | +---------+-----------------------------------------------+-------------------------------------------+ If you need to change the default pin factory from within a script, set ``Device.pin_factory`` to the new factory instance to use:: from gpiozero.pins.native import NativeFactory from gpiozero import * Device.pin_factory = NativeFactory() from gpiozero import LED # This will now use NativePin instead of RPiGPIOPin led = LED(16) Certain factories may take default information from additional sources. For example, to default to creating pins with :class:`gpiozero.pins.pigpio.PiGPIOPin` on a remote pi called ``remote-pi`` you can set the :envvar:`PIGPIO_ADDR` environment variable when running your script: .. code-block:: console $ GPIOZERO_PIN_FACTORY=pigpio PIGPIO_ADDR=remote-pi python3 my_script.py Like the ``GPIOZERO_PIN_FACTORY`` value, these can be exported from your :file:`~/.bashrc` script too. .. warning:: The astute and mischievous reader may note that it is possible to mix pin implementations, e.g. using ``RPiGPIOPin`` for one pin, and ``NativePin`` for another. This is unsupported, and if it results in your script crashing, your components failing, or your Raspberry Pi turning into an actual raspberry pie, you have only yourself to blame. RPi.GPIO ======== .. autoclass:: gpiozero.pins.rpigpio.RPiGPIOFactory .. autoclass:: gpiozero.pins.rpigpio.RPiGPIOPin RPIO ==== .. autoclass:: gpiozero.pins.rpio.RPIOFactory .. autoclass:: gpiozero.pins.rpio.RPIOPin PiGPIO ====== .. autoclass:: gpiozero.pins.pigpio.PiGPIOFactory .. autoclass:: gpiozero.pins.pigpio.PiGPIOPin Native ====== .. autoclass:: gpiozero.pins.native.NativeFactory .. autoclass:: gpiozero.pins.native.NativePin Base classes ============ .. autoclass:: Factory :members: .. autoclass:: Pin :members: .. autoclass:: SPI :members: .. currentmodule:: gpiozero.pins.pi .. autoclass:: PiFactory :members: .. autoclass:: PiPin :members: .. currentmodule:: gpiozero.pins.local .. autoclass:: LocalPiFactory :members: .. autoclass:: LocalPiPin :members: Utilities ========= The pins module also contains a database of information about the various revisions of Raspberry Pi. This is used internally to raise warnings when non-physical pins are used, or to raise exceptions when pull-downs are requested on pins with physical pull-up resistors attached. The following functions and classes can be used to query this database: .. currentmodule:: gpiozero .. autofunction:: pi_info .. autoclass:: PiBoardInfo .. autoclass:: HeaderInfo .. autoclass:: PinInfo