3.7. Sortie GPIO

machine.LED masque le câblage des indicateurs intégrés de la caméra. Le pilotage de tout matériel externe commence par machine.Pin en mode sortie – le périphérique brut sous-jacent à toute autre interaction GPIO.

3.7.1. Piloter une broche

Construisez une broche avec Pin.OUT pour en faire une sortie, puis définissez sa valeur :

from machine import Pin

led = Pin("P0", Pin.OUT)
led.on()           # drive high (about 3.3 V)
led.off()          # drive low (about 0 V)

Trois façons équivalentes de définir l’état, toutes sur machine.Pin :

Appeler value() sans argument relit l’état actuel de la broche – ce qui fonctionne aussi bien pour les entrées que pour les sorties.

3.7.2. Piloter une LED externe

Une LED rouge à 10 mA depuis 3,3 V nécessite environ 130 Ω en série (la page d’électronique détaille le calcul). Câblez la broche P0 à travers cette résistance jusqu’à l’anode de la LED, et la cathode de la LED à la masse. Un clignotant :

import time
from machine import Pin

led = Pin("P0", Pin.OUT)

while True:
    led.on()
    time.sleep_ms(500)
    led.off()
    time.sleep_ms(500)

La LED s’allume et s’éteint une fois par seconde. Le courant à travers la LED (et donc sa luminosité) est fixé par la résistance ; le rapport cyclique marche / arrêt ne contrôle que la fréquence à laquelle elle s’allume, pas la luminosité qu’elle présente lorsqu’elle est allumée.

Astuce

Le constructeur accepte une valeur initiale comme argument nommé : Pin("P0", Pin.OUT, value=0) configure la broche comme une sortie qui démarre à l’état bas. Sans cela, la broche prend brièvement l’état par défaut qui était le sien avant le premier appel à value().

3.7.3. Mode drain ouvert

Le mode par défaut Pin.OUT est push-pull : la broche pilote activement à la fois l’état haut (vers l’alimentation) et l’état bas (vers la masse). Parfois, ce n’est pas approprié. Optez pour Pin.OPEN_DRAIN lorsque la broche doit soit tirer la ligne vers le bas, soit la relâcher (la laisser flotter) :

pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off()       # actively drive low
pin.on()        # release; an external pull-up brings the line high

L’usage principal est le partage d’un fil. Plusieurs sorties à drain ouvert peuvent partager une seule ligne, car aucune d’elles ne la pilote activement à l’état haut. N’importe laquelle peut tirer la ligne vers le bas ; si toutes la relâchent, une résistance de rappel externe ramène la ligne à l’état haut. C’est la convention de câblage qui sous-tend les bus de communication partagés.

Avertissement

Le drain ouvert n’est pas une solution générale pour piloter un périphérique à tension plus élevée. Connecter une broche à drain ouvert à une résistance de rappel à 5 V est sans danger sur une broche tolérante au 5 V, mais endommage une broche non tolérante par l’intermédiaire de ses diodes de protection intégrées dès que la broche se relâche et que la ligne remonte à 5 V. La signalisation entre tensions différentes nécessite un véritable adaptateur de niveau ; voir Adaptation de niveau pour le circuit.