mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-10-29 17:50:37 +00:00
131 lines
4.3 KiB
ReStructuredText
131 lines
4.3 KiB
ReStructuredText
===========
|
||
Development
|
||
===========
|
||
|
||
.. currentmodule:: gpiozero
|
||
|
||
The main GitHub repository for the project can be found at:
|
||
|
||
https://github.com/RPi-Distro/python-gpiozero
|
||
|
||
For anybody wishing to hack on the project, we recommend starting off by
|
||
getting to grips with some simple device classes. Pick something like
|
||
:class:`LED` and follow its heritage backward to :class:`DigitalOutputDevice`.
|
||
Follow that back to :class:`OutputDevice` and you should have a good
|
||
understanding of simple output devices along with a grasp of how GPIO Zero
|
||
relies fairly heavily upon inheritance to refine the functionality of devices.
|
||
The same can be done for input devices, and eventually more complex devices
|
||
(composites and SPI based).
|
||
|
||
|
||
.. _dev_install:
|
||
|
||
Development installation
|
||
========================
|
||
|
||
If you wish to develop GPIO Zero itself, we recommend obtaining the source by
|
||
cloning the GitHub repository and then use the "develop" target of the Makefile
|
||
which will install the package as a link to the cloned repository allowing
|
||
in-place development (it also builds a tags file for use with vim/emacs with
|
||
Exuberant’s ctags utility). The following example demonstrates this method
|
||
within a virtual Python environment:
|
||
|
||
.. code-block:: console
|
||
|
||
$ sudo apt install lsb-release build-essential git git-core \
|
||
> exuberant-ctags virtualenvwrapper python-virtualenv python3-virtualenv \
|
||
> python-dev python3-dev
|
||
$ cd
|
||
$ mkvirtualenv -p /usr/bin/python3 python-gpiozero
|
||
$ workon python-gpiozero
|
||
(python-gpiozero) $ git clone https://github.com/RPi-Distro/python-gpiozero.git
|
||
(python-gpiozero) $ cd python-gpiozero
|
||
(python-gpiozero) $ make develop
|
||
|
||
You will likely wish to install one or more pin implementations within the
|
||
virtual environment (if you don't, GPIO Zero will use the "native" pin
|
||
implementation which is largely experimental at this stage and not very
|
||
useful):
|
||
|
||
.. code-block:: console
|
||
|
||
(python-gpiozero) $ pip install rpi.gpio pigpio
|
||
|
||
If you are working on SPI devices you may also wish to install the ``spidev``
|
||
package to provide hardware SPI capabilities (again, GPIO Zero will work
|
||
without this, but a big-banging software SPI implementation will be used
|
||
instead):
|
||
|
||
.. code-block:: console
|
||
|
||
(python-gpiozero) $ pip install spidev
|
||
|
||
To pull the latest changes from git into your clone and update your
|
||
installation:
|
||
|
||
.. code-block:: console
|
||
|
||
$ workon python-gpiozero
|
||
(python-gpiozero) $ cd ~/python-gpiozero
|
||
(python-gpiozero) $ git pull
|
||
(python-gpiozero) $ make develop
|
||
|
||
To remove your installation, destroy the sandbox and the clone:
|
||
|
||
.. code-block:: console
|
||
|
||
(python-gpiozero) $ deactivate
|
||
$ rmvirtualenv python-gpiozero
|
||
$ rm -fr ~/python-gpiozero
|
||
|
||
|
||
Building the docs
|
||
=================
|
||
|
||
If you wish to build the docs, you'll need a few more dependencies. Inkscape
|
||
is used for conversion of SVGs to other formats, Graphviz is used for rendering
|
||
certain charts, and TeX Live is required for building PDF output. The following
|
||
command should install all required dependencies:
|
||
|
||
.. code-block:: console
|
||
|
||
$ sudo apt install texlive-latex-recommended texlive-latex-extra \
|
||
texlive-fonts-recommended graphviz inkscape
|
||
|
||
Once these are installed, you can use the "doc" target to build the
|
||
documentation:
|
||
|
||
.. code-block:: console
|
||
|
||
$ workon python-gpiozero
|
||
(python-gpiozero) $ cd ~/python-gpiozero
|
||
(python-gpiozero) $ make doc
|
||
|
||
The HTML output is written to :file:`docs/_build/html` while the PDF output
|
||
goes to :file:`docs/_build/latex`.
|
||
|
||
|
||
Test suite
|
||
==========
|
||
|
||
If you wish to run the GPIO Zero test suite, follow the instructions in
|
||
:ref:`dev_install` above and then make the "test" target within the sandbox:
|
||
|
||
.. code-block:: console
|
||
|
||
$ workon python-gpiozero
|
||
(python-gpiozero) $ cd ~/python-gpiozero
|
||
(python-gpiozero) $ make test
|
||
|
||
The test suite expects pins 22 and 27 (by default) to be wired together in
|
||
order to run the "real" pin tests. The pins used by the test suite can be
|
||
overridden with the environment variables ``GPIOZERO_TEST_PIN`` (defaults to
|
||
22) and ``GPIOZERO_TEST_INPUT_PIN`` (defaults to 27).
|
||
|
||
.. warning::
|
||
|
||
When wiring GPIOs together, ensure a load (like a 330Ω resistor) is placed
|
||
between them. Failure to do so may lead to blown GPIO pins (your humble
|
||
author has a fried GPIO27 as a result of such laziness, although it did
|
||
take *many* runs of the test suite before this occurred!).
|