Update remote gpio docs page

This commit is contained in:
Ben Nuttall
2017-07-26 18:03:26 +01:00
parent 5c8e2d13a9
commit d5f6290b0a
3 changed files with 60 additions and 43 deletions

View File

@@ -1,10 +0,0 @@
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from signal import pause
factory = PiGPIOFactory(host='raspberrypi.local')
led = LED(17, pin_factory=factory)
led.blink()
pause()

View File

@@ -187,7 +187,7 @@ This means the individual LEDs can be accessed by their name:
.. literalinclude:: examples/led_board_6.py
:class:`LEDBoard` objects can also be nested to contain other :class:`LEDBoard`
objects.
objects:
.. literalinclude:: examples/led_board_7.py

View File

@@ -21,29 +21,48 @@ used.
Preparing the Raspberry Pi
==========================
If you're using Raspbian Jessie (desktop - not Raspbian Lite) then you have
everything you need to use the remote GPIO feature. If you're using Raspbian
Lite, or another distribution, you'll need to install pigpio:
If you're using Raspbian (desktop - not Raspbian Lite) then you have everything
you need to use the remote GPIO feature. If you're using Raspbian Lite, or
another distribution, you'll need to install pigpio:
.. code-block:: console
$ sudo apt install pigpio
Then you just need to enable **Remote GPIO** in the Raspberry Pi configuration
tool:
Alternatively, pigpio is available from `abyz.co.uk`_.
You'll need to launch the pigpio daemon on the Raspberry Pi to allow remote
connections. You can do this in three different ways. Most users will find the
desktop method the easiest (and can skip to the next section).
Desktop
-------
On the Raspbian desktop image, enable **Remote GPIO** in the Raspberry Pi
configuration tool:
.. image:: images/raspi-config.png
(Alternatively, use ``sudo raspi-config`` on the command line)
This will launch the pigpio daemon automatically.
Then launch the pigpio daemon:
Command-line: raspi-config
--------------------------
Alternatively, enter ``sudo raspi-config`` on the command line, and enable
Remote GPIO. This will also launch the pigpio daemon automatically.
Command-line: manual
--------------------
Another option is to launch the pigpio daemon manually:
.. code-block:: console
$ sudo pigpiod
To only allow connections from a specific IP address, use the ``-n`` flag. For
example:
This is for single-use and will not persist after a reboot. However, this method
can be used to allow connections from a specific IP address, using the ``-n``
flag. For example:
.. code-block:: console
@@ -51,20 +70,19 @@ example:
$ sudo pigpiod -n 192.168.1.65 # allow 192.168.1.65 only
$ sudo pigpiod -n localhost -n 192.168.1.65 # allow localhost and 192.168.1.65 only
You will need to launch the pigpio daemon every time you wish to use this
feature. To automate running the daemon at boot time:
To automate running the daemon at boot time, run:
.. code-block:: console
$ sudo systemctl enable pigpiod
Preparing the host computer
===========================
Preparing the control computer
==============================
If the host computer is a Raspberry Pi running Raspbian Jessie (or a PC running
Raspbian x86), then you have everything you need. If you're using another Linux
distribution, Mac OS or Windows then you'll need to install the ``pigpio``
Python library on the PC.
If the control computer (the computer you're running your Python code from) is
a Raspberry Pi running Raspbian (or a PC running Raspbian x86), then you have
everything you need. If you're using another Linux distribution, Mac OS or
Windows then you'll need to install the ``pigpio`` Python library on the PC.
Raspberry Pi
------------
@@ -213,7 +231,15 @@ will flash the LED connected to pin 17 of the Raspberry Pi with the IP address
$ PIGPIO_ADDR=192.168.1.4 python3 led.py
will flash the LED connected to pin 17 of the Raspberry Pi with the IP address
``192.168.1.4``, without any code changes.
``192.168.1.4``, without any code changes, as long as the Raspberry Pi has the
pigpio daemon running.
.. note::
When running code directly on a Raspberry Pi, any pin factory can be used
(assuming the relevant library is installed), but when a device is used
remotely, only :class:`PiGPIOFactory` can be used, as pigpio is the only
pin library which supports remote GPIO.
Pin objects
===========
@@ -231,8 +257,8 @@ This allows devices on multiple Raspberry Pis to be used in the same script:
You can, of course, continue to create gpiozero device objects as normal, and
create others using remote pins. For example, if run on a Raspberry Pi, the
following script will flash an LED on the host Pi, and also on another Pi on
the network:
following script will flash an LED on the controller Pi, and also on another Pi
on the network:
.. literalinclude:: examples/led_remote_3.py
@@ -288,30 +314,31 @@ First, configure the boot partition of the SD card:
3. Edit ``cmdline.txt`` and insert ``modules-load=dwc2,g_ether`` after
``rootwait``.
(See `blog.gbaman.info`_ for more information)
(See guides on `blog.gbaman.info`_ and `learn.adafruit.com`_ for more detailed
instructions)
Then connect the Pi Zero to your computer using a micro USB cable (connecting it
to the USB port, not the power port). You'll see the indicator LED flashing as
the Pi Zero boots. When it's ready, you will be able to ping and SSH into it
using the hostname ``raspberrypi.local``. SSH into the Pi Zero, ensure Remote
GPIO is enabled and the pigpio daemon is running, and you can use remote pins
from the computer, referencing the host by its hostname, like so:
using the hostname ``raspberrypi.local``. SSH into the Pi Zero, install pigpio
and run the pigpio daemon.
.. literalinclude:: examples/pi_zero_remote.py
Then, drop out of the SSH session and you can run Python code on your computer
to control devices attached to the Pi Zero, referencing it by its hostname (or
IP address if you know it), for example:
.. note::
.. code-block:: console
When running code directly on a Raspberry Pi, any pin factory can be used
(assuming the relevant library is installed), but when a device is used
remotely, only :class:`PiGPIOFactory` can be used, as pigpio is the only
pin library which supports remote GPIO.
$ GPIOZERO_PIN_FACTORY=pigpio PIGPIO_ADDR=raspberrypi.local python3 led.py
.. _RPi.GPIO: https://pypi.python.org/pypi/RPi.GPIO
.. _pigpio: http://abyz.co.uk/rpi/pigpio/python.html
.. _abyz.co.uk: http://abyz.co.uk/rpi/pigpio/download.html
.. _get-pip: https://pip.pypa.io/en/stable/installing/
.. _following this guide: https://www.raspberrypi.org/learning/using-pip-on-windows/worksheet/
.. _Sense HAT: https://www.raspberrypi.org/products/sense-hat/
.. _Raspberry Pi Zero: https://www.raspberrypi.org/products/pi-zero/
.. _Pi Zero W: https://www.raspberrypi.org/products/pi-zero-w/
.. _Raspberry Pi Zero: https://www.raspberrypi.org/products/raspberry-pi-zero/
.. _Pi Zero W: https://www.raspberrypi.org/products/raspberry-pi-zero-w/
.. _blog.gbaman.info: http://blog.gbaman.info/?p=791
.. _learn.adafruit.com: https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget