====== 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|}}