kelas Pin -- kontrol pin I/O

Objek pin digunakan untuk mengontrol pin I/O (juga dikenal sebagai GPIO - general-purpose input/output). Objek pin umumnya diasosiasikan dengan pin fisik yang dapat menghasilkan tegangan keluaran dan membaca tegangan masukan. Kelas pin memiliki metode untuk mengatur mode pin (IN, OUT, dll) dan metode untuk mendapatkan serta mengatur level logika digital. Untuk kontrol analog pada pin, lihat kelas ADC.

Objek pin dibangun menggunakan sebuah identifier yang secara jelas merujuk ke pin I/O tertentu. Bentuk identifier yang diperbolehkan dan pin fisik yang dipetakan oleh identifier tersebut bersifat port-specific. Kemungkinan identifier berupa integer, string, atau tuple yang berisi nomor port dan pin.

Model Penggunaan:

from machine import Pin

# create an output pin on header pin P0
p0 = Pin("P0", Pin.OUT)

# set the value low then high
p0.value(0)
p0.value(1)

# create an input pin on header pin P2, with a pull-up resistor
p2 = Pin("P2", Pin.IN, Pin.PULL_UP)

# read and print the pin value
print(p2.value())

# reconfigure P0 in input mode with a pull-down resistor
p0.init(p0.IN, p0.PULL_DOWN)

# install an IRQ callback
p0.irq(lambda p: print(p))

Konstruktor

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

Akses periferal pin (pin GPIO) yang terkait dengan id yang diberikan. Jika argumen tambahan diberikan dalam konstruktor, argumen tersebut digunakan untuk menginisialisasi pin. Pengaturan yang tidak ditentukan akan tetap dalam kondisi sebelumnya.

Argumen-argumennya adalah:

  • id bersifat wajib dan dapat berupa objek sembarang. Di antara jenis nilai yang memungkinkan adalah: int (identifier Pin internal), str (nama Pin), dan tuple (pasangan [port, pin]).

  • mode menentukan mode pin, yang dapat berupa salah satu dari:

    • Pin.IN - Pin dikonfigurasi untuk input. Jika dilihat sebagai output, pin berada dalam kondisi impedansi tinggi.

    • Pin.OUT - Pin dikonfigurasi untuk output (normal).

    • Pin.OPEN_DRAIN - Pin dikonfigurasi untuk output open-drain. Output open-drain bekerja sebagai berikut: jika nilai output diatur ke 0, pin aktif pada level rendah; jika nilai output adalah 1, pin berada dalam kondisi impedansi tinggi. Tidak semua port mengimplementasikan mode ini, atau beberapa mungkin hanya pada pin tertentu.

    • Pin.ALT - Pin dikonfigurasi untuk menjalankan fungsi alternatif, yang bersifat port-specific. Untuk pin yang dikonfigurasi dengan cara ini, metode Pin lainnya (kecuali Pin.init()) tidak berlaku (memanggilnya akan menghasilkan perilaku yang tidak terdefinisi, atau bersifat hardware-specific). Tidak semua port mengimplementasikan mode ini.

    • Pin.ALT_OPEN_DRAIN - Sama seperti Pin.ALT, tetapi pin dikonfigurasi sebagai open-drain. Tidak semua port mengimplementasikan mode ini.

    • Pin.ANALOG - Pin dikonfigurasi untuk input analog, lihat kelas ADC.

  • pull menentukan apakah pin memiliki resistor pull (lemah) yang terpasang, dan dapat berupa salah satu dari:

    • None - Tidak ada resistor pull-up atau pull-down.

    • Pin.PULL_UP - Resistor pull-up diaktifkan.

    • Pin.PULL_DOWN - Resistor pull-down diaktifkan.

  • value hanya berlaku untuk mode Pin.OUT dan Pin.OPEN_DRAIN dan menentukan nilai awal pin output jika diberikan, jika tidak, kondisi periferal pin tetap tidak berubah.

  • drive menentukan daya output pin dan dapat berupa salah satu dari: Pin.DRIVE_0, Pin.DRIVE_1, dll., dengan kekuatan drive yang meningkat. Kemampuan arus aktual bergantung pada port. Tidak semua port mengimplementasikan argumen ini.

  • alt menentukan fungsi alternatif untuk pin dan nilai yang dapat diambilnya bergantung pada port. Argumen ini hanya berlaku untuk mode Pin.ALT dan Pin.ALT_OPEN_DRAIN. Argumen ini dapat digunakan ketika sebuah pin mendukung lebih dari satu fungsi alternatif. Jika hanya satu fungsi alternatif pin yang didukung, argumen ini tidak diperlukan. Tidak semua port mengimplementasikan argumen ini.

Seperti disebutkan di atas, kelas Pin memungkinkan untuk mengatur fungsi alternatif untuk pin tertentu, tetapi tidak menentukan operasi lebih lanjut pada pin tersebut. Pin yang dikonfigurasi dalam mode fungsi alternatif biasanya tidak digunakan sebagai GPIO melainkan dikendalikan oleh periferal hardware lainnya. Satu-satunya operasi yang didukung pada pin tersebut adalah re-inisialisasi, dengan memanggil konstruktor atau metode Pin.init(). Jika pin yang dikonfigurasi dalam mode fungsi alternatif di-inisialisasi ulang dengan Pin.IN, Pin.OUT, atau Pin.OPEN_DRAIN, fungsi alternatif akan dihapus dari pin.

Metode

init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None

Inisialisasi ulang pin menggunakan parameter yang diberikan. Hanya argumen yang ditentukan yang akan diatur. Kondisi periferal pin lainnya akan tetap tidak berubah. Lihat dokumentasi konstruktor untuk detail argumen.

Mengembalikan None.

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

Metode ini memungkinkan untuk mengatur dan mendapatkan nilai pin, tergantung pada apakah argumen x diberikan atau tidak.

Jika argumen dihilangkan, metode ini mendapatkan level logika digital pin saat ini, mengembalikan 0 atau 1 yang masing-masing sesuai dengan sinyal tegangan rendah dan tinggi. Perilaku metode ini bergantung pada mode pin:

  • Pin.IN - Metode mengembalikan nilai input aktual yang saat ini ada pada pin.

  • Pin.OUT - Perilaku dan nilai kembalian metode ini tidak terdefinisi.

  • Pin.OPEN_DRAIN - Jika pin dalam kondisi '0', maka perilaku dan nilai kembalian metode ini tidak terdefinisi. Jika tidak, jika pin dalam kondisi '1', metode mengembalikan nilai input aktual yang saat ini ada pada pin.

Jika argumen diberikan, metode ini mengatur level logika digital pin. Argumen x dapat berupa apa saja yang dapat dikonversi ke boolean. Jika dikonversi ke True, pin diatur ke kondisi '1', jika tidak diatur ke kondisi '0'. Perilaku metode ini bergantung pada mode pin:

  • Pin.IN - Nilai disimpan dalam buffer output pin. Kondisi pin tidak berubah, tetap dalam kondisi impedansi tinggi. Nilai yang tersimpan akan aktif pada pin segera setelah diubah ke mode Pin.OUT atau Pin.OPEN_DRAIN.

  • Pin.OUT - Buffer output diatur ke nilai yang diberikan segera.

  • Pin.OPEN_DRAIN - Jika nilai adalah '0', pin diatur ke kondisi tegangan rendah. Jika tidak, pin diatur ke kondisi impedansi tinggi.

Saat mengatur nilai, metode ini mengembalikan None.

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

Objek Pin dapat dipanggil. Metode call menyediakan pintasan (cepat) untuk mengatur dan mendapatkan nilai pin. Metode ini setara dengan Pin.value([x]). Lihat Pin.value() untuk detail lebih lanjut.

on() None

Atur pin ke level output "1".

off() None

Atur pin ke level output "0".

irq(handler: Callable[[Pin], None] | None = None, trigger: int = Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority: int = 1, wake: int | None = None, hard: bool = False) None

Konfigurasikan handler interupsi untuk dipanggil ketika sumber pemicu pin aktif. Jika mode pin adalah Pin.IN, sumber pemicu adalah nilai eksternal pada pin. Jika mode pin adalah Pin.OUT, sumber pemicu adalah buffer output pin. Jika tidak, jika mode pin adalah Pin.OPEN_DRAIN, sumber pemicu adalah buffer output untuk kondisi '0' dan nilai pin eksternal untuk kondisi '1'.

Argumen-argumennya adalah:

  • handler adalah fungsi opsional yang dipanggil ketika interupsi dipicu. Handler harus menerima tepat satu argumen yaitu instansi Pin.

  • trigger mengonfigurasi event yang dapat menghasilkan interupsi. Nilai yang memungkinkan adalah:

    • Pin.IRQ_FALLING interupsi pada tepi turun.

    • Pin.IRQ_RISING interupsi pada tepi naik.

    Nilai-nilai ini dapat di-OR-kan bersama untuk memicu pada beberapa event.

  • priority mengatur level prioritas interupsi. Nilai yang dapat diambil bersifat port-specific, tetapi nilai yang lebih tinggi selalu mewakili prioritas yang lebih tinggi.

  • wake memilih mode daya di mana interupsi ini dapat membangunkan sistem. Tidak didukung pada port OpenMV mana pun; biarkan pada nilai default.

  • hard jika true, interupsi hardware digunakan. Ini mengurangi penundaan antara perubahan pin dan handler yang dipanggil. Handler interupsi keras tidak boleh mengalokasikan memori; lihat Menulis interrupt handler. Tidak semua port mendukung argumen ini.

Metode ini mengembalikan objek callback.

Metode-metode berikut adalah ekstensi dari API Pin inti. Metode-metode tersebut dikelompokkan berdasarkan ketersediaan port.

Metode yang tersedia di semua port OpenMV

low() None

Atur pin ke level output "0". Alias dari off().

high() None

Atur pin ke level output "1". Alias dari on().

mimxrt + alif saja

toggle() None

Balik pin output -- ubah "0" ke "1" atau sebaliknya. Tidak tersedia di STM32 (gunakan value(not value()) jika Anda membutuhkan ini di STM32).

STM32 saja

mode(mode: int | None = None, /) int
mode(mode: int, /) None

Dapatkan atau atur mode pin. Lihat dokumentasi konstruktor untuk detail argumen mode.

pull(pull: int | None = None, /) int
pull(pull: int, /) None

Dapatkan atau atur kondisi pull pin. Lihat dokumentasi konstruktor untuk detail argumen pull.

Konstanta

Konstanta di bawah ini digunakan untuk mengonfigurasi objek Pin melalui konstruktor, init() dan irq(). Konstanta dikelompokkan berdasarkan ketersediaan port.

Konstanta yang tersedia di semua port OpenMV

IN: int

Mode pin: input digital impedansi tinggi.

OUT: int

Mode pin: output digital push-pull. Alias dari OUT_PP pada STM32.

OPEN_DRAIN: int

Mode pin: output open-drain. Menggerakkan 0 menarik jalur ke low; menggerakkan 1 melepaskannya ke impedansi tinggi.

PULL_UP: int

Aktifkan resistor pull-up internal pada pin.

PULL_DOWN: int

Aktifkan resistor pull-down internal pada pin.

IRQ_FALLING: int

Teruskan ke irq() untuk memicu pada tepi turun.

IRQ_RISING: int

Teruskan ke irq() untuk memicu pada tepi naik.

STM32 saja

ALT: int

Mode pin: fungsi alternatif (push-pull). Gunakan dengan alt= untuk memilih fungsi periferal mana yang dihubungkan ke pin. Alias dari AF_PP.

ALT_OPEN_DRAIN: int

Mode pin: fungsi alternatif (open-drain). Alias dari AF_OD.

ANALOG: int

Mode pin: input analog -- buffer input/output digital diputuskan sehingga pin dapat dikendalikan oleh saluran ADC.

AF_PP: int

Mode push-pull fungsi alternatif (nilai sama seperti ALT).

AF_OD: int

Mode open-drain fungsi alternatif (nilai sama seperti ALT_OPEN_DRAIN).

OUT_PP: int

Mode output push-pull (nilai sama seperti OUT).

OUT_OD: int

Mode output open-drain (nilai sama seperti OPEN_DRAIN).

PULL_NONE: int

Nonaktifkan resistor pull-up / pull-down internal pada pin.

mimxrt saja

PULL_UP_47K: int

Aktifkan resistor pull-up internal ~47 kΩ.

PULL_UP_22K: int

Aktifkan resistor pull-up internal ~22 kΩ.

PULL_HOLD: int

Aktifkan fungsi bus-keeper / hold pad -- pin mengunci level logika saat ini daripada mengambang.

DRIVE_OFF: int

Nonaktifkan driver output pin.

DRIVE_0: int

Pengaturan kekuatan drive terendah (impedansi seri tertinggi) -- referensi R0 (~150 Ω pada 3.3 V / 260 Ω pada 1.8 V).

DRIVE_1: int

Kekuatan drive satu langkah di atas DRIVE_0.

DRIVE_2: int

Kekuatan drive dua langkah di atas DRIVE_0.

DRIVE_3: int

Kekuatan drive tiga langkah di atas DRIVE_0 (default untuk pin output).

DRIVE_4: int

Kekuatan drive empat langkah di atas DRIVE_0.

DRIVE_5: int

Kekuatan drive lima langkah di atas DRIVE_0.

DRIVE_6: int

Pengaturan kekuatan drive terkuat.