INTRODUCTION |
|
INSTALLATION |
La meilleure façon de débuter consiste à télécharger le système d’exploitation NOOS disponible sur http://www.raspberrypi.org/downloads et à le copier sur une carte SD de 8 Go au minimum et de classe 10 de préférence. Lors du démarrage, choisir le système raspbian (une variante de Linux Ubuntu optimisée pour le Raspberry Pi). Puisque cette distribution contient déjà une JRE, il suffit de copier le fichier tigerjython2.jar dans le dossier de votre choix, par exemple /home/pi/tigerjyton et d’attribuer à ce fichier les droits d’exécution avec la commande chmod ou dans le gestionnaire de fichiers sous File Properties. Pour démarrer TigerJython, saisir les commandes suivantes dans un terminal (console bash): java -jar /home/pi/tigerjython/tigerjython2.jar
Une fois ces manipulations effectuées, il est possible de démarrer Tiger Jython en cliquant sur l’icône. Il faudra se munir de patience (environ 1 minute) avant l’ouverture de Tiger Jython car le Raspberry Pi n’est pas une bête de course … Même si le chargement initial est lent, l’exécution des programmes Python est ensuite étonnamment rapide. Remarque : pour accélérer le chargement de TigerJython, prévoir une carte SD rapide (classe 10) et préférer un Raspberry Pi 2 nettement plus rapide que la première génération. |
ENTRÉES / SORITES DIGITALES SUR LE GPIO |
Le Raspberry Pi met à disposition 17 ports d’entrées / sorties digitales pouvant être branchés sur un connecteur 26 pins (40 pins pour la nouvelle version). Chaque canal peut être défini comme une entrée ou une sortie avec une résistance interne pull-up, pull-down ou sans résistance interne. Il y a des pins 5 V, 3.3 V et masse (GND) sur les connecteurs. La tension d’entrée ne doit jamais excéder 3.3V, ce qui interdit le branchement de circuits externes dont les sorties sont en 5V directement sur les entrées GPIO. Dans TigerJython, on trouve la classe GPIO dans le module PRi_GPIO permettant de contrôler facilement les ports GPIO. Le module utilise la bibliothèque Pi4J de Robert Savage mais a l’avantage d’adopter une interface similaire au module RPi.GPIO disponible en standard pour l’implémentation CPython. Tous les fichiers nécessaires sont inclus dans la distribution de TigerJython. Par défaut, les pins du port GPIO sont utilisés avec les nombres 1 à 26. Chaque pin peut être configuré avec GPIO.setup() en tant que canal d’entrée ou de sortie. On peut assigner une valeur à un canal donné avec GPIO.output(channel, state). De manière similaire, on peut lire la valeur présente en entrée avec GPIO.input(channel). Une documentation détaillée est disponible dans le menu d’aide sous Aide > Documentation > APLU.
Pour utiliser un port d’entrée, on peut connecter un boutton-poussoir au port 26. Cela nécessite typiquement quelques drapeaux permettant d’enclencher et déclencher le clignotement. from RPi_GPIO import GPIO # pin numbers switch = 26 led = 12 print "Press button turn blinking on/off" GPIO.setup(led, GPIO.OUT) GPIO.setup(switch, GPIO.IN, GPIO.PUD_UP) buttonPressed = False blinking = False ledOn = False while True: v = GPIO.input(switch) if not buttonPressed and v == GPIO.LOW: buttonPressed = True blinking = not blinking if buttonPressed and v == GPIO.HIGH: buttonPressed = False if blinking: if ledOn: ledOn = False GPIO.output(led, GPIO.LOW) else: ledOn = True GPIO.output(led, GPIO.HIGH) else: ledOn = False GPIO.output(led, GPIO.LOW) GPIO.delay(100) |
MEMENTO |
Dans la boucle, on commence par lire l’état actuel du boutton-poussoir. On nomme « polling » la technique consistant à lire de façon répétée la valeur d’un port. Lorsque ce dernier est enfoncé, il connecte la masse (port 6) au port 26, ce qui a pour conséquence de mettre le port 26 en tension basse (0V). L’instruction input(26) retourne donc la valeur GPIO LOW qui vaut 0. Lorsque le boutton-poussoir est relâché, la résistance interne pull-up du port 26 force la tension sur HIGH (3.3V) sans qu’il soit nécessaire d’appliquer cette tension depuis l’extérieur. Puisque la boucle est également responsable du clignotement, on utilise un drapeau blinking qui représente le statut allumé/éteint du clignotement. Le drapeau lenOn permet de se rappeler dans chaque itération si la LED doit être allumée ou éteinte. |
UTILISER LES ÉVÉNEMENTS |
Au lieu d’utiliser de nombreux drapeaux dans la boucle, il vaut mieux utiliser la programmation événementielle. Dans ce modèle de programmation, le fait d’enfoncer et de relâcher le boutton-poussoir correspond à un événement qui va automatiquement appeler la fonction onButtonPressed() appelée fonction de rappel. Il suffit alors de maintenir le drapeau blinking. from RPi_GPIO import GPIO def onButtonPressed(channel, state): global blinking blinking = not blinking # pin numbers switch = 26 led = 12 print "Press button to turn blinking on/off" GPIO.setup(led, GPIO.OUT) GPIO.setup(switch, GPIO.IN, GPIO.PUD_UP) # pull-up resistor GPIO.add_event_detect(switch, GPIO.FALLING) # event on falling edge GPIO.add_event_callback(switch, onButtonPressed) # register callback blinking = False while True: if blinking: GPIO.output(led, 1) GPIO.delay(100) GPIO.output(led, 0) GPIO.delay(100) |
MEMENTO |
Pour utiliser les événements, il suffit de spécifier à l’aide de la méthode add_event_detect() si l’on désire déclencher l’événement sur un front montant (transition de la tension basse à la tension haute), un front descendant (transition de la tension haute vers la tension basse) ou les deux. Suite à cela, on spécifie à l’aide de add_event_callback() une fonction de rappel qui va être appelée à chaque fois que l’événement de pression survient.
|