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:
pin.value(1)/pin.value(0)– postać jawna.
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ęć.