RPI - GPIO

Utilisations : entrées, sorties, …

Ligne de commande

Elevate your permissions to root user to allow IO access

sudo -i

Setup to control pin as output

Substitute 23 in the following commands for your GPIO number (GPIO, not pin number)

echo “23” > /sys/class/gpio/export echo “out” > /sys/class/gpio/gpio23/direction

Control Output State

echo “1” > /sys/class/gpio/gpio23/value echo “0” > /sys/class/gpio/gpio23/value

Setup to read pin as an input

Substitute 23 in the following commands for your GPIO number (GPIO, not pin number)

echo “23” > /sys/class/gpio/export echo “in” > /sys/class/gpio/gpio23/direction

Read its state

cat /sys/class/gpio/gpio23/value

To Release A Pin Afterwards

echo “23” > /sys/class/gpio/unexport

Avec Python

Avec la biblio RPI.gpio et la biblio gpiozero : Here’s a list of devices which currently supported:

  • LED (also PWM LED allowing change of brightness)
  • RGB LED
  • Buzzer
  • Motor
  • Button
  • Motion Sensor
  • Light Sensor
  • Analogue-to-Digital converters MCP3004 and MCP3008
  • Robot

Vidéo d'introduction

Ressources

Pins

RPI 3

RPI B+

Sorties

from gpiozero import LED
from time import sleep
 
led = LED(17)
 
while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)

Entreés

from gpiozero import Button
mybutton = Button(2)
mybutton.wait_for_press()
print('You pushed me')

Lancer une fonction

from gpiozero import Button
from signal import pause
 
def say_hello():
	print("Hello!")
 
button = Button(2)
button.when_pressed = say_hello
 
pause()

Lancer un programme

from gpiozero import Button
from signal import pause
import subprocess
 
button = Button(2)
button.wait_for_press()
subprocess.call(['omxplayer test.mkv'], shell=True)

Déclencher deux sons avec deux boutons Avec Pygame : http://nerdparadise.com/tech/python/pygame/basics/part3/

  • FORMATS MP3 POSSIBLES AVEC pygame.mixer.music.load(“Got-inspiration.mp3”)
  • FORMATS WAVE AVEC sound = pygame.mixer.Sound(“/usr/share/scratch/Media/Sounds/Electronic/Zoop.wav”). The Sound can be loaded from an OGG audio file or from an uncompressed WAV.
from gpiozero import Button
from signal import pause
import pygame
 
b1 = Button(2)
b2 = Button(3)
 
pygame.mixer.init()
son1 =pygame.mixer.Sound('/usr/share/scratch/Media/Sounds/Electronic/Zoop.wav')
son2 =pygame.mixer.Sound('/usr/share/scratch/Media/Sounds/Electronic/Laser1.wav')
 
def launch_sound1():
    son1.play()
 
def launch_sound2():
    son2.play()
 
b1.when_pressed = launch_sound1
b2.when_pressed = launch_sound2
 
pause()

Même chose en plus souple

from gpiozero import LED, Button
from signal import pause
import pygame
 
 
button1 = Button(2)
button2 = Button(3)
led = LED(17)
pygame.mixer.init()
monson1 =pygame.mixer.Sound('/usr/share/scratch/Media/Sounds/Electronic/Zoop.wav')
monson2 =pygame.mixer.Sound('/usr/share/scratch/Media/Sounds/Electronic/Laser1.wav')
 
# dictionnaire clé/valeur pour lister les sons
sounds = {button1: monson1,
          button2: monson2}
 
def stateON(button):
    sounds[button].play()
    led.on()
 
def stateOFF(button):
    sounds[button].stop()
    led.off()  
 
def btntest():
    # parcours l'ensemble des clés du dictionnaire sounds
    for button in sounds.keys():
        # when_pressed envoie apr defaut le bouton en tant qu'argument de la fonction stateON / stateOFF
        button.when_pressed = stateON
        button.when_released = stateOFF
 
btntest()
pause()

Entrée / Sortie

from gpiozero import LED, Button
from signal import pause
led = LED(17)
button = Button(2)
button.when_pressed = led.on
button.when_released = led.off
pause()
<code>
</WRAP>
</WRAP>
 
 
 
-----
 
 
FIXME
 
 
 
 
 
 
 
 
==== Installation ====
 
  sudo apt-get install python-setuptools
  sudo easy_install -U RPIO
 
Comme on a accès aux couches physiques avec ce type de module, il faut lancer python ou idle (l'interpréteur python) en mode administrateur :
 
  sudo idle &
 
==== Exemples ===
**Exemple de code en python (http://explainingcomputers.com/rasp_pi_robotics.html) :**
<code python>
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)
for x in range(0,3):
    GPIO.output(7,True)
    time.sleep(1)
    GPIO.output(7,False)
    time.sleep(1)
GPIO.cleanup()

Autre exemple en contrôlant des moteurs à courant continu via un L298 :