Ceci est une ancienne révision du document !
Suite à quelques tests d'utilisation de Retropie (voir Boitier raspberry b+ et plus si affinités) il s'avère qu'une des problématique est que l'on est obligé d'avoir un clavier branché pour pourvoir utiliser la touche echap
lorsque l'on veux sortir d'un jeu. Cela empêche donc de brancher de seconde manette, ou implique l'utilisation un hub usb. L'idée ici est d'utiliser les GPIO du raspberry pour brancher quelques petits boutons qui permettront, apr l’intermédiaire un petit script python,de remplacer le clavier. Je suis pour le moment parti sur 3 bouton : un bouton esc
pour sortir des jeux, un boutons tab
super utile pour configurer Mame, et un bouton power off
qui permettra d'éteindre correctement le système du raspberry (sans toutefois l'éteindre électriquement malheureusement).
Ce script utilise 3 libraires :
RPi.GPIO
qui est normalement intégrée nativement dans les version récente de raspbian et donc je l'espère sur les images de retropie ⇒ à tester.evdev
qui permet de gérer ou simuler des input type clavier et souris sous linuxsh
qui permet de facilement lancer des commande shell dans pythonsudo apt-get install python-pip python-dev sudo pip install evdev sudo pip install sh
#!/usr/bin/env python # encoding: utf-8 from evdev import uinput, ecodes as e import RPi.GPIO as GPIO from sh import shutdwon # Script de test permettant de simuler l'appui sur la touche echap avec un bouton mettant a la masse la broche 23 de la Raspberry Pi # Si la broche 24 est mise a la masse le script va éteindre le rasbarry proprement (mais pas électriquement) # # Nécessites les libs evdev et sh : # pip install sh evdev # # Source simulation de clavier avec evedv : # https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux#adzerk9805928 # # Tuto utilisation boutons et GPIO : # http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/ #Initalise GPIO INPUTs with pull_ups GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_UP) GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_UP) GPIO.setup(25, GPIO.IN, pull_up_down = GPIO.PUD_UP) #Callback function tha simulate keyboards events def keypress(code): with uinput.UInput() as ui: ui.write(e.EV_KEY, code, 1) ui.write(e.EV_KEY, code, 0) ui.syn() def echap(): keypress(e.KEY_ESC) def tab(): keypress(e.KEY_TAB) #Add lisneners on GPIOs pins 23 & 25 GPIO.add_event_detect(23, GPIO.FALLING, callback=echap, bouncetime=300) GPIO.add_event_detect(25, GPIO.FALLING, callback=tab, bouncetime=300) #Wait for a falling edge on GPIO 24 to shut down the system GPIO.wait_for_edge(24, GPIO.FALLING) GPIO.cleanup( shutdown('-h','now')
Mes deux sources d'info pour ce script :