Outils d'utilisateurs

Outils du Site


projets:retropie_gpio_additions

Ceci est une ancienne révision du document !


Boutons (GPIO) supplémentaires pour retropie

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).

Schéma de branchement

Script

Dépendances

Ce script utilise 3 libraires :

  • La libraire RPi.GPIO qui est normalement intégrée nativement dans les version récente de raspbian
  • La libraire evdev qui permet de gérer ou simuler des input type clavier et souris sous linux
  • La libraire python-uinput permettant de simuler un device (ici clavier) virtuel
  • la libraire sh qui permet de facilement lancer des commande shell dans python

Pour installer les lib :

sudo apt-get install python-pip python-dev
sudo pip install python-uinput
sudo pip install sh

La script python

#!/usr/bin/env python
# encoding: utf-8
 
import RPi.GPIO as GPIO
from sh import shutdown
import uinput
 
# 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)
 
 
import uinput
import time
 
#Virtual Keyboard device to simulate key events
events = (
    uinput.KEY_ESC,
    uinput.KEY_TAB
    )
device = uinput.Device(events)
 
def simulate_key(code):
    device.emit(code, 1) # Press.
    time.sleep(0.1)
    device.emit(code, 0) # Release.
 
def echap(*args,**kwargs):
    print("echap")
    simulate_key(uinput.KEY_ESC)
 
def tab(*args,**kwargs):
    print("tab")
    simulate_key(uinput.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)
 
print("Started") 
#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')

pour le lancer :

sudo python retropie_additions.py

Mes deux sources d'info pour ce script :

Lancement automatique

En supposant que le script est enregistré dans /home/pi/, il suffit de rajouter la ligne suivante dans le fichier /etc/rc.local (sudo nano /etc/rc.local) avant la ligne exit 0 :

/usr/bin/python /home/pi/retropie_additions.py &

Tests

  • Installation des dépendance : :OK:
  • GPIO : :OK:
  • Shutdown: :OK:
  • Simulation du clavier : :OK: (pas réussi avec la lib evdev mais cela fonctionne avec la lib uinput)
  • Lancement automatique : :OK:

Ce qu'il reste à faire

  • Trouver pourquoi la simulation du clavier ne marche pas, ou trouver une autre solution
  • Ajouter d'autres boutons/touches/fonctionnalités ?
  • Automatiser le démarrage du script (service ?)
  • Faire un boitier qui intégre les boutons et le raspberry ?
projets/retropie_gpio_additions.1416141862.txt.gz · Dernière modification: 2014/11/16 13:44 par bumblebee