Broches E/S en entrée

Ce que l'on va faire ici

Ici, nous allons voir comment utiliser les broches GPIO en entrée avec MicroPython

Liens utiles :

Les broches GPIO de la Pyboard

La Pyboard dispose de 30 broches GPIO utilisables en entrée ou en sortie.

Ces broches sont dénommées :

  • X1 à X22
  • Y1 à Y8

Infos techniques utiles

  • Les broches GPIO sont au niveau 3.3V.

Instructions Micropython utiles

Désignation

Pin(id,[mode], [pull=Pin.PULL_NONE])

La broche GPIO est instanciée sous forme d'un objet Pin.

La broche, au moment de sa déclaration peut être dénomée au choix par :

  • son nom cpu : pyb.cpu.Name
  • son nom board : pyb.Pin.board.X1
  • par une chaîne texte : 'X1'

Il est également possible de créer une dénomination personnalisée des broches. Voir la doc.

Configuration

Fonction .init(mode, [pull=Pin.PULL_NONE]) de l'objet Pin

La configuration du mode est définie par les variables suivantes :

  • Pin.IN : configure la broche en entrée.

La configuration du type de rappel (pull) est définie par les variables suivantes :

  • Pin.PULL_NONE : pas de rappel au plus ou au moins. Valeur par défaut si non précisé.
  • Pin.PULL_UP : active le rappel au PLUS sur la broche en entrée
  • Pin.PULL_DOWN : active le rappel au MOINS sur la broche en entrée

Toutes les broches disposent en interne d'une résistance 40K pour le rappel au PLUS/MOINS sauf la broche Y5 qui a une résistance de 11K

Utilisation

  • .value() : renvoie la valeur actuelle de la broche

Cas particuliers : les switchs (ou Boutons Poussoirs) "onboard"

La carte Pyboard dispose de 2 boutons poussoirs intégrés : le switch USR est instancié dans un objet SWITCH.

L'objet Switch dispose de fonctions utiles, notamment :

  • .value() : renvoie l'état de la broche
  • .pull() : renvoie l'état du pull de la broche

Noter que l'objet Switch peut être utilisé avec une fonction de gestion d'interruption (ou callback). Ceci sera traité séparément.

Exemple : détecter l'appui sur un bouton poussoir

Le circuit à réaliser est le suivant :

Le code est le suivant :

import pyb

bp=pyb.Pin('X2', pyb.Pin.IN, pyb.Pin.PULL_UP) # initialisation de la broche en entrée avec rappel au PLUS

appui=0 # variable état appuyé
#if bp.pull()==pyb.Pin.PULL_UP: appui=0 # version "automatique"
# rappel au moins = actif sur niveau HAUT => BP doit être connecté au niveau 3.3V
# rappel au plus = actif sur niveau BAS => BP doit être connecté au 0V

while(True): # boucle sans fin 

    if bp.value()==appui: # test si appui
        print ("Appui sur BP")
        pyb.delay(500) # pause anti rebond entre 2 appuis

L'appui sur le bouton poussoir est détecté !

Exemple : l'appui sur le BP allume la LED

Le circuit à réaliser est le suivant :

Le code est le suivant :

import pyb

led=pyb.Pin('X1', pyb.Pin.OUT_PP) # broche en sortie 
bp=pyb.Pin('X2', pyb.Pin.IN, pyb.Pin.PULL_UP) # initialisation de la broche en entrée avec rappel au PLUS

appui=0 # variable état appuyé

while(True): # boucle sans fin 

    if bp.value()==appui: # test si appui
        led.value(1)
    else:
        led.value(0)

Et quand on appuie sur le BP, la LED s'allume... !