คลาส 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 downPin.PULL_UP- เปิดใช้งานตัวต้านทาน pull upPin.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_DRAINPin.OUT- บัฟเฟอร์เอาต์พุตถูกตั้งค่าเป็นค่าที่ระบุทันทีPin.OPEN_DRAIN- หากค่าเป็น '0' พินจะถูกตั้งค่าเป็นสถานะแรงดันต่ำ มิฉะนั้นพินจะถูกตั้งค่าเป็นสถานะอิมพีแดนซ์สูง
เมื่อตั้งค่า เมธอดนี้จะคืนค่า
None
- __call__(x: Any = None, /) int | None¶
ออบเจ็กต์ Pin สามารถเรียกใช้ได้ เมธอด call ให้ทางลัด (รวดเร็ว) สำหรับตั้งค่าและรับค่าของพิน เทียบเท่ากับ Pin.value([x]) ดู
Pin.value()สำหรับรายละเอียดเพิ่มเติม
- 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เป็นฟังก์ชันที่ไม่บังคับซึ่งจะถูกเรียกเมื่ออินเทอร์รัปต์ทริกเกอร์ ตัวจัดการต้องรับอาร์กิวเมนต์หนึ่งตัวซึ่งเป็นอินสแตนซ์Pintriggerกำหนดค่าเหตุการณ์ที่สามารถสร้างอินเทอร์รัปต์ได้ ค่าที่เป็นไปได้ได้แก่:Pin.IRQ_FALLINGอินเทอร์รัปต์บนขอบลดลงPin.IRQ_RISINGอินเทอร์รัปต์บนขอบขึ้น
ค่าเหล่านี้สามารถ OR กันเพื่อทริกเกอร์บนหลายเหตุการณ์
priorityตั้งค่าระดับความสำคัญของอินเทอร์รัปต์ ค่าที่รับได้ขึ้นอยู่กับพอร์ต แต่ค่าที่สูงกว่าแสดงถึงความสำคัญที่สูงกว่าเสมอwakeเลือกโหมดพลังงานที่อินเทอร์รัปต์นี้สามารถปลุกระบบได้ ไม่รองรับบนพอร์ต OpenMV ใดๆ ให้ใช้ค่าเริ่มต้นhardหากเป็น true จะใช้อินเทอร์รัปต์ฮาร์ดแวร์ ซึ่งช่วยลดความล่าช้าระหว่างการเปลี่ยนแปลงพินและการเรียกตัวจัดการ ตัวจัดการอินเทอร์รัปต์แบบ hard อาจไม่จัดสรรหน่วยความจำ ดู การเขียนตัวจัดการอินเทอร์รัปต์ ไม่ใช่ทุกพอร์ตที่รองรับอาร์กิวเมนต์นี้
เมธอดนี้คืนค่าออบเจ็กต์คอลแบ็ก
เมธอดต่อไปนี้เป็นส่วนขยายของ Pin API หลัก โดยจัดกลุ่มตามความพร้อมใช้งานของพอร์ต
เมธอดที่ใช้ได้บนพอร์ต OpenMV ทั้งหมด¶
mimxrt + alif เท่านั้น¶
STM32 เท่านั้น¶
ค่าคงที่¶
ค่าคงที่ด้านล่างใช้สำหรับกำหนดค่าออบเจ็กต์
Pinผ่านตัวสร้างinit()และirq()โดยจัดกลุ่มตามความพร้อมใช้งานของพอร์ตค่าคงที่ที่ใช้ได้บนพอร์ต OpenMV ทั้งหมด¶
STM32 เท่านั้น¶
- ALT: int¶
โหมดพิน: ฟังก์ชันทางเลือก (push-pull) ใช้กับ
alt=เพื่อเลือกว่าฟังก์ชันอุปกรณ์ต่อพ่วงใดที่พินถูกเส้นทางไปยัง นามแฝงของAF_PP
- ANALOG: int¶
โหมดพิน: อินพุตแบบอนาล็อก -- บัฟเฟอร์อินพุต/เอาต์พุตดิจิทัลถูกตัดการเชื่อมต่อเพื่อให้พินสามารถขับโดยช่อง
ADC
- AF_OD: int¶
โหมด open-drain สำหรับฟังก์ชันทางเลือก (ค่าเดียวกับ
ALT_OPEN_DRAIN)
- OUT_OD: int¶
โหมดเอาต์พุต open-drain (ค่าเดียวกับ
OPEN_DRAIN)
mimxrt เท่านั้น¶
- PULL_HOLD: int¶
เปิดใช้งานฟังก์ชัน bus-keeper / hold ของแพด -- พินจะล็อกระดับลอจิกปัจจุบันแทนที่จะลอย