diff --git a/docs/recipes.rst b/docs/recipes.rst index f13c431..dbaa69a 100644 --- a/docs/recipes.rst +++ b/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 =============================================