คลาส Pin -- ควบคุมพิน I/O

ออบเจ็กต์ pin ใช้สำหรับควบคุมพิน I/O (หรือที่รู้จักกันในชื่อ GPIO - General-Purpose Input/Output) โดยทั่วไปออบเจ็กต์ pin จะถูกเชื่อมโยงกับพินทางกายภาพที่สามารถขับแรงดันเอาต์พุตและอ่านแรงดันอินพุตได้ คลาส pin มีเมธอดสำหรับตั้งค่าโหมดของพิน (IN, OUT ฯลฯ) และเมธอดสำหรับรับและตั้งค่าระดับลอจิกดิจิทัล สำหรับการควบคุมแบบอนาล็อกของพิน ดูที่คลาส ADC

ออบเจ็กต์ pin สร้างขึ้นโดยใช้ตัวระบุที่กำหนดพิน I/O ที่ต้องการอย่างชัดเจน รูปแบบที่อนุญาตของตัวระบุและพินทางกายภาพที่ตัวระบุนั้นแมปไปถึงขึ้นอยู่กับพอร์ต ตัวระบุที่เป็นไปได้ได้แก่ จำนวนเต็ม สตริง หรือ tuple ที่มีพอร์ตและหมายเลขพิน

รูปแบบการใช้งาน:

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))

ตัวสร้าง

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

เข้าถึงอุปกรณ์ต่อพ่วงพิน (GPIO pin) ที่เชื่อมโยงกับ id ที่ระบุ หากมีอาร์กิวเมนต์เพิ่มเติมในตัวสร้าง อาร์กิวเมนต์เหล่านั้นจะถูกใช้เพื่อเริ่มต้นพิน การตั้งค่าใดๆ ที่ไม่ได้ระบุจะยังคงอยู่ในสถานะก่อนหน้า

อาร์กิวเมนต์ได้แก่:

  • id เป็นอาร์กิวเมนต์จำเป็นและสามารถเป็นออบเจ็กต์ใดก็ได้ ประเภทค่าที่เป็นไปได้ได้แก่: int (ตัวระบุพินภายใน), str (ชื่อพิน), และ tuple (คู่ของ [port, pin])

  • mode กำหนดโหมดพิน ซึ่งสามารถเป็นหนึ่งในนี้:

    • Pin.IN - พินถูกกำหนดค่าสำหรับอินพุต หากมองเป็นเอาต์พุต พินจะอยู่ในสถานะอิมพีแดนซ์สูง

    • Pin.OUT - พินถูกกำหนดค่าสำหรับเอาต์พุต (ปกติ)

    • Pin.OPEN_DRAIN - พินถูกกำหนดค่าสำหรับเอาต์พุต open-drain การทำงานของเอาต์พุต open-drain เป็นดังนี้: หากค่าเอาต์พุตตั้งเป็น 0 พินจะทำงานที่ระดับต่ำ; หากค่าเอาต์พุตเป็น 1 พินจะอยู่ในสถานะอิมพีแดนซ์สูง ไม่ใช่ทุกพอร์ตที่รองรับโหมดนี้ หรือบางพอร์ตอาจรองรับเฉพาะบางพิน

    • Pin.ALT - พินถูกกำหนดค่าเพื่อทำฟังก์ชันทางเลือกซึ่งขึ้นอยู่กับพอร์ต สำหรับพินที่กำหนดค่าในลักษณะนี้ เมธอด Pin อื่นๆ (ยกเว้น Pin.init()) ไม่สามารถใช้งานได้ (การเรียกใช้จะนำไปสู่ผลลัพธ์ที่ไม่กำหนดหรือเฉพาะฮาร์ดแวร์) ไม่ใช่ทุกพอร์ตที่รองรับโหมดนี้

    • Pin.ALT_OPEN_DRAIN - เหมือนกับ Pin.ALT แต่พินถูกกำหนดค่าเป็น open-drain ไม่ใช่ทุกพอร์ตที่รองรับโหมดนี้

    • Pin.ANALOG - พินถูกกำหนดค่าสำหรับอินพุตแบบอนาล็อก ดูที่คลาส ADC

  • pull กำหนดว่าพินมีตัวต้านทาน pull (อ่อน) ติดอยู่หรือไม่ และสามารถเป็นหนึ่งในนี้:

    • None - ไม่มีตัวต้านทาน pull up หรือ pull down

    • Pin.PULL_UP - เปิดใช้งานตัวต้านทาน pull up

    • Pin.PULL_DOWN - เปิดใช้งานตัวต้านทาน pull down

  • value ใช้ได้เฉพาะสำหรับโหมด Pin.OUT และ Pin.OPEN_DRAIN และกำหนดค่าเริ่มต้นของพินเอาต์พุตหากระบุ มิฉะนั้นสถานะของพินอุปกรณ์ต่อพ่วงจะยังคงไม่เปลี่ยนแปลง

  • drive กำหนดกำลังเอาต์พุตของพินและสามารถเป็นหนึ่งใน: Pin.DRIVE_0, Pin.DRIVE_1 เป็นต้น โดยมีความแรงในการขับเพิ่มขึ้น ความสามารถในการขับกระแสจริงขึ้นอยู่กับพอร์ต ไม่ใช่ทุกพอร์ตที่รองรับอาร์กิวเมนต์นี้

  • alt กำหนดฟังก์ชันทางเลือกสำหรับพิน และค่าที่สามารถรับได้ขึ้นอยู่กับพอร์ต อาร์กิวเมนต์นี้ใช้ได้เฉพาะสำหรับโหมด Pin.ALT และ Pin.ALT_OPEN_DRAIN อาจใช้เมื่อพินรองรับมากกว่าหนึ่งฟังก์ชันทางเลือก หากรองรับเฉพาะฟังก์ชันทางเลือกเดียว อาร์กิวเมนต์นี้ไม่จำเป็น ไม่ใช่ทุกพอร์ตที่รองรับอาร์กิวเมนต์นี้

ตามที่ระบุไว้ข้างต้น คลาส Pin ช่วยให้สามารถตั้งค่าฟังก์ชันทางเลือกสำหรับพินที่ต้องการได้ แต่ไม่ได้ระบุการดำเนินการอื่นๆ บนพินดังกล่าว พินที่กำหนดค่าในโหมดฟังก์ชันทางเลือกมักไม่ได้ใช้เป็น GPIO แต่ถูกขับโดยฮาร์ดแวร์อุปกรณ์ต่อพ่วงอื่น การดำเนินการเดียวที่รองรับบนพินดังกล่าวคือการเริ่มต้นใหม่ โดยเรียกตัวสร้างหรือเมธอด Pin.init() หากพินที่กำหนดค่าในโหมดฟังก์ชันทางเลือกถูกเริ่มต้นใหม่ด้วย Pin.IN, Pin.OUT, หรือ Pin.OPEN_DRAIN ฟังก์ชันทางเลือกจะถูกลบออกจากพิน

เมธอด

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

เริ่มต้นพินใหม่โดยใช้พารามิเตอร์ที่ระบุ เฉพาะอาร์กิวเมนต์ที่ระบุเท่านั้นที่จะถูกตั้งค่า ส่วนที่เหลือของสถานะพินอุปกรณ์ต่อพ่วงจะยังคงไม่เปลี่ยนแปลง ดูเอกสารตัวสร้างสำหรับรายละเอียดของอาร์กิวเมนต์

คืนค่า None

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

เมธอดนี้ช่วยให้สามารถตั้งค่าและรับค่าของพินได้ ขึ้นอยู่กับว่าอาร์กิวเมนต์ x ถูกระบุหรือไม่

หากไม่มีอาร์กิวเมนต์ เมธอดนี้จะรับระดับลอจิกดิจิทัลของพิน โดยคืนค่า 0 หรือ 1 ที่สอดคล้องกับสัญญาณแรงดันต่ำและสูงตามลำดับ พฤติกรรมของเมธอดนี้ขึ้นอยู่กับโหมดของพิน:

  • Pin.IN - เมธอดคืนค่าอินพุตจริงที่มีอยู่บนพินในขณะนั้น

  • Pin.OUT - พฤติกรรมและค่าที่คืนมาของเมธอดไม่ได้กำหนดไว้

  • Pin.OPEN_DRAIN - หากพินอยู่ในสถานะ '0' พฤติกรรมและค่าที่คืนมาของเมธอดไม่ได้กำหนดไว้ มิฉะนั้น หากพินอยู่ในสถานะ '1' เมธอดจะคืนค่าอินพุตจริงที่มีอยู่บนพินในขณะนั้น

หากระบุอาร์กิวเมนต์ เมธอดนี้จะตั้งค่าระดับลอจิกดิจิทัลของพิน อาร์กิวเมนต์ x สามารถเป็นอะไรก็ได้ที่แปลงเป็นบูลีน หากแปลงเป็น True พินจะถูกตั้งค่าเป็นสถานะ '1' มิฉะนั้นจะถูกตั้งค่าเป็นสถานะ '0' พฤติกรรมของเมธอดนี้ขึ้นอยู่กับโหมดของพิน:

  • Pin.IN - ค่าถูกเก็บไว้ในบัฟเฟอร์เอาต์พุตของพิน สถานะพินไม่เปลี่ยนแปลง มันยังคงอยู่ในสถานะอิมพีแดนซ์สูง ค่าที่เก็บไว้จะทำงานบนพินทันทีที่เปลี่ยนเป็นโหมด Pin.OUT หรือ Pin.OPEN_DRAIN

  • Pin.OUT - บัฟเฟอร์เอาต์พุตถูกตั้งค่าเป็นค่าที่ระบุทันที

  • Pin.OPEN_DRAIN - หากค่าเป็น '0' พินจะถูกตั้งค่าเป็นสถานะแรงดันต่ำ มิฉะนั้นพินจะถูกตั้งค่าเป็นสถานะอิมพีแดนซ์สูง

เมื่อตั้งค่า เมธอดนี้จะคืนค่า None

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

ออบเจ็กต์ Pin สามารถเรียกใช้ได้ เมธอด call ให้ทางลัด (รวดเร็ว) สำหรับตั้งค่าและรับค่าของพิน เทียบเท่ากับ Pin.value([x]) ดู Pin.value() สำหรับรายละเอียดเพิ่มเติม

on() None

ตั้งค่าพินเป็นระดับเอาต์พุต "1"

off() None

ตั้งค่าพินเป็นระดับเอาต์พุต "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

กำหนดค่าตัวจัดการอินเทอร์รัปต์ที่จะถูกเรียกเมื่อแหล่งทริกเกอร์ของพินทำงาน หากโหมดพินเป็น Pin.IN แหล่งทริกเกอร์คือค่าภายนอกบนพิน หากโหมดพินเป็น Pin.OUT แหล่งทริกเกอร์คือบัฟเฟอร์เอาต์พุตของพิน มิฉะนั้น หากโหมดพินเป็น Pin.OPEN_DRAIN แหล่งทริกเกอร์คือบัฟเฟอร์เอาต์พุตสำหรับสถานะ '0' และค่าพินภายนอกสำหรับสถานะ '1'

อาร์กิวเมนต์ได้แก่:

  • handler เป็นฟังก์ชันที่ไม่บังคับซึ่งจะถูกเรียกเมื่ออินเทอร์รัปต์ทริกเกอร์ ตัวจัดการต้องรับอาร์กิวเมนต์หนึ่งตัวซึ่งเป็นอินสแตนซ์ Pin

  • trigger กำหนดค่าเหตุการณ์ที่สามารถสร้างอินเทอร์รัปต์ได้ ค่าที่เป็นไปได้ได้แก่:

    • Pin.IRQ_FALLING อินเทอร์รัปต์บนขอบลดลง

    • Pin.IRQ_RISING อินเทอร์รัปต์บนขอบขึ้น

    ค่าเหล่านี้สามารถ OR กันเพื่อทริกเกอร์บนหลายเหตุการณ์

  • priority ตั้งค่าระดับความสำคัญของอินเทอร์รัปต์ ค่าที่รับได้ขึ้นอยู่กับพอร์ต แต่ค่าที่สูงกว่าแสดงถึงความสำคัญที่สูงกว่าเสมอ

  • wake เลือกโหมดพลังงานที่อินเทอร์รัปต์นี้สามารถปลุกระบบได้ ไม่รองรับบนพอร์ต OpenMV ใดๆ ให้ใช้ค่าเริ่มต้น

  • hard หากเป็น true จะใช้อินเทอร์รัปต์ฮาร์ดแวร์ ซึ่งช่วยลดความล่าช้าระหว่างการเปลี่ยนแปลงพินและการเรียกตัวจัดการ ตัวจัดการอินเทอร์รัปต์แบบ hard อาจไม่จัดสรรหน่วยความจำ ดู การเขียนตัวจัดการอินเทอร์รัปต์ ไม่ใช่ทุกพอร์ตที่รองรับอาร์กิวเมนต์นี้

เมธอดนี้คืนค่าออบเจ็กต์คอลแบ็ก

เมธอดต่อไปนี้เป็นส่วนขยายของ Pin API หลัก โดยจัดกลุ่มตามความพร้อมใช้งานของพอร์ต

เมธอดที่ใช้ได้บนพอร์ต OpenMV ทั้งหมด

low() None

ตั้งค่าพินเป็นระดับเอาต์พุต "0" นามแฝงของ off()

high() None

ตั้งค่าพินเป็นระดับเอาต์พุต "1" นามแฝงของ on()

mimxrt + alif เท่านั้น

toggle() None

สลับพินเอาต์พุต -- พลิก "0" เป็น "1" หรือในทางกลับกัน ไม่เปิดเผยบน STM32 (ใช้ value(not value()) หากต้องการสิ่งนี้บน STM32)

STM32 เท่านั้น

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

รับหรือตั้งค่าโหมดพิน ดูเอกสารตัวสร้างสำหรับรายละเอียดของอาร์กิวเมนต์ mode

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

รับหรือตั้งค่าสถานะ pull ของพิน ดูเอกสารตัวสร้างสำหรับรายละเอียดของอาร์กิวเมนต์ pull

ค่าคงที่

ค่าคงที่ด้านล่างใช้สำหรับกำหนดค่าออบเจ็กต์ Pin ผ่านตัวสร้าง init() และ irq() โดยจัดกลุ่มตามความพร้อมใช้งานของพอร์ต

ค่าคงที่ที่ใช้ได้บนพอร์ต OpenMV ทั้งหมด

IN: int

โหมดพิน: อินพุตดิจิทัลอิมพีแดนซ์สูง

OUT: int

โหมดพิน: เอาต์พุตดิจิทัล push-pull นามแฝงของ OUT_PP บน STM32

OPEN_DRAIN: int

โหมดพิน: เอาต์พุต open-drain การขับ 0 ดึงสายให้ต่ำ; การขับ 1 ปล่อยให้อยู่ในสถานะอิมพีแดนซ์สูง

PULL_UP: int

เปิดใช้งานตัวต้านทาน pull-up ภายในบนพิน

PULL_DOWN: int

เปิดใช้งานตัวต้านทาน pull-down ภายในบนพิน

IRQ_FALLING: int

ส่งไปยัง irq() เพื่อทริกเกอร์บนขอบลดลง

IRQ_RISING: int

ส่งไปยัง irq() เพื่อทริกเกอร์บนขอบขึ้น

STM32 เท่านั้น

ALT: int

โหมดพิน: ฟังก์ชันทางเลือก (push-pull) ใช้กับ alt= เพื่อเลือกว่าฟังก์ชันอุปกรณ์ต่อพ่วงใดที่พินถูกเส้นทางไปยัง นามแฝงของ AF_PP

ALT_OPEN_DRAIN: int

โหมดพิน: ฟังก์ชันทางเลือก (open-drain) นามแฝงของ AF_OD

ANALOG: int

โหมดพิน: อินพุตแบบอนาล็อก -- บัฟเฟอร์อินพุต/เอาต์พุตดิจิทัลถูกตัดการเชื่อมต่อเพื่อให้พินสามารถขับโดยช่อง ADC

AF_PP: int

โหมด push-pull สำหรับฟังก์ชันทางเลือก (ค่าเดียวกับ ALT)

AF_OD: int

โหมด open-drain สำหรับฟังก์ชันทางเลือก (ค่าเดียวกับ ALT_OPEN_DRAIN)

OUT_PP: int

โหมดเอาต์พุต push-pull (ค่าเดียวกับ OUT)

OUT_OD: int

โหมดเอาต์พุต open-drain (ค่าเดียวกับ OPEN_DRAIN)

PULL_NONE: int

ปิดใช้งานตัวต้านทาน pull-up / pull-down ภายในบนพิน

mimxrt เท่านั้น

PULL_UP_47K: int

เปิดใช้งานตัวต้านทาน pull-up ภายในประมาณ ~47 kΩ

PULL_UP_22K: int

เปิดใช้งานตัวต้านทาน pull-up ภายในประมาณ ~22 kΩ

PULL_HOLD: int

เปิดใช้งานฟังก์ชัน bus-keeper / hold ของแพด -- พินจะล็อกระดับลอจิกปัจจุบันแทนที่จะลอย

DRIVE_OFF: int

ปิดใช้งานไดรเวอร์เอาต์พุตพิน

DRIVE_0: int

การตั้งค่าความแรงในการขับต่ำสุด (อิมพีแดนซ์อนุกรมสูงสุด) -- อ้างอิง R0 (~150 Ω ที่ 3.3 V / 260 Ω ที่ 1.8 V)

DRIVE_1: int

ความแรงในการขับหนึ่งขั้นเหนือ DRIVE_0

DRIVE_2: int

ความแรงในการขับสองขั้นเหนือ DRIVE_0

DRIVE_3: int

ความแรงในการขับสามขั้นเหนือ DRIVE_0 (ค่าเริ่มต้นสำหรับพินเอาต์พุต)

DRIVE_4: int

ความแรงในการขับสี่ขั้นเหนือ DRIVE_0

DRIVE_5: int

ความแรงในการขับห้าขั้นเหนือ DRIVE_0

DRIVE_6: int

การตั้งค่าความแรงในการขับสูงสุด