3.7. Wyjście GPIO

machine.LED ukrywa okablowanie wbudowanych wskaźników kamery. Sterowanie dowolnym zewnętrznym elementem sprzętu zaczyna się od machine.Pin w trybie wyjścia – surowego urządzenia peryferyjnego leżącego u podstaw każdej innej interakcji z GPIO.

3.7.1. Sterowanie pinem

Utwórz pin z Pin.OUT, aby uczynić go wyjściem, a następnie ustaw jego wartość:

from machine import Pin

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

Trzy równoważne sposoby ustawienia stanu, wszystkie na machine.Pin:

Wywołanie value() bez argumentów odczytuje bieżący stan pinu – co działa zarówno dla wejść, jak i wyjść.

3.7.2. Sterowanie zewnętrzną diodą LED

Czerwona dioda LED przy 10 mA z 3,3 V wymaga około 130 Ω w szeregu (strona o elektronice rozpisuje obliczenia). Podłącz pin P0 przez ten rezystor do anody diody LED, a katodę diody LED do masy. Migacz:

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)

Dioda LED zapala się i gaśnie raz na sekundę. Prąd płynący przez diodę LED (a więc jej jasność) jest ustalany przez rezystor; cykl włączeń/wyłączeń steruje jedynie tym, jak często dioda się zapala, a nie tym, jak jasno świeci, gdy jest włączona.

Wskazówka

Konstruktor przyjmuje wartość początkową jako argument nazwany: Pin("P0", Pin.OUT, value=0) konfiguruje pin jako wyjście, które zaczyna w stanie niskim. Bez tego pin na krótko przyjmuje swój stan domyślny, jakikolwiek by on był, zanim nastąpi pierwsze wywołanie value().

3.7.3. Tryb otwartego drenu

Domyślny tryb Pin.OUT to push-pull: pin aktywnie steruje zarówno stanem wysokim (do zasilania), jak i niskim (do masy). Czasem jest to niewłaściwe. Sięgnij po Pin.OPEN_DRAIN, gdy pin powinien albo ściągać linię do stanu niskiego, albo ją zwalniać (pozostawiać w stanie wysokiej impedancji):

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

Głównym zastosowaniem jest współdzielenie przewodu. Wiele wyjść z otwartym drenem może współdzielić jedną linię, ponieważ żadne z nich nie wymusza na niej aktywnie stanu wysokiego. Każde z nich może ściągnąć linię do stanu niskiego; jeśli wszystkie ją zwolnią, zewnętrzny rezystor podciągający ustawia linię w stan wysoki. To konwencja okablowania stojąca za współdzielonymi magistralami komunikacyjnymi.

Ostrzeżenie

Tryb otwartego drenu nie jest ogólnym rozwiązaniem do sterowania urządzeniem o wyższym napięciu. Podłączenie pinu z otwartym drenem do rezystora podciągającego przy 5 V jest bezpieczne na pinie tolerującym 5 V, ale uszkadza pin nietolerujący 5 V poprzez wbudowane diody zabezpieczające, gdy tylko pin zostanie zwolniony, a linia podniesie się do 5 V. Sygnalizacja między różnymi napięciami wymaga prawdziwego konwertera poziomów; obwód opisano w Konwersja poziomów napięć.