Différences entre versions de « MicroPython-Hack-LED »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
(Contenu remplacé par « {{MicroPython-Hack-Prepare-NAV}} {{MicroPython-Hack-LED-core}} {{MicroPython-Hack-LED-TRAILER}} »)
 
(15 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{MicroPython-Hack-Prepare-NAV}}
 
{{MicroPython-Hack-Prepare-NAV}}
== Ce que nous faisons ==
 
{{bloc-etroit|text=Nous allons apprendre à utiliser les LEDs déjà disponibles sur la carte PyBoard.
 
  
Ensuite, nous allons apprendre à brancher une LED externe sur la PyBoard et apprendre à controler.  }}
+
{{MicroPython-Hack-LED-core}}
 
 
== Les LEDs de la carte ==
 
Votre PyBoard est déjà équipée de 4 LEDs.
 
 
 
[[Fichier:PyBoard-LEDs.jpg|480px]]
 
 
 
== Activer les LEDs et concepts de base ==
 
{{bloc-etroit|text=L'une des choses les plus faciles à faire sur une carte PyBoard est est d'allumer les LEDs qui sont montés sur la carte. Connectez la carte, et connectez vous sur la carte en REPL comme décrit dans le tutoriel précédent. Nous allons commencer par allumer une LED dans l’interpréteur en tapant la commande suivante:}}
 
 
 
<nowiki>>>> myled = pyb.LED(1)
 
>>> myled.on()
 
>>> myled.off()</nowiki>
 
 
 
{{bloc-etroit|text=Ces commandes allume (''on'') et éteint (''off'') la LED.
 
 
 
Tout cela est très bien mais nous aimerions que ce processus soit automatisé. Ouvrez le fichier {{fname|main.py}} sur la carte PyBoard avec votre éditeur de texte favorit. Ecrivez (ou copiez/collez) les lignes suivantes dans le fichier. Si vous débutez en Python, assurez-vous de bien préserver l'indentation dans les différentes lignes, cela est vraiment très important!}}
 
 
 
<nowiki>led = pyb.LED(2)
 
while True:
 
    led.toggle()
 
    pyb.delay(1000)</nowiki>
 
 
 
Lorsque vous sauvez le fichier, la LED rouge sur la carte doit s'allumer pendant environ une seconde. Pour exécuter le script, faite une réinitialisation logicielle (''soft reset'') en pressant (CTRL-D). La carte PyBoard va redémarrer et vous devriez voir la LED rouge clignoter continuellement. Ca marche? génial, vous venez de réaliser la première étape vous permettant de réaliser votre futur armée de petits robots! Lorsque vous serez lassé de voir la LED clignoter alors pressez la combinaison CTRL-C dans votre terminal pour interrompre l'exécution.
 
 
 
Que fait donc ce code? Pour commencer, nous avons besoin de faire le point sur la terminologie. Python est un langage orienté objet, donc presque tout les éléments en Python son des classe et lorsque vous créer une instance de classe, vous obtenez un objet. La classe représente la définition, l'objet instancié (depuis un classe) un "objet" manipulable. Une méthode (aussi appelée fonction membre) est utilisé pour interagir avec l'objet, ce qui permet de le contrôler.
 
 
 
La première ligne e  code crée un objet appelé "led", instance de la classe LED. Lorsque l'objet est crée, celui-ci prend un seul paramètre dont la valeur varie entre 1 et 4, valeurs correspondants aux 4 LEDs disponibles sur la carte.
 
 
 
La classe pyb.LED dispose de 3 membres importants que nous allons utiliser:
 
* on() pour allumer la LED,
 
* off() pour éteindre la LED,
 
* toggle() pour inverser l'état de la LED.
 
L'autre fonction que nous allons utiliser est pyb.delay() qui attend un temps/délai définit exprimé en milliseconde.
 
 
 
Une fois que nous avons crée l'objet "led" (instance de la classe LED), la ligne {{fname|while True:}} crée une boucle infinie qui change l'état de la led (via l'appel de {{fname|toggle()}}) et attend une seconde (soit 1000 millisecondes).
 
 
 
Note: voyez aussi l'article "[http://www.commentcamarche.net/contents/807-classe-et-instance-d-objet classe et instance d'objet]" sur [http://www.commentcamarche.net commentcamarche.net]
 
 
 
=== Exercice 1 ===
 
Essayez de changer le temps entre deux changement d'état de la LED.... et essayez d'allumer une autre LED.
 
 
 
=== Exercice 2 ===
 
Connectez vous directement sur votre pyboard, créez un objet pyb.LED et allumer une LED en utilisant la méthode on().
 
 
 
== C'est Disco sur votre PyBoard ==
 
Jusqu'à maintenant, nous avons uniquement utilisé une seule LED mais la pyboard dispose de 4 LEDs. Commençons par créer un objet pour chaque LED comme cela, il sera possible de toutes les commander séparément. Nous faisons cela en créant une liste de LEDs à l'aide d'une "list comprehension" ([http://domeu.blogspot.be/2009/10/comprehension-list-iterateurs-et.html voyez cet exemple]).
 
 
 
<nowiki>leds = [pyb.LED(i) for i in range(1,5)]</nowiki>
 
 
 
Vous recevrez un message d'erreur si vous appelez pyb.LED() avec un nombre autre que 1,2,3,4. nous allons ensuite utiliser une boucle infinie pour allumer et éteindre les LEDs en cycles.
 
 
 
<nowiki>n = 0
 
while True:
 
  n = (n + 1) % 4
 
  leds[n].toggle()
 
  pyb.delay(50)</nowiki>
 
 
 
Dans ce code, la variable {{fname|n}} identifie la LED actuellement manipulée. A chaque itération de la boucle nous passons à la LED suivante (le signe % est l'opérateur "Modulus", retournant le reste de la division, aussi appelé ''reste de la division euclidienne''). Cet opérateur permet de garder la valeur de n entre 0 et 3.
 
 
 
Ensuite, nous accédons à la Nième LED et nous modifions son état avec la méthode {{fname|toggle}}. Si vous exécutez ce code, vous devriez voir toutes les LEDs s'allumer puis toutes les LEDs s'éteindre.
 
 
 
Un problème que vous pourriez rencontrer lorsque vous arrêtez puis redémarrer le script, c'est que les LEDs restent dans l'état du précédent fonctionnement, ruinant ainsi votre chorégraphie Disco préparée avec tellement de soin. Nous pouvons facilement corriger ce problème en éteignant les LEDs lorsque nous initialisons le script ET en utilisant ensuite un bloc try/finally. Lorsque vous pressez CTRL-C, Micro Python génère une exception VCPInterrupt. Les exceptions signifie généralement que quelque-chose s'est mal déroulé. Vous pouvez utiliser une commande {{fname|try:}} pour "''attraper''" l'exception. Dans ce cas, il s'agit de l'arrêt du script provoqué par l'utilisateur, nous n'avons pas besoin d'attraper l'erreur mais juste d'informer Micro Python de ce qui doit être fait lorsque l'on quitte le script. C'est ce que réalise le bloc {{fname|finally}} et nous l'utilisons pour faire en sorte que toutes les LEDs soient éteinte. Le code complet est:
 
 
 
<nowiki>leds = [pyb.LED(i) for i in range(1,5)]
 
for l in leds:
 
    l.off()
 
 
 
n = 0
 
try:
 
  while True:
 
      n = (n + 1) % 4
 
      leds[n].toggle()
 
      pyb.delay(50)
 
finally:
 
    for l in leds:
 
        l.off()</nowiki>
 
 
 
== La LED 4 est spéciale ==
 
La LED bleue est spéciale. En plus de pouvoir l'allumer et l'éteindre, vous pouvez controler sont intensité en utilisant la méthode {{fname|intensity()}}. Cette méthode accepte un nombre entre 0 et 255 qui détermine sa luminosité. Le script suivant fait en sorte d'allumer la LED bleue graduellement puis l’éteint pour recommencer.
 
 
 
<nowiki>led = pyb.LED(4)
 
intensity = 0
 
while True:
 
    intensity = (intensity + 1) % 255
 
    led.intensity(intensity)
 
    pyb.delay(20)</nowiki>
 
 
 
Vous pouvez appeler {{fname|intensity()}} sur les autres LEDs mais elles peuvent uniquement être éteinte ou allumée. La valeur 0 permet de les éteindre... tout autre valeur (jusqu'à 255) l'allumera.
 
 
 
== Brancher une LED ==
 
=== Introduction ===
 
Les LEDs (diode émettant de la lumière) sont utilisées dans toutes sortes de montages intelligents, raison pour laquelle nous les avons inclus dans ce kit. Nous allons commencer avec quelque-chose de très simple en allumant et éteignant la LED de façon répétée, produisant ainsi un plaisant effet de clignotement.
 
 
 
Faire clignoter une LED c'est comme créer un programme "Bonjour le monde" (l'équivalent du célèbre "[http://en.wikipedia.org/wiki/Hello_world_program Hello World]" en anglais). C'est une chouette façon de débuter votre voyage dans le monde du matériel embarqué.
 
 
 
Pour commencer, attrapez les éléments listés ci-dessous et raccordez le tout comme indiqué. Une fois le circuit monté, vous devez charger le programme sur la carte PyBoard.
 
 
 
Pour cet exemple, vous aurez besoin d'un {{pl|570|Micro Python Pyboard}}, un {{pl|53|Breadboard}}, une {{cl|18|LED}} et une {{cl|33|résistance}} (nous allons calculer sa valeur un peut plus loin) et un câble USB.
 
 
 
=== Matériel Nécessaire ===
 
{{ARDX-composant-begin}}
 
 
 
{{ARDX-composant
 
  |label=Fils
 
  |label2=
 
  |img=PYBX-fils.png
 
  |pl=34
 
}}
 
 
 
{{ARDX-composant
 
  |label=Résistance de 1 KOhms (brun-noir-rouge)
 
  |label2=x1
 
  |img=PYBX-R1K.png
 
  |pl=43
 
}}
 
 
 
{{ARDX-composant
 
  |label=LED (ou DEL)
 
  |label2=x1
 
  |img=PYBX-LED-verte.png
 
  |pl=66
 
}}
 
 
 
{{ARDX-composant-end}}
 
 
 
=== Schéma ===
 
Voici le schéma correspondant à notre branchement
 
 
 
[[Fichier:MicroPython-1LED-schema.png|250px]]
 
 
 
=== Brancher ===
 
Connectez tous les éléments ensembles comme présenté sur l'image. La LED est connectée sur la broche '''X5''' du PyBoard. La broche positive (la PLUS longue broche) est connectée sur '''X5'''' par l'intermédiaire d'une résistance de 1K Ohms (Brun Noir Rouge) . La broche négative de la LED (la MOINS longue) est connecté sur la masse (gnd/ground).
 
 
 
<small>''Notez l'astuce mnémotechnique, le (+) PLUS de la LED est la broche la PLUS longue et le (-) MOINS de la LED est la broche la MOINS longue.''</small>
 
 
 
[[Fichier:MicroPython-Hack-LED-01.jpg|480px]]
 
 
 
Vous pourriez également placer la résistance entre la masse et la broche (-) de la LED. Cela n'a pas vraiment d'importance. {{underline|Seul le sens de raccordement de la LED est important}}.
 
 
 
=== Le programme ===
 
Voici une version du programme pour commander cette LED externe.
 
 
 
<nowiki>p = pyb.Pin( 'X5', pyb.Pin.OUT_PP )
 
while True:
 
  p.high()
 
  pyb.delay(500)
 
  p.low()
 
  pyb.delay(500)</nowiki>
 
 
 
La première ligne {{fname|pyb.Pin( 'X5', pyb.Pin.OUT_PP )}} déclare la broche X5 comme sortie et mémorise la référence dans la variable ''p''.
 
 
 
''p'' représente donc la broche '''X5''' tout en configurant celle-ci comme une sortie '''OUT''' (de type ''PP: Push Pull'').
 
 
 
Ensuite, la ligne {{fname|p.high()}} active la sortie (et allume donc la LED).
 
 
 
La ligne {{fname|p.low()}} désactive la sortie, ce qui a pour conséquence d'éteindre la LED qui y est branchée.
 
 
 
== Valeur de la résistance ==
 
 
 
Mais qu'elle résistance faut il mettre en place?
 
 
 
''Voici comment nous allons la trouver:''
 
 
 
Conformément à [http://fr.wikipedia.org/wiki/Loi_d%27Ohm la loi d'Ohm] : Tension = Courant x Résistance
 
 
 
Par conséquent, pour calculer la résistance, la formule devient
 
 
 
Résistance = Tension / Courant
 
 
 
Dans notre cas, la tension de sortie du Core est de 3.3V. Ces 3.3V est distribuée entre la résistance et la LED. 3.3V = Urésistance + Uled. Comme la chute de tension dans une LED est d'environ 2.0V (Uled). la chute de tension aux bornes de la résistance est donc de 3.3V - Uled.
 
 
 
La tension sur la résistance est donc de:
 
 
 
Urésistance = 3.3V - 2.0V = 1.3V
 
 
 
Le courant nécessaire pour allumer une LED varie entre 2mA et 20mA. Plus le courant est important et plus la LED sera lumineuse.
 
 
 
Il est généralement souhaitable de limiter le courant qui passe dans la LED (à sa limite la plus basse) pour prolonger sa durée de vie.
 
 
 
Nous allons choisir de contrôler cette LED avec un courant de 5mA (soit 0.005 Ampère). Et comme le courant qui traverse la LED traverse également la résistance...
 
 
 
Revenons à notre loi d'Ohms
 
<nowiki>Résistance = Tension / Courant = Urésistance / Irésitance
 
 
 
Résistance = 1.3V / 5mA = 1.3 / 0.005 = 260 Ohms</nowiki>
 
 
 
{{underline|Note:}}<br />
 
Etant donné qu'il y a une grande variation de valeur pour les chutes de tension dans LEDs (le ''forward voltage drop'') dépendant du type, de la taille, couleur, fabriquant, etc. Vous pourriez utiliser successivement des valeurs entre 220 Ohms et 1K Ohms.
 
 
 
Dans l'image nous utilisons une {{pl|128|résistance de 1K Ohms}} (Brun Noir Rouge)
 
 
 
== Plus d'information ==
 
Nous aurons l'occasion de revenir plus en détails sur la commande des broches dans un autre tutoriel. En attendant, vous trouverez d'autres informations dans [http://test-ergun.readthedocs.org/en/latest/library/pyb.Pin.html la documentation de Micro Python]
 
 
   
 
   
 
{{MicroPython-Hack-LED-TRAILER}}
 
{{MicroPython-Hack-LED-TRAILER}}

Version actuelle datée du 20 février 2016 à 15:57


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.

Ce que nous faisons

Nous allons apprendre à utiliser les LEDs déjà disponibles sur la carte PyBoard.

Ensuite, dans une prochaine étape, nous allons apprendre à brancher une LED externe sur la PyBoard.

Montage

Votre PyBoard est déjà équipée de 4 LEDs, c'est elles que nous allons utilser.

 

Le code

.: Activer les LEDs et concepts de base :.


L'une des choses les plus faciles à faire sur une carte PyBoard est est d'allumer les LEDs qui sont montés sur la carte. Connectez la carte, et connectez vous sur la carte en REPL comme décrit dans le tutoriel précédent. Nous allons commencer par allumer une LED dans l’interpréteur REPL en tapant la commande suivante:

>>> myled = pyb.LED(1)
>>> myled.on()
>>> myled.off()

Ces commandes allume (on) et éteint (off) la LED.

Tout cela est très bien mais nous aimerions que ce processus soit automatisé. Ouvrez le fichier main.py sur la carte PyBoard avec votre éditeur de texte favorit. Ecrivez (ou copiez/collez) les lignes suivantes dans le fichier. Si vous débutez en Python, assurez-vous de bien préserver l'indentation dans les différentes lignes, cela est vraiment très important!

led = pyb.LED(2)
while True:
    led.toggle()
    pyb.delay(1000)

Lorsque vous sauvez le fichier, la LED rouge sur la carte doit s'allumer pendant environ une seconde. Pour exécuter le script, faite une réinitialisation logicielle (soft reset) en pressant (CTRL-D). La carte PyBoard va redémarrer et vous devriez voir la LED rouge clignoter continuellement. Ca marche? génial, vous venez de réaliser la première étape vous permettant de réaliser votre futur armée de petits robots! Lorsque vous serez lassé de voir la LED clignoter alors pressez la combinaison CTRL-C dans votre terminal pour interrompre l'exécution.

Que fait donc ce code? Pour commencer, nous avons besoin de faire le point sur la terminologie. Python est un langage orienté objet, donc presque tout les éléments en Python son des classe et lorsque vous créer une instance de classe, vous obtenez un objet. La classe représente la définition, l'objet instancié (depuis un classe) un "objet" manipulable. Une méthode (aussi appelée fonction membre) est utilisé pour interagir avec l'objet, ce qui permet de le contrôler.

La première ligne e code crée un objet appelé "led", instance de la classe LED. Lorsque l'objet est crée, celui-ci prend un seul paramètre dont la valeur varie entre 1 et 4, valeurs correspondants aux 4 LEDs disponibles sur la carte.

La classe pyb.LED dispose de 3 membres importants que nous allons utiliser:

  • on() pour allumer la LED,
  • off() pour éteindre la LED,
  • toggle() pour inverser l'état de la LED.

L'autre fonction que nous allons utiliser est pyb.delay() qui attend un temps/délai définit exprimé en milliseconde.

Une fois que nous avons crée l'objet "led" (instance de la classe LED), la ligne while True: crée une boucle infinie qui change l'état de la led (via l'appel de toggle()) et attend une seconde (soit 1000 millisecondes).

Note: voyez aussi l'article "classe et instance d'objet" sur commentcamarche.net

Faire encore mieux

Changer le temps et la LED

Essayez de changer le temps entre deux changement d'état de la LED.... et essayez d'allumer une autre LED.

Utiliser REPL

Connectez vous directement sur votre pyboard en utilisant REPL pour

  1. créez un objet pyb.LED
  2. Allumer une LED en utilisant la méthode on().

REPL est un mode très utile, il est essentiel de pouvoir le maîtriser.

C'est Disco sur votre PyBoard

Jusqu'à maintenant, nous avons uniquement utilisé une seule LED mais la pyboard dispose de 4 LEDs. Commençons par créer un objet pour chaque LED comme cela, il sera possible de toutes les commander séparément. Nous faisons cela en créant une liste de LEDs à l'aide d'une "list comprehension" (voyez cet exemple).

leds = [pyb.LED(i) for i in range(1,5)]

Vous recevrez un message d'erreur si vous appelez pyb.LED() avec un nombre autre que 1,2,3,4. nous allons ensuite utiliser une boucle infinie pour allumer et éteindre les LEDs en cycles.

n = 0
while True:
  n = (n + 1) % 4
  leds[n].toggle()
  pyb.delay(50)

Dans ce code, la variable n identifie la LED actuellement manipulée. A chaque itération de la boucle nous passons à la LED suivante (le signe % est l'opérateur "Modulus", retournant le reste de la division, aussi appelé reste de la division euclidienne). Cet opérateur permet de garder la valeur de n entre 0 et 3.

Ensuite, nous accédons à la Nième LED et nous modifions son état avec la méthode toggle. Si vous exécutez ce code, vous devriez voir toutes les LEDs s'allumer puis toutes les LEDs s'éteindre.

Bloc try finally

Un problème que vous pourriez rencontrer lorsque vous arrêtez puis redémarrer le script, c'est que les LEDs restent dans l'état du précédent fonctionnement, ruinant ainsi votre chorégraphie Disco préparée avec tellement de soin. Nous pouvons facilement corriger ce problème en éteignant les LEDs lorsque nous initialisons le script ET en utilisant ensuite un bloc try... finally. Lorsque vous pressez CTRL-C, Micro Python génère une exception VCPInterrupt. Les exceptions signifie généralement que quelque-chose s'est mal déroulé. Vous pouvez utiliser une commande try: pour "attraper" l'exception. Dans ce cas, il s'agit de l'arrêt du script provoqué par l'utilisateur, nous n'avons pas besoin d'attraper l'erreur mais juste d'informer Micro Python de ce qui doit être fait lorsque l'on quitte le script. C'est ce que réalise le bloc finally et nous l'utilisons pour faire en sorte que toutes les LEDs soient éteinte. Le code complet est:

leds = [pyb.LED(i) for i in range(1,5)]
for l in leds:
    l.off()

n = 0
try:
   while True:
      n = (n + 1) % 4
      leds[n].toggle()
      pyb.delay(50)
finally:
    for l in leds:
        l.off()

La LED 4 est spéciale

La LED bleue est spéciale. En plus de pouvoir l'allumer et l'éteindre, vous pouvez controler sont intensité en utilisant la méthode intensity(). Cette méthode accepte un nombre entre 0 et 255 qui détermine sa luminosité. Le script suivant fait en sorte d'allumer la LED bleue graduellement puis l’éteint pour recommencer.

led = pyb.LED(4)
intensity = 0
while True:
    intensity = (intensity + 1) % 255
    led.intensity(intensity)
    pyb.delay(20)

Vous pouvez appeler intensity() sur les autres LEDs mais elles peuvent uniquement être éteinte ou allumée. La valeur 0 permet de les éteindre... tout autre valeur (jusqu'à 255) l'allumera.

Cela ne fonctionne pas?

Il ne se passe rien

Il faut sauver votre programme dans le fichier main.py et suivre la procédure décrite dans Premier script.

Cela ne fonctionne toujours pas

Vérifiez attentivement votre programme, une erreur de syntaxe peut empêcher votre script de fonctionner correctement.

Tout recommencer

Il est facile de s'emmêler les pinceaux les premières fois.

Si vous éprouvez vraiment des difficultés, n'hésitez pas à tout recommencer.

Plus d'information

Nous aurons l'occasion de revenir plus en détails sur la commande des broches dans un autre tutoriel. En attendant, vous trouverez d'autres informations dans la documentation de Micro Python



Source: Turning on LEDs and basic Python concepts écrit par/written by Damien P.George

Traduit par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org

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.