mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-10-29 17:50:37 +00:00
Fix #119
Add a bunch of code snippets demonstrating generators to the recipes chapter, including a temperature recipe for the MCP3008.
This commit is contained in:
114
docs/recipes.rst
114
docs/recipes.rst
@@ -4,6 +4,11 @@ Recipes
|
||||
|
||||
.. 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
|
||||
=============
|
||||
|
||||
@@ -53,6 +58,7 @@ Alternatively::
|
||||
may be reset. Keep your script alive with :func:`signal.pause`. See
|
||||
:ref:`keep-your-script-running` for more information.
|
||||
|
||||
|
||||
Button
|
||||
======
|
||||
|
||||
@@ -93,6 +99,7 @@ Run a function every time the button is pressed::
|
||||
|
||||
pause()
|
||||
|
||||
|
||||
Button controlled LED
|
||||
=====================
|
||||
|
||||
@@ -109,6 +116,19 @@ Turn on an :class:`LED` when a :class:`Button` is pressed::
|
||||
|
||||
pause()
|
||||
|
||||
Alternatively::
|
||||
|
||||
from gpiozero import LED, Button
|
||||
from signal import pause
|
||||
|
||||
led = LED(17)
|
||||
button = Button(2)
|
||||
|
||||
led.source = button.values
|
||||
|
||||
pause()
|
||||
|
||||
|
||||
Traffic Lights
|
||||
==============
|
||||
|
||||
@@ -137,6 +157,27 @@ Using a :class:`TrafficLights` kit like Pi-Stop::
|
||||
lights.amber.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::
|
||||
|
||||
from gpiozero import LED
|
||||
@@ -164,6 +205,7 @@ Using :class:`LED` components::
|
||||
amber.off()
|
||||
red.off()
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
GPIO Music Box
|
||||
==============
|
||||
|
||||
@@ -244,6 +288,7 @@ Each button plays a different sound!
|
||||
|
||||
See `GPIO Music Box`_ for a full resource.
|
||||
|
||||
|
||||
All on when pressed
|
||||
===================
|
||||
|
||||
@@ -299,6 +344,7 @@ Using :class:`LED`, :class:`Buzzer`, and :class:`Button` components::
|
||||
|
||||
pause()
|
||||
|
||||
|
||||
RGB LED
|
||||
=======
|
||||
|
||||
@@ -310,22 +356,30 @@ Making colours with an :class:`RGBLED`::
|
||||
led = RGBLED(red=9, green=10, blue=11)
|
||||
|
||||
led.red = 1 # full red
|
||||
sleep(1)
|
||||
led.red = 0.5 # half red
|
||||
sleep(1)
|
||||
|
||||
led.color = (0, 1, 0) # full green
|
||||
|
||||
sleep(1)
|
||||
led.color = (1, 0, 1) # magenta
|
||||
sleep(1)
|
||||
led.color = (1, 1, 0) # yellow
|
||||
sleep(1)
|
||||
led.color = (0, 1, 1) # cyan
|
||||
sleep(1)
|
||||
led.color = (1, 1, 1) # white
|
||||
sleep(1)
|
||||
|
||||
led.color = (0, 0, 0) # off
|
||||
sleep(1)
|
||||
|
||||
# slowly increase intensity of blue
|
||||
for n in range(100):
|
||||
led.blue = n/100
|
||||
sleep(0.1)
|
||||
|
||||
|
||||
Motion sensor
|
||||
=============
|
||||
|
||||
@@ -344,6 +398,7 @@ Light an :class:`LED` when a :class:`MotionSensor` detects motion::
|
||||
|
||||
pause()
|
||||
|
||||
|
||||
Light sensor
|
||||
============
|
||||
|
||||
@@ -374,6 +429,20 @@ Run a function when the light changes::
|
||||
|
||||
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
|
||||
======
|
||||
|
||||
@@ -392,6 +461,7 @@ Spin a :class:`Motor` around forwards and backwards::
|
||||
motor.backward()
|
||||
sleep(5)
|
||||
|
||||
|
||||
Robot
|
||||
=====
|
||||
|
||||
@@ -410,6 +480,7 @@ Make a :class:`Robot` drive around in (roughly) a square::
|
||||
robot.right()
|
||||
sleep(1)
|
||||
|
||||
|
||||
Button controlled robot
|
||||
=======================
|
||||
|
||||
@@ -439,9 +510,13 @@ Use four GPIO buttons as forward/back/left/right controls for a robot::
|
||||
|
||||
pause()
|
||||
|
||||
|
||||
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::
|
||||
|
||||
from gpiozero import RyanteckRobot
|
||||
@@ -466,6 +541,7 @@ Use up/down/left/right keys to control a robot::
|
||||
if event.value == 0: # key up
|
||||
robot.stop()
|
||||
|
||||
|
||||
Motion sensor robot
|
||||
===================
|
||||
|
||||
@@ -482,6 +558,19 @@ Make a robot drive forward when it detects motion::
|
||||
|
||||
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
|
||||
=============
|
||||
|
||||
@@ -496,6 +585,29 @@ connected to a :class:`MCP3008` analog to digital converter::
|
||||
with MCP3008(channel=0) as pot:
|
||||
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
|
||||
=============================================
|
||||
|
||||
|
||||
Reference in New Issue
Block a user