Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
|
projets:retropie_gpio_additions [2014/11/06 20:14] bumblebee créée |
projets:retropie_gpio_additions [2015/04/11 12:45] (Version actuelle) bully |
||
|---|---|---|---|
| Ligne 7: | Ligne 7: | ||
| logiciels: | logiciels: | ||
| sources: | sources: | ||
| - | liens:[[https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux#adzerk9805928|Simulating key press event using python for linux (en)]], [[http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/|Tutorial: Raspberry Pi GPIO Pins and Python (en)]], [[http://blog.petrockblock.com/retropie/| Retropie (en)]], [[projets:boitierraspberrybplus|]] | + | liens:[[http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/|Tutorial: Raspberry Pi GPIO Pins and Python (en)]], [[http://blog.petrockblock.com/retropie/| Retropie (en)]], [[projets:boitierraspberrybplus|]] |
| - | langages:javascript svg | + | langages:python |
| tags: raspberry_pi gpio python retropie | tags: raspberry_pi gpio python retropie | ||
| usager:bumblebee | usager:bumblebee | ||
| Ligne 18: | Ligne 18: | ||
| ===== Schéma de branchement ===== | ===== Schéma de branchement ===== | ||
| {{ :projets:retropie_gpio_additions:esc_tab_poweroff.svg |}} | {{ :projets:retropie_gpio_additions:esc_tab_poweroff.svg |}} | ||
| - | ===== Script python ===== | + | ===== Script ===== |
| + | ==== Dépendances ==== | ||
| Ce script utilise 3 libraires : | Ce script utilise 3 libraires : | ||
| - | * La libraire ''[[https://pypi.python.org/pypi/RPi.GPIO|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. | + | * La libraire ''[[https://pypi.python.org/pypi/RPi.GPIO|RPi.GPIO]]'' qui est normalement intégrée nativement dans les version récente de raspbian |
| - | * La libraire ''[[http://python-evdev.readthedocs.org/en/latest/|evdev]]'' qui permet de gérer ou simuler des input type clavier et souris sous linux | + | * <del>La libraire ''[[http://python-evdev.readthedocs.org/en/latest/|evdev]]'' qui permet de gérer ou simuler des input type clavier et souris sous linux</del> |
| + | * La libraire [[http://tjjr.fi/sw/python-uinput/|python-uinput]] permettant de simuler un device (ici clavier) virtuel | ||
| * la libraire ''[[https://github.com/amoffat/sh|sh]]'' qui permet de facilement lancer des commande shell dans python | * la libraire ''[[https://github.com/amoffat/sh|sh]]'' qui permet de facilement lancer des commande shell dans python | ||
| + | Pour installer les lib : | ||
| + | <code bash> | ||
| + | sudo apt-get install python-pip python-dev libudev-dev | ||
| + | sudo pip install python-uinput | ||
| + | sudo pip install sh | ||
| + | </code> | ||
| - | <note warning>Je n'ai pas encore plus tester mon script donc il ne fonctionne peut être pas</note> | + | |
| - | <code python retropie_additions.py> | + | ==== La script python ==== |
| + | <code bash> | ||
| #!/usr/bin/env python | #!/usr/bin/env python | ||
| # encoding: utf-8 | # encoding: utf-8 | ||
| - | + | ||
| - | from evdev import uinput, ecodes as e | + | |
| import RPi.GPIO as GPIO | import RPi.GPIO as GPIO | ||
| - | from sh import shutdwon | + | 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 | # 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) | # Si la broche 24 est mise a la masse le script va éteindre le rasbarry proprement (mais pas électriquement) | ||
| Ligne 45: | Ligne 54: | ||
| # Tuto utilisation boutons et GPIO : | # Tuto utilisation boutons et GPIO : | ||
| # http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/ | # http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/ | ||
| + | |||
| #Initalise GPIO INPUTs with pull_ups | #Initalise GPIO INPUTs with pull_ups | ||
| GPIO.setmode(GPIO.BCM) | GPIO.setmode(GPIO.BCM) | ||
| Ligne 52: | Ligne 61: | ||
| GPIO.setup(25, 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(): | + | import uinput |
| - | keypress(e.KEY_ESC) | + | import time |
| - | + | ||
| - | def tab(): | + | |
| - | keypress(e.KEY_TAB) | + | |
| + | #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 | #Add lisneners on GPIOs pins 23 & 25 | ||
| GPIO.add_event_detect(23, GPIO.FALLING, callback=echap, bouncetime=300) | GPIO.add_event_detect(23, GPIO.FALLING, callback=echap, bouncetime=300) | ||
| GPIO.add_event_detect(25, GPIO.FALLING, callback=tab, 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 | #Wait for a falling edge on GPIO 24 to shut down the system | ||
| GPIO.wait_for_edge(24, GPIO.FALLING) | GPIO.wait_for_edge(24, GPIO.FALLING) | ||
| - | GPIO.cleanup( | + | GPIO.cleanup() |
| shutdown('-h','now') | shutdown('-h','now') | ||
| - | |||
| </code> | </code> | ||
| + | pour le lancer : | ||
| + | <code> | ||
| + | sudo python retropie_additions.py | ||
| + | </code> | ||
| Mes deux sources d'info pour ce script : | Mes deux sources d'info pour ce script : | ||
| - | * Simulation de clavier en python : https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux#adzerk9805928 | + | * <del>Simulation de clavier en python : https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux#adzerk9805928</del> |
| + | * Simulation de clavier en python : http://www.raspberrypi.org/forums/viewtopic.php?f=32&t=23548&p=219560&hilit=uinput#p219560 | ||
| * Utilisation des GPIO du raspberry en python : http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/ | * Utilisation des GPIO du raspberry en python : http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/ | ||
| + | |||
| + | ==== 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'' : | ||
| + | <code bash> | ||
| + | /usr/bin/python /home/pi/retropie_additions.py & | ||
| + | </code> | ||
| + | |||
| + | ==== Aide pour la réalisation ==== | ||
| + | |||
| + | |||
| + | Pour les personnes qui ne savent pas trop comment bidouiller dans ce domaine, voila la marche à suivre pas à pas: | ||
| + | |||
| + | |||
| + | * Lancez votre retropie, une fois prête, appuyez sur F4 et installez les librairies en faisant comme indiqué plus haut (sudo apt-get install .......) | ||
| + | * Créez un fichier texte nommé " retropie_additions " sur un ordinateur autre | ||
| + | * Copiez le script plus haut dans ce fichier. Remplacez le *.txt/odt/... par le .py | ||
| + | * Éteignez votre retropie | ||
| + | * Placez le fichier fraichement créé dans le répertoire /home/pi de votre retropie (à partir d'un linux faites un drag'n drop... pour les autres OS, aucune idée) | ||
| + | * Pour l'automatisation, lancez votre retropie (pas trop loin) | ||
| + | * Une fois en marche, appuyez encore une fois sur F4 | ||
| + | * Tapez la commande plus haut dans la rubrique automatisation (sudo nano ...) pour lire le contenu du fichier | ||
| + | * Faite la commande pour éditer le texte (Ctrl + X de mémoire) | ||
| + | * Tapez la ligne indiquée à la fin du texte | ||
| + | * enregistrez vos modification | ||
| + | * Redémarrez et ça marche | ||
| + | |||
| + | |||
| + | ===== 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 ===== | ===== Ce qu'il reste à faire ===== | ||
| - | * Tester le script | + | * <del>Trouver pourquoi la simulation du clavier ne marche pas, ou trouver une autre solution</del> |
| * Ajouter d'autres boutons/touches/fonctionnalités ? | * Ajouter d'autres boutons/touches/fonctionnalités ? | ||
| - | * Automatiser le démarrage du script (service ?) | + | * <del>Automatiser le démarrage du script (service ?)</del> |
| + | * Faire un boitier qui intégre les boutons et le raspberry ? | ||
| * ... | * ... | ||