PiBrella-Débuter

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Débuter avec le PiBrella

Pour faire nos première découvertes PiBrella, nous allons utiliser l'interpréteur Python en mode interactif pour faire nos premiers essais.

Pour démarrer Python en mode interactif, nous allons utiliser la ligne de commande sudo python -i depuis une ligne de commande

sudo python -i

Le sudo est utilisé pour permettre Python de manipuler librement le GPIO du Raspberry-Pi, le -i démarre le mode interactif.

En mode interactif, l'interpréteur exécute les commandes immédiatement après la saisie d'un retour clavier (passage à la ligne). C'est bien pratique pour tester rapidement des rapidement fonctionnalités.

Lorsque vous voulez quittez le mode interactif, vous appelez la fonction quit() en tapant la ligne suivante:

quit()  

Un tout premier bout de code

Nous allons démarrer Python en mode interactif en tapant la commande suivante dans LXTerminal (ou ligne de commande)

sudo python -i

Tapez ensuite le code suivant:

import pibrella
pibrella.buzzer.fail()     # résultat très moyen
pibrella.buzzer.pulse(0.5) # Encore assez sympa
pibrella.buzzer.stop()     # Arrête le buzzer

pibrella.light.pulse(0.2)  # Fait pulser les LEDs
pibrella.light.stop()      # Arrête de pulser

Après vos tests, tapez la commande quit() pour quitter le mode interactif

quit()

Ecrire un code plus évolué

Saisir le programme

Démarrez Python en session interactive à l'aide de la commande suivante sur LXTerminal ou une ligne de commande:

sudo python -i

Typez le code suivant (ou copiez/collez le directement depuis le site de pibrella.com).

# Alarme Cambriolage! (attrapé les curieux et les fuineurs)
import pibrella, signal

def alarm(pin): 
   pibrella.buzzer.pulse(0.2)    # Faire de bruit
   pibrella.light.pulse()        # Faire clignoter/pulser les LEDs

def reset(pin):
   pibrella.light.stop()         # Re-initialiser l'alarme (la désactiver)
   pibrella.buzzer.stop()     

pibrella.input.a.changed(alarm)  # Surveiller l'entrée et détecter l'intrus
pibrella.button.pressed(reset)   # désactiver l'alarme en pressant le bouton... au cas ou ce serait un stupide chat!

signal.pause()                   # Attendre l'intrus!

Pressez enter pour terminer la ligne...

Pour tester

Connectez la broche 2 de l'entrée A avec un fil où une résistance de 100 Ohms (pour éviter les accidents)

 

Pressez le gros bouton rouge pour réinitialiser l'alarme

Quelques explications

Déclenchement de l'alarme

La ligne

pibrella.input.a.changed(...)

Cette ligne surveille le changement d'état de l'entrée A. Et lorsque l'entrée A change d'état...

pibrella.input.a.changed(alarm)

... il faut appeler la fonction alarm.

Le paramètre de changed() est la fonction à appeler, soit alarm.


Notez que changed() est activé à chaque changement d'état... donc deux fois!!! Une fois lorsque la broche du GPIO est activée... et une autre fois lorsque la broche est désactivée.

Réinitialisation/désactivation de l'alarme

De même, la ligne

pibrella.button.pressed(...)

surveille le bouton de la carte et attend qu'il soit pressé.

Lorsque le bouton est pressé, la ligne de code...

pibrella.button.pressed(reset)

... indique qu'il faut appeler la fonction reset lorsque le bouton est pressé.


Le programme se termine avec la ligne

signal.pause()

Cette ligne met le programme en pause en attendant l'arrivée d'un signal (un évènement), signal qui sera traité par la bibliothèque PiBrella. Voyez notre petit note à propos des systèmes événementiels.

Utiliser "Pressed"

Comme précisé plus haut, utiliser la notation pibrella.input.a.changed(...) déclenche deux événements.

Si vous ne voulez avoir qu'un seul événement (par exemple lors de la pression d'un bouton), remplacez l'appel de

 pibrella.input.a.changed(alarm)

par

 pibrella.input.a.pressed(alarm)

Utiliser le système évènementielle (les signaux)

Bien que cela soit totalement invisible, la bibliothèque Pibrella utilise des signaux. Ces signaux permettent de mettre en oeuvre des systèmes à base d'événement (comme la pression d'un bouton ou le clique d'une souris). L'autre avantage des systèmes événementiels est de consommer peu de ressources... le programme ne doit pas passer son temps à vérifier l'état des broches du GPIO (et ainsi gaspiller les ressources du processeur), il peut simplement attendre d'être averti qu'une broche ait changé d'état.

Vous pouvez très bien concevoir le fonctionnement d'un signal par vous même puisque dans la vie réelle nous y sommes déjà "programmé"! Imaginez me le cas suivant:

  • Un conducteur d'un véhicule désire avertir le piéton qu'il y a un danger.
  • Le conducteur déclenche alors l'avertisseur sonore (le klaxon)
  • Un signal sonore est alors émit

Tout le monde sais ce que ce signal signifie...

  • Tous les piétons et usagés de la route ont été éduqués à réagir à ce signal.
  • Dès qu'il est perçu, les tâches instinctives suivantes sont réalisées:
    • Rechercher l'origine du signal
    • Analyser le situation
    • Se protéger si nécessaire (en se mettant à l’abri)

Nous venons de décrire un système évènementiel basé sur un signal.


Cela fonctionne sur le même principe pour les systèmes informatiques.

Post-Scriptum
Les puristes comprendrons que ce paragraphe est une vulgarisation abordable du SIGNAL pour permettre de fixer les idées. Les signaux vont bien au delà de ce que nous venons de décrire et offrent des fonctionnalités/possibilités bien plus vaste. Ainsi, je vais également préciser que les signaux permettent à des processus/programmes différents de communiquer ensemble... peu comme l'OS peu détecter le branchement d'un périphérique USB et envoyer un signal avertissant toutes les applications (comme ne l'explorateur de fichier par exemple).

Tester directement une entrée

Dans cet exemple, nous allons simplement tester directement l'état d'une entrée sans passer par le système d'événement (signal).

Nous allons démarrer Python en mode interactif en tapant la commande suivante dans LXTerminal (ou ligne de commande)

sudo python -i

Tapez ensuite le code suivant:

import pibrella
pibrella.input.a.is_high()

L'interpréteur de commande python évalue l'état de la broche et doit retourner sa valeur (soit False puisque la broche est à l'état bas).

maintenant, pontez l'entrée A à l'aide d'un fil ou d'une résistance de 100 Ohms comme sur le schéma ci-dessous.

 

Puis re-saisissez encore la commande:

pibrella.input.a.is_high()

Cette fois-ci, le résultat est True, preuve que l'entrée est bien activée.


Après vos tests, tapez la commande quit() pour quitter le mode interactif

quit()

Source: PiBrella.com, PiBrella est un produit de Cyntech Component Ltd.
Traduit avec autorisation de Cyntech. Traduction significativement augmenté par Meurisse D. pour MCHobby.be
Contient des informations relatives à ScratchCPIO en provenance de Cymplecy. Traduit par Meurisse D. avec l'autorisation de Cymplecy

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.