====== 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
[[https://www.youtube.com/watch?v=q_NvDTZIaS4|Vidéo d'introduction]]
**Ressources**
* La documentation de [[https://gpiozero.readthedocs.io/en/v1.3.1/recipes.html#button|gpiozero]]
* [[https://www.raspberrypi.org/blog/gpio-zero-a-friendly-python-api-for-physical-computing/|gpiozero - tutorial]]
* Article [[materiel:rpi:pwm:accueil|RPI - PWM]]
=====Pins=====
{{:materiel:rpi:gpio:pi3_gpio.png?500|}} **RPI 3**
{{:materiel:rpi:raspberry_pins.png|}} **RPI B+**
===== Sorties =====
{{:materiel:rpi:gpio:led-gpio17-500x297.png|}}
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
===== Entreés =====
{{:materiel:rpi:gpio:rpi-button.png|}}
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 =====
{{:materiel:rpi:gpio:rpi-gpio-button-led.png|}}
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()
-----
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) :**
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 :**
{{:materiel:rpi:rpi-robotics2.png?400|}}