Hack-wipy-button

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.

Ce que nous faisons

Nous allons apprendre à lire l'état d'une entrée sur le WiPy. Pour cela, nous allons configurer une broche comme entrée (et activer la résistance pull-up). Lorsque l'utilisateur pressera la bouton, nous allumerons la LED HeartBeat de la carte pendant 3 secondes.

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 WiPy.

Pour cet exemple, vous aurez besoin d'un WiPy, un Breadboard, un bouton poussoir et une résistance et un câble micoUSB.

Résistance Pull-up

Le but d'une résistance pull-up est de maintenir le niveau de la broche d'entrée au niveau haut (3.3v) par défaut. Cela signifie que si le montage n'impose pas une tension sur la broche, celle-ci reste au niveau haut.

Avec certains microcontrôleurs, cette résistance doit être montée par vos soins, avec d'autres (comme le WiPy) cette résistance existe dans le microcontrôleur et il suffit alors de l'activer.

Voici un petit montage (provenant d'Arduino) qui explique le fonctionnement d'une résistance pull-up de 10 KOhms.

Button-PullUp-3.3v.png
Source: AdaFruit

Si le bouton n'est pas presser les deux résistances placent le potentiel de la broche sur 3.3v (comme il n'y a pas de courant... il n'y a pas vraiment de chute de tension dans les résistances). GP8 est donc à +3.3v.

Si le bouton est pressé, la broches GP8 est ramenée à la masse (0V) par l'intermédiaire de la résistance de 100 Ohms. La résistance de 10KOhms est alors également branchée à la masse, ce qui fait qu'un courant de 3.3 / 10000 = 0.33mA y passe (négligeable).

La résistance de 100 Ohms est une résistance de protection et n'est pas obligatoire. Elle est par ailleurs rarement utilisée par les habitués. Prenez la cas ou vous avez configuré la broche en sortie, placée au niveau haut (3.3v) par votre programme. Si vous pressez le bouton sans résistance de sortie et que vous pressiez le bouton? Et bien, s'il n'y avait pas la résistance de 100 Ohms, vous auriez un court-circuit franc, ce qui endommagerait votre WiPy. S'il y a une résistance de 100 Ohms, vous n'avez plus de court-circuit mais un courant de 3.3V / 100 = 33 mA (beaucoup de trop pour une sortie WiPy mais il s'es sortira peut être si vous n'insistez pas).

Le bouton tactile

Dans les montages présentés ci-dessous, le bouton tactile proposé par MC Hobby peut se monter très facilement.

Sa forme carrée peut laisser penser qu'il est facile de monter le bouton "de travers" puisqu'il est facile de le tourner d'un quart de tour, un demi tour.

Bouton tactile raccordement 1.jpg

Il n'est pourtant pas nécessaire d'avoir recourt à un multimètre pour être certain du montage, tout soucis de mauvais raccordement peut facilement être écarté en utilisant le principe suivant:

"Toujours utiliser les bornes de deux coins totalement opposés pour effectuer le raccordement" (simple et efficace)

Bouton tactile raccordement 2.jpg

Vous constaterez dans l'exemple ci-dessus que même si le bouton est tourné d'un quart de tour (à droite de l'image), la position des points de raccordements (en bleu) font que ce dernier opère toujours correctement. Il n'y a ni court-circuit, ni dysfonctionnement :-) .

Matériel nécessaire

PYBX-BTN.png

Bouton poussoir
x1

 

Schéma

Voici le schéma correspondant à nos raccordement.

WiPy-Button-schema.png

Brancher

Connectez tous les éléments ensembles comme présenté sur l'image.

WiPy-Hack-Button-01.jpg
Made with - réalisé avec - Fritzing fritzing.org

Programme simple

Lire l'état du bouton

Pour lire l'état du bouton, vous devez déclarer la broche en entrée et activer la résistance pull-up (voyez l'explication en début d'article)

from machine import Pin
gp8 = Pin( 'GP8', mode=Pin.IN, pull=Pin.PULL_UP )

Pour lire la valeur de la broche, vous pouvez utiliser les deux possibilités suivantes:

gp8()
gp8.value()

Dans les deux cas, la fonction retourne:

  • 0 si la broche est au niveau bas
  • 1 si la broche est au niveau haut

Attention: logique inversée

La broche GP8 sera:

  • au niveau haut (3.3v) lorsque personne ne presse sur le bouton
  • au niveau bas (0v) lorsque quelqu'un presse le bouton

L'appel gp8.value() retourne donc un valeur en logique inversée:

  • 1: signifie que le bouton N'EST PAS pressé
  • 0: signifie que le bouton EST pressé

Exemple

# Cet exemple controle la LED heartbeat et la fait clignoter jusqu'à ce que l'on presse 
#    sur le bouton raccordé sur GP8.
# Le but est d'apprendre a utiliser une entrée du WiPy avec un bouton
# 
#
# Ou acheter un WiPy et une carte d'extension
#   http://shop.mchobby.be/product.php?id_product=736 
#   http://shop.mchobby.be/product.php?id_product=737
#   http://shop.mchobby.be/category.php?id_category=68
#
# Voyez le tutoriel 
#   http://wiki.mchobby.be/index.php?title=Hack-wipy-button
#
# Auteur: Meurisse D. pour shop.mchoby.be
# Licence: CC-BY-SA
#
from machine import Pin
import time
import wipy

# Desactiver HeartBeat + reconfigurer
wipy.heartbeat( False )
led = Pin( 'GP25', mode=Pin.OUT )
led.value( 0 )

# Declare la broche en entrée
gp8 = Pin( 'GP8', mode=Pin.IN, pull=Pin.PULL_UP )

# tant que le bouton n'est pas pressé
while gp8.value() == 1:
    led.toggle()         # changer etat led
    time.sleep_ms( 200 ) # attendre 0.2 sec

# Eteindre la LED
led.value( 0 )

# Réactiver heartbeat
del( led )
wipy.heartbeat( True )

Interruption et callback

Ce qui serait idéal, c'est d'appeler automatiquement une fonction lorsque le bouton est pressé. Une telle fonction est appelée fonction callback.

Nous allons utiliser le principe d'interruption qui permet d'interrompre le programme principal lorsqu'une broche change d'état.

Le processus d'interruption appel alors une fonction (dite fonction de rappel ou fonction callback) qui effectue la tâche attendue puis rend la main au système.

Mode d'interruption

il y a plusieurs modes d'interruption (comme décrits dans cet article Arduino), les plus utilisés sont:

Les flans montant (dit "rising")

L'interruption est déclenchée (voir la flèche bleue) lorsque le signal passe du niveau bas au niveau haut.

Hack-wipy-button-irq-rising.jpg

Les flans descendant (dit "falling")

L'interruption est déclenchée (voir la flèche bleue) lorsque le signal passe du niveau bas au niveau haut.

Hack-wipy-button-irq-falling.jpg

Limitation des interruptions

  1. Vous ne pouvez pas utiliser la fonction print() dans la fonction de callback. Il ne se passera rien.
  2. Vous ne pouvez pas faire d'allocation de mémoire dans la fonction d'interruption (cela pourrait changer dans le futur).
    Toutes les variables et objets doivent exister avant le premier appel de la fonction callback.
  3. ... d'autres contraintes peuvent exister, référez vous à la documentation de MicroPython


Modèle:HACK-WIPY-TRAILER