Saturday, January 19, 2013

RPi.GPIO, l'imposteur

Un module python pour ateliers raspberrypi

L'atelier PyHack qui est présenté par PYPTUG porte sur comment faire interagir le monde virtuel de la programmation avec le monde physique, avec Python, et souvent avec l'ordinateur Raspberry Pi. Mais pas tout le monde a un Raspberry Pi.

Les ateliers, et aussi les tutoriels de ce blog, sont faits pour apprendre l’électronique et le langage de programmation Python. Les techniques Python enseignées ici, peuvent être appliquées a une grande variété de problèmes.

Et donc, ca serait drolement bien si on pouvait rouler le meme code qui est fait pour le raspberry pi, sur un portable? J'ai donc décidé de m'attaquer au probleme.

L'imposteur

J'ai donc ecris un module RPi.GPIO de remplacement pour essayer le code pour Raspberry Pi qui inclus des access aux GPIO sur des plateformes autres que le Raspberry Pi. C'est-a-dire, votre portable.


Votre portable aura une personnalité multiple

Comment?

C'est un module Python (en fait, un package RPi qui inclus un module GPIO) avec une implémentation des fonctions setmode(), setup(), cleanup(), input(), output(), prends en charge les 54 GPIO (états et directions), modes broadcom et board, fonctions vides pour les 4 set_*_event() - peut etre dans le futur j'y ajouterai la logique, et un peu de vitriol. Non, pas ca! Et un peu de logique pour les erreurs (genre, essayer d'acceder a un GPIO avant de l'assigner). Il y a meme un mode de débogage (gpio.debug = True).

Tout cela devrait etre suffisant pour rouler sur un portable du code Python fait pour le Raspberry Pi. Seul hic, pas moyen dans l’immédiat de simuler le changement d’état d'une entrée (simuler un bouton, par exemple).

On se le procure

Chez Mr. Bitbucket (bitbucket.org/fdion)

Pour cela il faut d'abord avoir l'outil Mercurial:

Sous un Linux de type debian
$ sudo apt-get install mercurial

Sous fedora
$ sudo yum install mercurial

Sous solaris / openindiana, c'est disponible par packagemanager.

Pour windows ou mac c'est ici: http://mercurial.selenic.com/

A noter que sous windows on peut aussi se procurer TortoiseHg qui ajoute un menu Mercurial (hg) quand on clique le bouton droit sur un repertoire, dans file manager: tortoisehg.bitbucket.org

Une fois que l'on a installé mercurial:

$ hg clone https://bitbucket.org/fdion/fablocker

On se retrouve avec les ateliers PyHack. RPi.GPIO l'imposteur fait partie du deuxième atelier.

C'est sous le répertoire fablocker/PyHack/workshop02

Il y a un fichier test.py qui importe RPi.GPIO. Comme il y a un répertoire du nom de RPi et a l’intérieur, un fichier python GPIO.py, test.py va importer ce GPIO plutôt que le module système. Pour en faire l'essai, on fait:

python test.py

(RPi.GPIO l'imposteur n'a pas besoin de sudo, ce qui n'est pas le cas du module système). Sur un vrai Raspberry Pi, dans tout autre répertoire l'imposteur ne sera pas trouvé. Mais dans workshop02, si on veux rouler test.py sur les GPIO du Pi, il suffit de renommer le répertoire RPi, et ainsi Python ne le trouvera pas.

Mise a jour


Si vous avez déjà un clone du projet Fablocker, pour faire la mise a jour, il suffit de faire (sous Windows utiliser le hg workshop ou bien la ligne de commande):


pi@raspberrypi ~/bitbucket $cd fablocker
pi@raspberrypi ~/bitbucket/fablocker $ hg pull http://bitbucket.org/fdion/fablocker
real URL is https://bitbucket.org/fdion/fablocker
pulling from http://bitbucket.org/fdion/fablocker
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 5 changes to 5 files
(run 'hg update' to get a working copy)
pi@raspberrypi ~/bitbucket/fablocker $ hg update
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
pi@raspberrypi ~/bitbucket/fablocker $ 

No comments: