From d5f6290b0a5331965bada5521344686d206e27da Mon Sep 17 00:00:00 2001 From: Ben Nuttall Date: Wed, 26 Jul 2017 18:03:26 +0100 Subject: [PATCH] Update remote gpio docs page --- docs/examples/pi_zero_remote.py | 10 ---- docs/recipes.rst | 2 +- docs/remote_gpio.rst | 91 +++++++++++++++++++++------------ 3 files changed, 60 insertions(+), 43 deletions(-) delete mode 100644 docs/examples/pi_zero_remote.py diff --git a/docs/examples/pi_zero_remote.py b/docs/examples/pi_zero_remote.py deleted file mode 100644 index 086683a..0000000 --- a/docs/examples/pi_zero_remote.py +++ /dev/null @@ -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() diff --git a/docs/recipes.rst b/docs/recipes.rst index 4a5eacf..36a77db 100644 --- a/docs/recipes.rst +++ b/docs/recipes.rst @@ -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 diff --git a/docs/remote_gpio.rst b/docs/remote_gpio.rst index 2d19778..c2aeffe 100644 --- a/docs/remote_gpio.rst +++ b/docs/remote_gpio.rst @@ -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