mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	Merge pull request #523 from RPi-Distro/docs-updates
Docs updates: add installing, advanced recipes, remote gpio and remote recipes, close #428, close #434, close #520
This commit is contained in:
		
							
								
								
									
										20
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								README.rst
									
									
									
									
									
								
							@@ -58,23 +58,15 @@ together:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
The library includes interfaces to many simple everyday components, as well as
 | 
					The library includes interfaces to many simple everyday components, as well as
 | 
				
			||||||
some more complex things like sensors, analogue-to-digital converters, full
 | 
					some more complex things like sensors, analogue-to-digital converters, full
 | 
				
			||||||
colour LEDs, robotics kits and more.
 | 
					colour LEDs, robotics kits and more. See the :doc:`recipes` page for ideas on
 | 
				
			||||||
 | 
					how to get started.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Install
 | 
					Install
 | 
				
			||||||
=======
 | 
					=======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
First, update your repositories list::
 | 
					GPIO Zero is installed by default in Raspbian Jessie, available from
 | 
				
			||||||
 | 
					`raspberrypi.org`_. To install on Jessie Lite or other operating systems,
 | 
				
			||||||
    sudo apt-get update
 | 
					including for PCs using remote GPIO, see the :doc:`installing` page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
Then install the package of your choice. Both Python 3 and Python 2 are
 | 
					 | 
				
			||||||
supported. Python 3 is recommended::
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    sudo apt-get install python3-gpiozero
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
or::
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    sudo apt-get install python-gpiozero
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Documentation
 | 
					Documentation
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
@@ -118,6 +110,7 @@ Other contributors:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _Raspberry Pi Foundation: https://www.raspberrypi.org/
 | 
					.. _Raspberry Pi Foundation: https://www.raspberrypi.org/
 | 
				
			||||||
 | 
					.. _raspberrypi.org: https://www.raspberrypi.org/downloads/
 | 
				
			||||||
.. _GitHub: https://github.com/RPi-Distro/python-gpiozero
 | 
					.. _GitHub: https://github.com/RPi-Distro/python-gpiozero
 | 
				
			||||||
.. _issues: https://github.com/RPi-Distro/python-gpiozero/issues
 | 
					.. _issues: https://github.com/RPi-Distro/python-gpiozero/issues
 | 
				
			||||||
.. _recipes: https://gpiozero.readthedocs.io/en/latest/recipes.html
 | 
					.. _recipes: https://gpiozero.readthedocs.io/en/latest/recipes.html
 | 
				
			||||||
@@ -137,4 +130,3 @@ Other contributors:
 | 
				
			|||||||
.. _Clare Macrae: https://github.com/claremacrae
 | 
					.. _Clare Macrae: https://github.com/claremacrae
 | 
				
			||||||
.. _Tim Golden: https://github.com/tjguk
 | 
					.. _Tim Golden: https://github.com/tjguk
 | 
				
			||||||
.. _Phil Howard: https://github.com/Gadgetoid
 | 
					.. _Phil Howard: https://github.com/Gadgetoid
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,7 @@ omit any arguments from either scheme. The defaults are:
 | 
				
			|||||||
* *clock_pin* defaults to 11, *mosi_pin* defaults to 10, *miso_pin* defaults
 | 
					* *clock_pin* defaults to 11, *mosi_pin* defaults to 10, *miso_pin* defaults
 | 
				
			||||||
  to 9, and *select_pin* defaults to 8.
 | 
					  to 9, and *select_pin* defaults to 8.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Hence the following constructors are all equiavlent::
 | 
					Hence the following constructors are all equivalent::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from gpiozero import MCP3008
 | 
					    from gpiozero import MCP3008
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,10 +5,9 @@ Source Tools
 | 
				
			|||||||
.. currentmodule:: gpiozero.tools
 | 
					.. currentmodule:: gpiozero.tools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GPIO Zero includes several utility routines which are intended to be used with
 | 
					GPIO Zero includes several utility routines which are intended to be used with
 | 
				
			||||||
the :attr:`~gpiozero.SourceMixin.source` and
 | 
					the :doc:`source_values` attributes common to most devices in the library. These
 | 
				
			||||||
:attr:`~gpiozero.ValuesMixin.values` attributes common to most devices in the
 | 
					utility routines are in the ``tools`` module of GPIO Zero and are typically
 | 
				
			||||||
library. These utility routines are in the ``tools`` module of GPIO Zero and
 | 
					imported as follows::
 | 
				
			||||||
are typically imported as follows::
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from gpiozero.tools import scaled, negated, all_values
 | 
					    from gpiozero.tools import scaled, negated, all_values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,4 +75,3 @@ Artificial sources
 | 
				
			|||||||
.. autofunction:: random_values
 | 
					.. autofunction:: random_values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. autofunction:: sin_values
 | 
					.. autofunction:: sin_values
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ LED example").
 | 
				
			|||||||
Commits which close (or intend to close) an issue should include the phrase
 | 
					Commits which close (or intend to close) an issue should include the phrase
 | 
				
			||||||
"fix #123" or "close #123" where ``#123`` is the issue number, as well as
 | 
					"fix #123" or "close #123" where ``#123`` is the issue number, as well as
 | 
				
			||||||
include a short description, for example: "Add LED example, close #123", and
 | 
					include a short description, for example: "Add LED example, close #123", and
 | 
				
			||||||
pull requests should aim to match or closely match the correspoding issue
 | 
					pull requests should aim to match or closely match the corresponding issue
 | 
				
			||||||
title.
 | 
					title.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Backwards compatibility
 | 
					Backwards compatibility
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								docs/examples/led_button_remote_1.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/examples/led_button_remote_1.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button = Button(2)
 | 
				
			||||||
 | 
					led = LED(PiGPIOPin(17, host='192.168.1.3'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led.source = button.values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pause()
 | 
				
			||||||
							
								
								
									
										12
									
								
								docs/examples/led_button_remote_2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								docs/examples/led_button_remote_2.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from gpiozero.tools import all_values
 | 
				
			||||||
 | 
					from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led = LED(17)
 | 
				
			||||||
 | 
					button_1 = Button(PiGPIOPin(17, host='192.168.1.3'))
 | 
				
			||||||
 | 
					button_2 = Button(PiGPIOPin(17, host='192.168.1.4'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led.source = all_values(button_1.values, button_2.values)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pause()
 | 
				
			||||||
							
								
								
									
										11
									
								
								docs/examples/led_remote_1.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								docs/examples/led_remote_1.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led = LED(PiGPIOPin(17, host='192.168.1.3'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    led.on()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
 | 
					    led.off()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
							
								
								
									
										14
									
								
								docs/examples/led_remote_2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/examples/led_remote_2.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_1 = LED(PiGPIOPin(17, host='192.168.1.3'))
 | 
				
			||||||
 | 
					led_2 = LED(PiGPIOPin(17, host='192.168.1.4'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    led_1.on()
 | 
				
			||||||
 | 
					    led_2.off()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
 | 
					    led_1.off()
 | 
				
			||||||
 | 
					    led_2.on()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
							
								
								
									
										14
									
								
								docs/examples/led_remote_3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/examples/led_remote_3.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_1 = LED(17)  # local pin
 | 
				
			||||||
 | 
					led_2 = LED(PiGPIOPin(17, host='192.168.1.3'))  # remote pin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    led_1.on()
 | 
				
			||||||
 | 
					    led_2.off()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
 | 
					    led_1.off()
 | 
				
			||||||
 | 
					    led_2.on()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
							
								
								
									
										14
									
								
								docs/examples/led_remote_4.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/examples/led_remote_4.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.rpigpio import RPiGPIOPin
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_1 = LED(RPiGPIOPin(17))  # local pin
 | 
				
			||||||
 | 
					led_2 = LED(17)  # remote pin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    led_1.on()
 | 
				
			||||||
 | 
					    led_2.off()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
 | 
					    led_1.off()
 | 
				
			||||||
 | 
					    led_2.on()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
							
								
								
									
										17
									
								
								docs/examples/led_remote_5.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								docs/examples/led_remote_5.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_1 = LED(17)  # local pin
 | 
				
			||||||
 | 
					led_2 = LED(PiGPIOPin(17, host='192.168.1.3'))  # remote pin on one pi
 | 
				
			||||||
 | 
					led_3 = LED(PiGPIOPin(17, host='192.168.1.4'))  # remote pin on another pi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    led_1.on()
 | 
				
			||||||
 | 
					    led_2.off()
 | 
				
			||||||
 | 
					    led_3.on()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
 | 
					    led_1.off()
 | 
				
			||||||
 | 
					    led_2.on()
 | 
				
			||||||
 | 
					    led_3.off()
 | 
				
			||||||
 | 
					    sleep(1)
 | 
				
			||||||
							
								
								
									
										14
									
								
								docs/examples/multi_room_doorbell.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/examples/multi_room_doorbell.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					from gpiozero import Buzzer, Button
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ips = ['192.168.1.3', '192.168.1.4', '192.168.1.5', '192.168.1.6']
 | 
				
			||||||
 | 
					remote_pins = [PiGPIOPin(17, host=ip) for ip in ips]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button = Button(17)  # button on this pi
 | 
				
			||||||
 | 
					buzzers = [Buzzer(pin) for pin in remote_pins]  # buzzers on remote pins
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for buzzer in buzzers:
 | 
				
			||||||
 | 
					    buzzer.source = button.values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pause()
 | 
				
			||||||
							
								
								
									
										14
									
								
								docs/examples/multi_room_motion_alert.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/examples/multi_room_motion_alert.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					from gpiozero import LEDBoard, MotionSensor
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ips = ['192.168.1.3', '192.168.1.4', '192.168.1.5', '192.168.1.6']
 | 
				
			||||||
 | 
					remote_pins = [PiGPIOPin(17, host=ip) for ip in ips]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					leds = LEDBoard(2, 3, 4, 5)  # leds on this pi
 | 
				
			||||||
 | 
					sensors = [MotionSensor(pin) for pin in remote_pins]  # motion sensors on other pis
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for led, sensor in zip(leds, sensors):
 | 
				
			||||||
 | 
					    led.source = sensor.values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pause()
 | 
				
			||||||
							
								
								
									
										9
									
								
								docs/examples/pi_zero_remote.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								docs/examples/pi_zero_remote.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					from gpiozero import LED
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led = LED(PiGPIOPin(17, host='raspberrypi.local'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led.blink()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pause()
 | 
				
			||||||
							
								
								
									
										10
									
								
								docs/examples/sense_hat_remote.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/examples/sense_hat_remote.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					from gpiozero import MotionSensor
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from sense_hat import SenseHat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pir = MotionSensor(PiGPIOPin(4, host='192.168.1.4'))  # remote motion sensor
 | 
				
			||||||
 | 
					sense = SenseHat()  # local sense hat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    pir.wait_for_motion()
 | 
				
			||||||
 | 
					    sense.show_message(sense.temperature)
 | 
				
			||||||
							
								
								
									
										15
									
								
								docs/examples/sense_hat_remote_2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								docs/examples/sense_hat_remote_2.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					from gpiozero import LightSensor
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOPin
 | 
				
			||||||
 | 
					from sense_hat import SenseHat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					light = LightSensor(PiGPIOPin(4, host='192.168.1.4'))  # remote motion sensor
 | 
				
			||||||
 | 
					sense = SenseHat()  # local sense hat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					blue = (0, 0, 255)
 | 
				
			||||||
 | 
					yellow = (255, 255, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while True:
 | 
				
			||||||
 | 
					    if light.value > 0.5:
 | 
				
			||||||
 | 
					        sense.clear(yellow)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        sense.clear(blue)
 | 
				
			||||||
							
								
								
									
										7
									
								
								docs/examples/traffichat_remote_1.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								docs/examples/traffichat_remote_1.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					import gpiozero
 | 
				
			||||||
 | 
					from gpiozero import TrafficHat
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOFactory
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gpiozero.Device._set_pin_factory(PiGPIOFactory(host='192.168.1.3'))
 | 
				
			||||||
 | 
					th = TrafficHat()  # traffic hat on 192.168.1.3 using remote pins
 | 
				
			||||||
							
								
								
									
										8
									
								
								docs/examples/traffichat_remote_2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docs/examples/traffichat_remote_2.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					import gpiozero
 | 
				
			||||||
 | 
					from gpiozero import TrafficHat
 | 
				
			||||||
 | 
					from gpiozero.pins.pigpio import PiGPIOFactory
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					th_1 = TrafficHat()  # traffic hat using local pins
 | 
				
			||||||
 | 
					gpiozero.Device._set_pin_factory(PiGPIOFactory(host='192.168.1.3'))
 | 
				
			||||||
 | 
					th_2 = TrafficHat()  # traffic hat on 192.168.1.3 using remote pins
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								docs/images/raspi-config.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/images/raspi-config.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 33 KiB  | 
@@ -8,6 +8,7 @@ Table of Contents
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    recipes
 | 
					    recipes
 | 
				
			||||||
    notes
 | 
					    notes
 | 
				
			||||||
 | 
					    installing
 | 
				
			||||||
    api_input
 | 
					    api_input
 | 
				
			||||||
    api_output
 | 
					    api_output
 | 
				
			||||||
    api_spi
 | 
					    api_spi
 | 
				
			||||||
@@ -19,8 +20,10 @@ Table of Contents
 | 
				
			|||||||
    api_exc
 | 
					    api_exc
 | 
				
			||||||
    cli_tools
 | 
					    cli_tools
 | 
				
			||||||
    source_values
 | 
					    source_values
 | 
				
			||||||
 | 
					    remote_gpio
 | 
				
			||||||
 | 
					    recipes_advanced
 | 
				
			||||||
 | 
					    recipes_remote_gpio
 | 
				
			||||||
    contributing
 | 
					    contributing
 | 
				
			||||||
    development
 | 
					    development
 | 
				
			||||||
    changelog
 | 
					    changelog
 | 
				
			||||||
    license
 | 
					    license
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										82
									
								
								docs/installing.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								docs/installing.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					====================
 | 
				
			||||||
 | 
					Installing GPIO Zero
 | 
				
			||||||
 | 
					====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GPIO Zero is installed by default in `Raspbian Jessie`_ and `PIXEL x86`_,
 | 
				
			||||||
 | 
					available from `raspberrypi.org`_. Follow these guides to installing on other
 | 
				
			||||||
 | 
					operating systems, including for PCs using the :doc:`remote_gpio` feature.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Raspberry Pi
 | 
				
			||||||
 | 
					============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, update your repositories list::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install the package for Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python3-gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or Python 2::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python-gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linux
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, update your distribution's repositories list. For example::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install pip for Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python3-pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python-pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(Alternatively, install pip with `get-pip`_.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, install gpiozero for Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pip3 install gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or Python 2::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pip install gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    We welcome Linux distribution maintainers to include the gpiozero packages
 | 
				
			||||||
 | 
					    in their repositories. Any questions you have, please ask questions on
 | 
				
			||||||
 | 
					    `GitHub`_ and we'll be happy to help.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Mac OS
 | 
				
			||||||
 | 
					======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, install pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ???
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, install gpiozero with pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pip install gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Windows
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, install pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ???
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, install gpiozero with pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pip install gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. _Raspbian Jessie: https://www.raspberrypi.org/downloads/raspbian/
 | 
				
			||||||
 | 
					.. _PIXEL x86: https://www.raspberrypi.org/blog/pixel-pc-mac/
 | 
				
			||||||
 | 
					.. _raspberrypi.org: https://www.raspberrypi.org/downloads/
 | 
				
			||||||
 | 
					.. _get-pip: https://pip.pypa.io/en/stable/installing/
 | 
				
			||||||
 | 
					.. _GitHub: https://github.com/RPi-Distro/python-gpiozero/issues
 | 
				
			||||||
@@ -36,7 +36,6 @@ manually (e.g. by pressing Ctrl+C). Similarly, when setting up callbacks on
 | 
				
			|||||||
button presses or other input devices, the script needs to be running for the
 | 
					button presses or other input devices, the script needs to be running for the
 | 
				
			||||||
events to be detected::
 | 
					events to be detected::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    from gpiozero import Button
 | 
					    from gpiozero import Button
 | 
				
			||||||
    from signal import pause
 | 
					    from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,13 +83,13 @@ version of gpiozero is available in your Python environment like so:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    >>> from pkg_resources import require
 | 
					    >>> from pkg_resources import require
 | 
				
			||||||
    >>> require('gpiozero')
 | 
					    >>> require('gpiozero')
 | 
				
			||||||
    [gpiozero 1.2.0 (/usr/local/lib/python2.7/dist-packages)]
 | 
					    [gpiozero 1.3.2 (/usr/lib/python3/dist-packages)]
 | 
				
			||||||
    >>> require('gpiozero')[0].version
 | 
					    >>> require('gpiozero')[0].version
 | 
				
			||||||
    '1.2.0'
 | 
					    '1.3.2'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you have multiple versions installed (e.g. from ``pip`` and ``apt-get``)
 | 
					If you have multiple versions installed (e.g. from ``pip`` and ``apt``) they
 | 
				
			||||||
they will not show up in the list returned by the ``require`` method. However,
 | 
					will not show up in the list returned by the ``require`` method. However, the
 | 
				
			||||||
the first entry in the list will be the version that ``import gpiozero`` will
 | 
					first entry in the list will be the version that ``import gpiozero`` will
 | 
				
			||||||
import.
 | 
					import.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you receive the error "No module named pkg_resources", you need to install
 | 
					If you receive the error "No module named pkg_resources", you need to install
 | 
				
			||||||
@@ -98,5 +97,9 @@ the ``pip`` utility. This can be done with the following command in Raspbian:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. code-block:: console
 | 
					.. code-block:: console
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $ sudo apt-get install python-pip
 | 
					    sudo apt install python-pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Alternatively, install pip with `get-pip`_.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. _get_pip: https://pip.pypa.io/en/stable/installing/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,13 @@
 | 
				
			|||||||
=======
 | 
					================
 | 
				
			||||||
Recipes
 | 
					Recipes (Simple)
 | 
				
			||||||
=======
 | 
					================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. currentmodule:: gpiozero
 | 
					.. currentmodule:: gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following recipes demonstrate some of the capabilities of the gpiozero
 | 
					The following recipes demonstrate some of the capabilities of the GPIO Zero
 | 
				
			||||||
library. Please note that all recipes are written assuming Python 3. Recipes
 | 
					library. Please note that all recipes are written assuming Python 3. Recipes
 | 
				
			||||||
*may* work under Python 2, but no guarantees!
 | 
					*may* work under Python 2, but no guarantees!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
.. _pin-numbering:
 | 
					.. _pin-numbering:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Pin Numbering
 | 
					Pin Numbering
 | 
				
			||||||
@@ -26,7 +25,6 @@ example, if an LED was attached to "GPIO17" you would specify the pin number as
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. image:: images/pin_layout.*
 | 
					.. image:: images/pin_layout.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
LED
 | 
					LED
 | 
				
			||||||
===
 | 
					===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,7 +44,6 @@ Alternatively:
 | 
				
			|||||||
    may be reset. Keep your script alive with :func:`signal.pause`. See
 | 
					    may be reset. Keep your script alive with :func:`signal.pause`. See
 | 
				
			||||||
    :ref:`keep-your-script-running` for more information.
 | 
					    :ref:`keep-your-script-running` for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
LED with variable brightness
 | 
					LED with variable brightness
 | 
				
			||||||
============================
 | 
					============================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,7 +58,6 @@ out continuously):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/led_pulse.py
 | 
					.. literalinclude:: examples/led_pulse.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Button
 | 
					Button
 | 
				
			||||||
======
 | 
					======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -93,7 +89,6 @@ Similarly, functions can be attached to button releases:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/button_4.py
 | 
					.. literalinclude:: examples/button_4.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Button controlled LED
 | 
					Button controlled LED
 | 
				
			||||||
=====================
 | 
					=====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -107,7 +102,6 @@ Alternatively:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/button_led_2.py
 | 
					.. literalinclude:: examples/button_led_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Button controlled camera
 | 
					Button controlled camera
 | 
				
			||||||
========================
 | 
					========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -125,7 +119,6 @@ another to capture:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/button_camera_2.py
 | 
					.. literalinclude:: examples/button_camera_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Shutdown button
 | 
					Shutdown button
 | 
				
			||||||
===============
 | 
					===============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -135,7 +128,6 @@ the Raspberry Pi when the button is held for 2 seconds:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/button_shutdown.py
 | 
					.. literalinclude:: examples/button_shutdown.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
LEDBoard
 | 
					LEDBoard
 | 
				
			||||||
========
 | 
					========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -148,7 +140,6 @@ controlled:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/led_board_2.py
 | 
					.. literalinclude:: examples/led_board_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
LEDBarGraph
 | 
					LEDBarGraph
 | 
				
			||||||
===========
 | 
					===========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -165,7 +156,6 @@ values using LED brightness:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/led_bargraph_2.py
 | 
					.. literalinclude:: examples/led_bargraph_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Traffic Lights
 | 
					Traffic Lights
 | 
				
			||||||
==============
 | 
					==============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -185,19 +175,6 @@ Using :class:`LED` components:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/traffic_lights_3.py
 | 
					.. literalinclude:: examples/traffic_lights_3.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Travis build LED indicator
 | 
					 | 
				
			||||||
==========================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use LEDs to indicate the status of a Travis build. A green light means the
 | 
					 | 
				
			||||||
tests are passing, a red light means the build is broken:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. literalinclude:: examples/led_travis.py
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Note this recipe requires `travispy`_. Install with ``sudo pip3 install
 | 
					 | 
				
			||||||
travispy``.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Push button stop motion
 | 
					Push button stop motion
 | 
				
			||||||
=======================
 | 
					=======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -207,7 +184,6 @@ Capture a picture with the camera module every time a button is pressed:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See `Push Button Stop Motion`_ for a full resource.
 | 
					See `Push Button Stop Motion`_ for a full resource.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Reaction Game
 | 
					Reaction Game
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -219,7 +195,6 @@ When you see the light come on, the first person to press their button wins!
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See `Quick Reaction Game`_ for a full resource.
 | 
					See `Quick Reaction Game`_ for a full resource.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
GPIO Music Box
 | 
					GPIO Music Box
 | 
				
			||||||
==============
 | 
					==============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -229,7 +204,6 @@ Each button plays a different sound!
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See `GPIO Music Box`_ for a full resource.
 | 
					See `GPIO Music Box`_ for a full resource.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
All on when pressed
 | 
					All on when pressed
 | 
				
			||||||
===================
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -247,7 +221,6 @@ Using :class:`LED`, :class:`Buzzer`, and :class:`Button` components:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/all_on_3.py
 | 
					.. literalinclude:: examples/all_on_3.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Full color LED
 | 
					Full color LED
 | 
				
			||||||
==============
 | 
					==============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -257,7 +230,6 @@ Making colours with an :class:`RGBLED`:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/rgbled.py
 | 
					.. literalinclude:: examples/rgbled.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Motion sensor
 | 
					Motion sensor
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -267,7 +239,6 @@ Light an :class:`LED` when a :class:`MotionSensor` detects motion:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/motion_sensor.py
 | 
					.. literalinclude:: examples/motion_sensor.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Light sensor
 | 
					Light sensor
 | 
				
			||||||
============
 | 
					============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -286,7 +257,6 @@ level:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/light_sensor_3.py
 | 
					.. literalinclude:: examples/light_sensor_3.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Distance sensor
 | 
					Distance sensor
 | 
				
			||||||
===============
 | 
					===============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -300,7 +270,6 @@ Run a function when something gets near the sensor:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/distance_sensor_2.py
 | 
					.. literalinclude:: examples/distance_sensor_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Motors
 | 
					Motors
 | 
				
			||||||
======
 | 
					======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -310,7 +279,6 @@ Spin a :class:`Motor` around forwards and backwards:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/motor.py
 | 
					.. literalinclude:: examples/motor.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Robot
 | 
					Robot
 | 
				
			||||||
=====
 | 
					=====
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -325,7 +293,6 @@ Make a robot with a distance sensor that runs away when things get within
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/robot_2.py
 | 
					.. literalinclude:: examples/robot_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Button controlled robot
 | 
					Button controlled robot
 | 
				
			||||||
=======================
 | 
					=======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -333,11 +300,6 @@ Use four GPIO buttons as forward/back/left/right controls for a robot:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/robot_buttons_1.py
 | 
					.. literalinclude:: examples/robot_buttons_1.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Alternatively, use four buttons to program the directions and add a fifth
 | 
					 | 
				
			||||||
button to process them in turn, like a Bee-Bot or Turtle robot.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. literalinclude:: examples/robot_buttons_2.py
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Keyboard controlled robot
 | 
					Keyboard controlled robot
 | 
				
			||||||
=========================
 | 
					=========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -362,7 +324,6 @@ suffice:
 | 
				
			|||||||
    with ``sudo pip3 install evdev`` first. Be aware that ``evdev`` will only
 | 
					    with ``sudo pip3 install evdev`` first. Be aware that ``evdev`` will only
 | 
				
			||||||
    work with local input devices; this recipe will *not* work over SSH.
 | 
					    work with local input devices; this recipe will *not* work over SSH.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Motion sensor robot
 | 
					Motion sensor robot
 | 
				
			||||||
===================
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -374,7 +335,6 @@ Alternatively:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/robot_motion_2.py
 | 
					.. literalinclude:: examples/robot_motion_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Potentiometer
 | 
					Potentiometer
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -390,7 +350,6 @@ states that won't "fill" an LED:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/pot_2.py
 | 
					.. literalinclude:: examples/pot_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Measure temperature with an ADC
 | 
					Measure temperature with an ADC
 | 
				
			||||||
===============================
 | 
					===============================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -401,7 +360,6 @@ analog to digital converter:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.. literalinclude:: examples/thermometer.py
 | 
					.. literalinclude:: examples/thermometer.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Full color LED controlled by 3 potentiometers
 | 
					Full color LED controlled by 3 potentiometers
 | 
				
			||||||
=============================================
 | 
					=============================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -419,52 +377,15 @@ Alternatively, the following example is identical, but uses the
 | 
				
			|||||||
Please note the example above requires Python 3. In Python 2, :func:`zip`
 | 
					Please note the example above requires Python 3. In Python 2, :func:`zip`
 | 
				
			||||||
doesn't support lazy evaluation so the script will simply hang.
 | 
					doesn't support lazy evaluation so the script will simply hang.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					More recipes
 | 
				
			||||||
 | 
					============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Controlling the Pi's own LEDs
 | 
					Continue to:
 | 
				
			||||||
=============================
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
On certain models of Pi (specifically the model A+, B+, and 2B) it's possible
 | 
					* :doc:`recipes_advanced`
 | 
				
			||||||
to control the power and activity LEDs.  This can be useful for testing GPIO
 | 
					* :doc:`recipes_remote_gpio`
 | 
				
			||||||
functionality without the need to wire up your own LEDs (also useful because
 | 
					 | 
				
			||||||
the power and activity LEDs are "known good").
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Firstly you need to disable the usual triggers for the built-in LEDs. This can
 | 
					 | 
				
			||||||
be done from the terminal with the following commands:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. code-block:: console
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $ echo none | sudo tee /sys/class/leds/led0/trigger
 | 
					 | 
				
			||||||
    $ echo gpio | sudo tee /sys/class/leds/led1/trigger
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Now you can control the LEDs with gpiozero like so:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. literalinclude:: examples/led_builtin.py
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
To revert the LEDs to their usual purpose you can either reboot your Pi or
 | 
					 | 
				
			||||||
run the following commands:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. code-block:: console
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $ echo mmc0 | sudo tee /sys/class/leds/led0/trigger
 | 
					 | 
				
			||||||
    $ echo input | sudo tee /sys/class/leds/led1/trigger
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. note::
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    On the Pi Zero you can control the activity LED with this recipe, but
 | 
					 | 
				
			||||||
    there's no separate power LED to control (it's also worth noting the
 | 
					 | 
				
			||||||
    activity LED is active low, so set ``active_high=False`` when constructing
 | 
					 | 
				
			||||||
    your LED component).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    On the original Pi 1 (model A or B), the activity LED can be controlled
 | 
					 | 
				
			||||||
    with GPIO16 (after disabling its trigger as above) but the power LED is
 | 
					 | 
				
			||||||
    hard-wired on.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    On the Pi 3B the LEDs are controlled by a GPIO expander which is not
 | 
					 | 
				
			||||||
    accessible from gpiozero (yet).
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _travispy: https://travispy.readthedocs.io/
 | 
					 | 
				
			||||||
.. _Push Button Stop Motion: https://www.raspberrypi.org/learning/quick-reaction-game/
 | 
					.. _Push Button Stop Motion: https://www.raspberrypi.org/learning/quick-reaction-game/
 | 
				
			||||||
.. _Quick Reaction Game: https://www.raspberrypi.org/learning/quick-reaction-game/
 | 
					.. _Quick Reaction Game: https://www.raspberrypi.org/learning/quick-reaction-game/
 | 
				
			||||||
.. _GPIO Music Box: https://www.raspberrypi.org/learning/gpio-music-box/
 | 
					.. _GPIO Music Box: https://www.raspberrypi.org/learning/gpio-music-box/
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										69
									
								
								docs/recipes_advanced.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								docs/recipes_advanced.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					==================
 | 
				
			||||||
 | 
					Recipes (Advanced)
 | 
				
			||||||
 | 
					==================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. currentmodule:: gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following recipes demonstrate some of the capabilities of the GPIO Zero
 | 
				
			||||||
 | 
					library. Please note that all recipes are written assuming Python 3. Recipes
 | 
				
			||||||
 | 
					*may* work under Python 2, but no guarantees!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Travis build LED indicator
 | 
				
			||||||
 | 
					==========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use LEDs to indicate the status of a Travis build. A green light means the
 | 
				
			||||||
 | 
					tests are passing, a red light means the build is broken:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_travis.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note this recipe requires `travispy`_. Install with ``sudo pip3 install
 | 
				
			||||||
 | 
					travispy``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Button controlled robot
 | 
				
			||||||
 | 
					=======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Alternatively, use four buttons to program the directions and add a fifth
 | 
				
			||||||
 | 
					button to process them in turn, like a Bee-Bot or Turtle robot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/robot_buttons_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Controlling the Pi's own LEDs
 | 
				
			||||||
 | 
					=============================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					On certain models of Pi (specifically the model A+, B+, and 2B) it's possible
 | 
				
			||||||
 | 
					to control the power and activity LEDs.  This can be useful for testing GPIO
 | 
				
			||||||
 | 
					functionality without the need to wire up your own LEDs (also useful because
 | 
				
			||||||
 | 
					the power and activity LEDs are "known good").
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Firstly you need to disable the usual triggers for the built-in LEDs. This can
 | 
				
			||||||
 | 
					be done from the terminal with the following commands::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $ echo none | sudo tee /sys/class/leds/led0/trigger
 | 
				
			||||||
 | 
					    $ echo gpio | sudo tee /sys/class/leds/led1/trigger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Now you can control the LEDs with gpiozero like so:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_builtin.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To revert the LEDs to their usual purpose you can either reboot your Pi or
 | 
				
			||||||
 | 
					run the following commands::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $ echo mmc0 | sudo tee /sys/class/leds/led0/trigger
 | 
				
			||||||
 | 
					    $ echo input | sudo tee /sys/class/leds/led1/trigger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    On the Pi Zero you can control the activity LED with this recipe, but
 | 
				
			||||||
 | 
					    there's no separate power LED to control (it's also worth noting the
 | 
				
			||||||
 | 
					    activity LED is active low, so set ``active_high=False`` when constructing
 | 
				
			||||||
 | 
					    your LED component).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    On the original Pi 1 (model A or B), the activity LED can be controlled
 | 
				
			||||||
 | 
					    with GPIO16 (after disabling its trigger as above) but the power LED is
 | 
				
			||||||
 | 
					    hard-wired on.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    On the Pi 3B the LEDs are controlled by a GPIO expander which is not
 | 
				
			||||||
 | 
					    accessible from gpiozero (yet).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. _travispy: https://travispy.readthedocs.io/
 | 
				
			||||||
							
								
								
									
										61
									
								
								docs/recipes_remote_gpio.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								docs/recipes_remote_gpio.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					===================
 | 
				
			||||||
 | 
					Remote GPIO Recipes
 | 
				
			||||||
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. currentmodule:: gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following recipes demonstrate some of the capabilities of the feature of the
 | 
				
			||||||
 | 
					GPIO Zero library. Before you start following these examples, please read up on
 | 
				
			||||||
 | 
					preparing your Pi and your host PC to work with :doc:`remote_gpio`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please note that all recipes are written assuming Python 3. Recipes *may* work
 | 
				
			||||||
 | 
					under Python 2, but no guarantees!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LED + Button
 | 
				
			||||||
 | 
					============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Let a button on one Raspberry Pi control the LED of another:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_button_remote_1.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LED + 2 Buttons
 | 
				
			||||||
 | 
					===============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The LED will come on when both buttons are pressed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_button_remote_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Multi-room motion alert
 | 
				
			||||||
 | 
					=======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Install a Raspberry Pi with a motion sensor in each room of your house, and have
 | 
				
			||||||
 | 
					an LED indicator showing when there's motion in each room:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/multi_room_motion_alert.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Multi-room doorbell
 | 
				
			||||||
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Install a Raspberry Pi with a buzzer attached in each room you want to hear the
 | 
				
			||||||
 | 
					doorbell, and use a push button as the doorbell:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/multi_room_doorbell.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This could also be used as an internal doorbell (tell people it's time for
 | 
				
			||||||
 | 
					dinner from the kitchen).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Light sensor + Sense HAT
 | 
				
			||||||
 | 
					=========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `Sense HAT`_ (not supported by GPIO Zero) includes temperature, humidity and
 | 
				
			||||||
 | 
					pressure sensors, but no light sensor. Remote pins allow an external light
 | 
				
			||||||
 | 
					sensor to be used as well. The Sense HAT LED display can be used to show
 | 
				
			||||||
 | 
					different colours according to the light levels:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/sense_hat_remote_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that in this case, the Sense HAT code must be run locally, and the GPIO
 | 
				
			||||||
 | 
					remotely.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. _Sense HAT: https://www.raspberrypi.org/products/sense-hat/
 | 
				
			||||||
							
								
								
									
										270
									
								
								docs/remote_gpio.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								docs/remote_gpio.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,270 @@
 | 
				
			|||||||
 | 
					===========
 | 
				
			||||||
 | 
					Remote GPIO
 | 
				
			||||||
 | 
					===========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. currentmodule:: gpiozero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GPIO Zero supports a number of different pin implementations (low-level pin
 | 
				
			||||||
 | 
					libraries which deal with the GPIO pins directly). By default, the `RPi.GPIO`_
 | 
				
			||||||
 | 
					library is used (assuming it is installed on your system), but you can
 | 
				
			||||||
 | 
					optionally specify one to use. For more information, see the :doc:`pins`
 | 
				
			||||||
 | 
					documentation page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					One of the pin libraries supported, `pigpio`_, provides the ability to control
 | 
				
			||||||
 | 
					GPIO pins remotely over the network, which means you can use GPIO Zero to
 | 
				
			||||||
 | 
					control devices connected to a Raspberry Pi on the network. You can do this from
 | 
				
			||||||
 | 
					another Raspberry Pi, or even from a PC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the :doc:`recipes_remote_gpio` page for examples on how remote pins can be
 | 
				
			||||||
 | 
					used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Preparing the Raspberry Pi
 | 
				
			||||||
 | 
					==========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you're using Raspbian Jessie (desktop - not Jessie Lite) then you have
 | 
				
			||||||
 | 
					everything you need to use the remote GPIO feature. If you're using Jessie Lite,
 | 
				
			||||||
 | 
					or another distribution, you'll need to install pigpio::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then you just need to enable **Remote GPIO** in the Raspberry Pi configuration
 | 
				
			||||||
 | 
					tool:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. image:: images/raspi-config.png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(Alternatively, use ``sudo raspi-config`` on the command line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then launch the pigpio daemon::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pigpiod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To only allow connections from a specific IP address, use the ``-n`` flag. For
 | 
				
			||||||
 | 
					example::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pigpiod -n localhost # allow localhost only
 | 
				
			||||||
 | 
					    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::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo systemctl enable pigpiod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Preparing the host computer
 | 
				
			||||||
 | 
					===========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the host computer is a Raspberry Pi running Raspbian Jessie (or a PC running
 | 
				
			||||||
 | 
					x86 PIXEL), 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
 | 
				
			||||||
 | 
					------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, update your repositories list::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install the pigpio library for Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python3-pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or Python 2::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python-pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Alternatively, install with pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pip3 install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pip install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linux
 | 
				
			||||||
 | 
					-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, update your distribution's repositories list. For example::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then install pip for Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python3-pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or Python 2::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo apt install python-pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(Alternatively, install pip with `get-pip`_.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, install pigpio for Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pip3 install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or Python 2::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sudo pip install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Mac OS
 | 
				
			||||||
 | 
					------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, install pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ???
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, install pigpio with pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pip install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Windows
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First install pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ???
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, install pigpio with pip::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pip install pigpio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Environment variables
 | 
				
			||||||
 | 
					=====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The simplest way to use devices with remote pins is to set the ``PIGPIO_ADDR``
 | 
				
			||||||
 | 
					environment variable to the IP address of the desired Raspberry Pi. You must
 | 
				
			||||||
 | 
					run your Python script or launch your development environment with the
 | 
				
			||||||
 | 
					environment variable set using the command line. For example, one of the
 | 
				
			||||||
 | 
					following::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $ PIGPIO_ADDR=192.168.1.3 python3 hello.py
 | 
				
			||||||
 | 
					    $ PIGPIO_ADDR=192.168.1.3 python3
 | 
				
			||||||
 | 
					    $ PIGPIO_ADDR=192.168.1.3 ipython3
 | 
				
			||||||
 | 
					    $ PIGPIO_ADDR=192.168.1.3 idle3 &
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are running this from a PC (not a Raspberry Pi) with gpiozero and the
 | 
				
			||||||
 | 
					pigpio Python library installed, this will work with no further configuration.
 | 
				
			||||||
 | 
					However, if you are running this from a Raspberry Pi, you will also need to
 | 
				
			||||||
 | 
					ensure the default pin factory is set to ``PiGPIOPin``. If ``RPi.GPIO`` is
 | 
				
			||||||
 | 
					installed, this will be selected as the default pin factory, so either uninstall
 | 
				
			||||||
 | 
					it, or use another environment variable to set it to ``PiGPIOPin``::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $ GPIOZERO_PIN_FACTORY=pigpio PIGPIO_ADDR=192.168.1.3 python3 hello.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This usage will set the pin factory to :class:`PiGPIOPin` with a default host of
 | 
				
			||||||
 | 
					``192.168.1.3``. The pin factory can be changed inline in the code, as seen in
 | 
				
			||||||
 | 
					the following sections.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					With this usage, you can write gpiozero code like you would on a Raspberry Pi,
 | 
				
			||||||
 | 
					with no modifications needed. For example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_1.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When run with::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $ PIGPIO_ADDR=192.168.1.3 python3 led.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					will flash the LED connected to pin 17 of the Raspberry Pi with the IP address
 | 
				
			||||||
 | 
					``192.168.1.3``. And::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $ 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pin objects
 | 
				
			||||||
 | 
					===========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An alternative (or additional) method of configuring gpiozero objects to use
 | 
				
			||||||
 | 
					remote pins is to create instances of :class:PiGPIOPin objects, and
 | 
				
			||||||
 | 
					instantiating device objects with those pin objects, rather than just numbers.
 | 
				
			||||||
 | 
					For example, with no environment variables set:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_remote_1.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This allows devices on multiple Raspberry Pis to be used in the same script:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_remote_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_remote_3.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Alternatively, when run with the environment variables
 | 
				
			||||||
 | 
					``GPIOZERO_PIN_FACTORY=pigpio PIGPIO_ADDR=192.168.1.3`` set, the following
 | 
				
			||||||
 | 
					script will behave exactly the same as the previous one:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_remote_4.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Of course, multiple IP addresses can be used:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/led_remote_5.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that these examples use the :class:`LED` class, which takes a ``pin``
 | 
				
			||||||
 | 
					argument to initialise. Some classes, particularly those representing HATs and
 | 
				
			||||||
 | 
					other add-on boards, do not require their pin numbers to be specified. However,
 | 
				
			||||||
 | 
					it is still possible to use remote pins with these devices, either using
 | 
				
			||||||
 | 
					environment variables, or by using :meth:`~Device._set_pin_factory`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/traffichat_remote_1.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This also allows you to swap between two IP addresses and create instances of
 | 
				
			||||||
 | 
					multiple HATs connected to different Pis:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/traffichat_remote_2.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You could even use a HAT which is not supported by GPIO Zero (such as the
 | 
				
			||||||
 | 
					`Sense HAT`_) on one Pi, and use remote pins to control another over the
 | 
				
			||||||
 | 
					network:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/sense_hat_remote.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that in this case, the Sense HAT code must be run locally, and the GPIO
 | 
				
			||||||
 | 
					remotely.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pi Zero USB OTG
 | 
				
			||||||
 | 
					===============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `Raspberry Pi Zero`_ and `Pi Zero W`_ feature a USB OTG port, allowing users
 | 
				
			||||||
 | 
					to configure the device as (amongst other things) an Ethernet device. In this
 | 
				
			||||||
 | 
					mode, it is possible to control the Pi Zero's GPIO pins over USB from another
 | 
				
			||||||
 | 
					computer using remote pins.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First, configure the boot partition of the SD card:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Edit ``config.txt`` and add ``dtoverlay=dwc2`` on a new line, then save the
 | 
				
			||||||
 | 
					file.
 | 
				
			||||||
 | 
					2. Create an empty file called ``ssh`` (no file extension) and save it in the
 | 
				
			||||||
 | 
					boot partition.
 | 
				
			||||||
 | 
					3. Edit ``cmdline.txt`` and insert ``modules-load=dwc2,g_ether`` after
 | 
				
			||||||
 | 
					``rootwait``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(See `blog.gbaman.info`_ for more information)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. literalinclude:: examples/pi_zero_remote.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    When running code directly on a Raspberry Pi, any pin type can be used
 | 
				
			||||||
 | 
					    (assuming the relevant library is installed), but when a device is used
 | 
				
			||||||
 | 
					    remotely, only :class:`PiGPIOPin` can be used, as pigpio is the only pin
 | 
				
			||||||
 | 
					    library which supports remote GPIO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. _RPi.GPIO: https://pypi.python.org/pypi/RPi.GPIO
 | 
				
			||||||
 | 
					.. _pigpio: http://abyz.co.uk/rpi/pigpio/python.html
 | 
				
			||||||
 | 
					.. _get-pip: https://pip.pypa.io/en/stable/installing/
 | 
				
			||||||
 | 
					.. _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/
 | 
				
			||||||
 | 
					.. _blog.gbaman.info: http://blog.gbaman.info/?p=791
 | 
				
			||||||
@@ -39,10 +39,12 @@ class PingServer(InternalDevice):
 | 
				
			|||||||
        from gpiozero import PingServer, LED
 | 
					        from gpiozero import PingServer, LED
 | 
				
			||||||
        from signal import pause
 | 
					        from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        server = PingServer('my-server')
 | 
					        google = PingServer('google.com')
 | 
				
			||||||
        led = LED(4)
 | 
					        led = LED(4)
 | 
				
			||||||
        led.source_delay = 1
 | 
					
 | 
				
			||||||
        led.source = server.values
 | 
					        led.source_delay = 60  # check once per minute
 | 
				
			||||||
 | 
					        led.source = google.values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pause()
 | 
					        pause()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    :param str host:
 | 
					    :param str host:
 | 
				
			||||||
@@ -86,8 +88,10 @@ class CPUTemperature(InternalDevice):
 | 
				
			|||||||
        # Use minimums and maximums that are closer to "normal" usage so the
 | 
					        # Use minimums and maximums that are closer to "normal" usage so the
 | 
				
			||||||
        # bar graph is a bit more "lively"
 | 
					        # bar graph is a bit more "lively"
 | 
				
			||||||
        temp = CPUTemperature(min_temp=50, max_temp=90)
 | 
					        temp = CPUTemperature(min_temp=50, max_temp=90)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        graph = LEDBarGraph(5, 6, 13, 19, 25, pwm=True)
 | 
					        graph = LEDBarGraph(5, 6, 13, 19, 25, pwm=True)
 | 
				
			||||||
        graph.source = temp.values
 | 
					        graph.source = temp.values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pause()
 | 
					        pause()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    :param str sensor_file:
 | 
					    :param str sensor_file:
 | 
				
			||||||
@@ -158,14 +162,15 @@ class TimeOfDay(InternalDevice):
 | 
				
			|||||||
    The following example turns on a lamp attached to an :class:`Energenie`
 | 
					    The following example turns on a lamp attached to an :class:`Energenie`
 | 
				
			||||||
    plug between 7 and 8 AM::
 | 
					    plug between 7 and 8 AM::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        from datetime import time
 | 
					 | 
				
			||||||
        from gpiozero import TimeOfDay, Energenie
 | 
					        from gpiozero import TimeOfDay, Energenie
 | 
				
			||||||
 | 
					        from datetime import time
 | 
				
			||||||
        from signal import pause
 | 
					        from signal import pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        lamp = Energenie(0)
 | 
					        lamp = Energenie(0)
 | 
				
			||||||
        morning = TimeOfDay(time(7), time(8))
 | 
					        morning = TimeOfDay(time(7), time(8))
 | 
				
			||||||
        morning.when_activated = lamp.on
 | 
					
 | 
				
			||||||
        morning.when_deactivated = lamp.off
 | 
					        lamp.source = morning.values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pause()
 | 
					        pause()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    :param ~datetime.time start_time:
 | 
					    :param ~datetime.time start_time:
 | 
				
			||||||
@@ -240,4 +245,3 @@ class TimeOfDay(InternalDevice):
 | 
				
			|||||||
            return self.start_time <= datetime.utcnow().time() <= self.end_time
 | 
					            return self.start_time <= datetime.utcnow().time() <= self.end_time
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            return self.start_time <= datetime.now().time() <= self.end_time
 | 
					            return self.start_time <= datetime.now().time() <= self.end_time
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user