Add a bunch of code snippets demonstrating generators to the recipes
chapter, including a temperature recipe for the MCP3008.
This commit is contained in:
Dave Jones
2016-02-07 19:42:54 +00:00
parent 4fc0673233
commit 183b854717

View File

@@ -4,6 +4,11 @@ Recipes
.. currentmodule:: gpiozero .. currentmodule:: gpiozero
The following recipes demonstrate some of the capabilities of the gpiozero
library. Please note that all recipes are written assuming Python 3. Recipes
*may* work under Python 2, but no guarantees!
Pin Numbering Pin Numbering
============= =============
@@ -53,6 +58,7 @@ 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.
Button Button
====== ======
@@ -93,6 +99,7 @@ Run a function every time the button is pressed::
pause() pause()
Button controlled LED Button controlled LED
===================== =====================
@@ -109,6 +116,19 @@ Turn on an :class:`LED` when a :class:`Button` is pressed::
pause() pause()
Alternatively::
from gpiozero import LED, Button
from signal import pause
led = LED(17)
button = Button(2)
led.source = button.values
pause()
Traffic Lights Traffic Lights
============== ==============
@@ -137,6 +157,27 @@ Using a :class:`TrafficLights` kit like Pi-Stop::
lights.amber.off() lights.amber.off()
lights.red.off() lights.red.off()
Alternatively::
from gpiozero import TrafficLights
from time import sleep
from signal import pause
def traffic_light_sequence():
while True:
yield (0, 0, 1) # green
sleep(10)
yield (0, 1, 0) # amber
sleep(1)
yield (1, 0, 0) # red
sleep(10)
yield (1, 1, 0) # red+amber
sleep(1)
lights.source = traffic_light_sequence()
pause()
Using :class:`LED` components:: Using :class:`LED` components::
from gpiozero import LED from gpiozero import LED
@@ -164,6 +205,7 @@ Using :class:`LED` components::
amber.off() amber.off()
red.off() red.off()
Push button stop motion Push button stop motion
======================= =======================
@@ -184,6 +226,7 @@ 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
============= =============
@@ -216,6 +259,7 @@ 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
============== ==============
@@ -244,6 +288,7 @@ 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
=================== ===================
@@ -299,6 +344,7 @@ Using :class:`LED`, :class:`Buzzer`, and :class:`Button` components::
pause() pause()
RGB LED RGB LED
======= =======
@@ -310,22 +356,30 @@ Making colours with an :class:`RGBLED`::
led = RGBLED(red=9, green=10, blue=11) led = RGBLED(red=9, green=10, blue=11)
led.red = 1 # full red led.red = 1 # full red
sleep(1)
led.red = 0.5 # half red led.red = 0.5 # half red
sleep(1)
led.color = (0, 1, 0) # full green led.color = (0, 1, 0) # full green
sleep(1)
led.color = (1, 0, 1) # magenta led.color = (1, 0, 1) # magenta
sleep(1)
led.color = (1, 1, 0) # yellow led.color = (1, 1, 0) # yellow
sleep(1)
led.color = (0, 1, 1) # cyan led.color = (0, 1, 1) # cyan
sleep(1)
led.color = (1, 1, 1) # white led.color = (1, 1, 1) # white
sleep(1)
led.color = (0, 0, 0) # off led.color = (0, 0, 0) # off
sleep(1)
# slowly increase intensity of blue # slowly increase intensity of blue
for n in range(100): for n in range(100):
led.blue = n/100 led.blue = n/100
sleep(0.1) sleep(0.1)
Motion sensor Motion sensor
============= =============
@@ -344,6 +398,7 @@ Light an :class:`LED` when a :class:`MotionSensor` detects motion::
pause() pause()
Light sensor Light sensor
============ ============
@@ -374,6 +429,20 @@ Run a function when the light changes::
pause() pause()
Or make a :class:`PWMLED` change brightness according to the detected light
level::
from gpiozero import LightSensor, LED
from signal import pause
sensor = LightSensor(18)
led = PWMLED(16)
led.source = sensor.values
pause()
Motors Motors
====== ======
@@ -392,6 +461,7 @@ Spin a :class:`Motor` around forwards and backwards::
motor.backward() motor.backward()
sleep(5) sleep(5)
Robot Robot
===== =====
@@ -410,6 +480,7 @@ Make a :class:`Robot` drive around in (roughly) a square::
robot.right() robot.right()
sleep(1) sleep(1)
Button controlled robot Button controlled robot
======================= =======================
@@ -439,9 +510,13 @@ Use four GPIO buttons as forward/back/left/right controls for a robot::
pause() pause()
Keyboard controlled robot Keyboard controlled robot
========================= =========================
.. XXX Rewrite this using curses (to avoid evdev dep, which isn't packaged
on Rapsbian)
Use up/down/left/right keys to control a robot:: Use up/down/left/right keys to control a robot::
from gpiozero import RyanteckRobot from gpiozero import RyanteckRobot
@@ -466,6 +541,7 @@ Use up/down/left/right keys to control a robot::
if event.value == 0: # key up if event.value == 0: # key up
robot.stop() robot.stop()
Motion sensor robot Motion sensor robot
=================== ===================
@@ -482,6 +558,19 @@ Make a robot drive forward when it detects motion::
pause() pause()
Alternatively::
from gpiozero import Robot, MotionSensor
from signal import pause
robot = Robot(left=(4, 14), right=(17, 18))
pir = MotionSensor(5)
robot.source = zip(pir.values, pir.values)
pause()
Potentiometer Potentiometer
============= =============
@@ -496,6 +585,29 @@ connected to a :class:`MCP3008` analog to digital converter::
with MCP3008(channel=0) as pot: with MCP3008(channel=0) as pot:
print(pot.value) print(pot.value)
Measure temperature with an ADC
===============================
.. IMAGE TBD
Wire a TMP36 temperature sensor to the first channel of an :class:`MCP3008`
analog to digital converter::
from gpiozero import MCP3008
from time import sleep
def convert_temp(gen):
for value in gen:
yield (value * 3.3 - 0.5) * 100
adc = MCP3008(channel=0)
for temp in convert_temp(adc.values):
print('The temperature is', temp, 'C')
sleep(1)
Full color LED controlled by 3 potentiometers Full color LED controlled by 3 potentiometers
============================================= =============================================