class Signal – upravljanje i očitavanje vanjskih I/O uređaja

Klasa Signal jednostavno je proširenje klase Pin. Za razliku od Pin-a, koji može biti samo u „apsolutnim” stanjima 0 i 1, Signal može biti u stanju „aktiviran” (uključen) ili „deaktiviran” (isključen), pri čemu može biti invertiran (aktivan na niskoj razini) ili ne. Drugim riječima, dodaje podršku za logičku inverziju funkcionalnosti Pin-a. Iako se ovo može činiti kao jednostavan dodatak, upravo je to ono što je potrebno za podršku širokom rasponu jednostavnih digitalnih uređaja na način prenosiv između različitih ploča, što je jedan od glavnih ciljeva MicroPythona. Bez obzira imaju li različiti korisnici LED aktivan na visokoj ili niskoj razini, normalno otvoreni ili normalno zatvoreni relej – možete razviti jedinstvenu, lijepo izgledajuću aplikaciju koja radi sa svakim od njih, a razlike u konfiguraciji hardvera obuhvatiti u nekoliko redaka u konfiguracijskoj datoteci svoje aplikacije.

Primjer:

from machine import Pin, Signal

# Suppose you have an active-high LED on pin 0
led1_pin = Pin(0, Pin.OUT)
# ... and active-low LED on pin 1
led2_pin = Pin(1, Pin.OUT)

# Now to light up both of them using Pin class, you'll need to set
# them to different values
led1_pin.value(1)
led2_pin.value(0)

# Signal class allows to abstract away active-high/active-low
# difference
led1 = Signal(led1_pin, invert=False)
led2 = Signal(led2_pin, invert=True)

# Now lighting up them looks the same
led1.value(1)
led2.value(1)

# Even better:
led1.on()
led2.on()

Slijedi vodič o tome kada treba koristiti Signal naspram Pin-a:

  • Koristite Signal: ako želite upravljati jednostavnim uključi/isključi uređajima (uključujući softverski PWM!) poput LED-ica, višesegmentnih indikatora, releja, zujalica, ili očitavati jednostavne binarne senzore, poput normalno otvorenih ili normalno zatvorenih gumba, povučenih na visoku ili nisku razinu, reed sklopki, detektora vlage/plamena itd. itd. Ukratko, ako imate stvarni fizički uređaj/senzor koji zahtijeva GPIO pristup, vjerojatno trebate koristiti Signal.

  • Koristite Pin: ako implementirate protokol ili sabirnicu više razine za komunikaciju sa složenijim uređajima.

Podjela između Pin-a i Signal-a proizlazi iz gore navedenih slučajeva upotrebe i arhitekture MicroPythona: Pin nudi najmanji dodatni trošak, što može biti važno kod bit-banging protokola. No Signal dodaje dodatnu fleksibilnost povrh Pin-a, po cijenu manjeg dodatnog troška (puno manjeg nego da ste razlike između uređaja aktivnih na visokoj i niskoj razini ručno implementirali u Pythonu!). Također, Pin je objekt niske razine koji treba implementirati za svaku podržanu ploču, dok je Signal objekt visoke razine koji dolazi besplatno čim je Pin implementiran.

Ako ste u nedoumici, isprobajte Signal! Još jednom, nudi se kako bi razvojne programere poštedio potrebe za rješavanjem nezanimljivih razlika poput signala aktivnih na niskoj naspram visoke razine te kako bi drugim korisnicima omogućio da dijele i uživaju u vašoj aplikaciji, umjesto da budu frustrirani činjenicom da im ne radi jednostavno zato što su njihove LED-ice ili releji ožičeni na malo drugačiji način.

Konstruktori

class machine.Signal(pin_obj: Pin, *, invert: bool = False)
class machine.Signal(*pin_args: Any, invert: bool = False, **pin_kwargs: Any)

Stvara Signal objekt. Postoje dva načina za njegovo konstruiranje:

  • Omotavanje postojećeg Pin objekta – univerzalno, radi na bilo kojoj ploči.

  • Izravno prosljeđivanje argumenata konstruktoru Pin-a – isti pozicijski i ključni argumenti koje prihvaća Pin prosljeđuju se interno stvorenom Pin-u. Dostupno na mnogim, ali ne na svim pločama.

Argumenti:

  • pin_obj – postojeća instanca Pin koju treba omotati.

  • pin_args / pin_kwargs – argumenti koje treba proslijediti konstruktoru Pin pri izravnom konstruiranju temeljnog pina.

  • invert – ako je True signal je invertiran (aktivan na niskoj razini).

Metode

value(x: Any = None, /) int | None

Ova metoda omogućuje postavljanje i dohvaćanje vrijednosti signala, ovisno o tome je li argument x naveden ili ne.

Ako je argument izostavljen, ova metoda dohvaća razinu signala, pri čemu 1 znači da je signal aktiviran (aktivan), a 0 da je signal neaktivan.

Ako je argument naveden, ova metoda postavlja razinu signala. Argument x može biti bilo što što se pretvara u logičku vrijednost. Ako se pretvori u True, signal je aktivan, inače je neaktivan.

Podudaranje između toga da je signal aktivan i stvarne logičke razine na temeljnom pinu ovisi o tome je li signal invertiran (aktivan na niskoj razini) ili ne. Za neinvertirani signal, aktivno stanje odgovara logičkoj 1, a neaktivno logičkoj 0. Za invertirani signal aktivan na niskoj razini, aktivno stanje odgovara logičkoj 0, dok neaktivno odgovara logičkoj 1.

on() None

Aktivira signal.

off() None

Deaktivira signal.