class Pin -- การควบคุมพิน I/O

ออบเจกต์ Pin แทนพิน GPIO หนึ่งพินบน STM32 โดยให้เมธอดในการกำหนดค่าโหมดของพิน (อินพุต เอาต์พุต ฟังก์ชันสำรอง อนาล็อก) และตัวต้านทานดึง รวมถึงอ่านหรือขับระดับดิจิทัลของพิน สำหรับการสุ่มตัวอย่างอนาล็อกดูที่ pyb.ADC สำหรับการระบุฟังก์ชันสำรองดูที่ PinAF

พินส่วนหัวทั้งหมดถูกกำหนดไว้ล่วงหน้าเป็น pyb.Pin.board.<name> OpenMV Cam STM32 ส่วนใหญ่เปิดเผยพินส่วนหัว I/O P0 ... P9; OpenMV Cam N6 เปิดเผยพินเพิ่มเติมถึง P18

p0 = pyb.Pin.board.P0
g = pyb.Pin(pyb.Pin.board.P0, pyb.Pin.IN)

พอร์ต/พิน STM32 ที่อยู่เบื้องหลังสามารถระบุตรงได้ผ่าน pyb.Pin.cpu.<name> โดยตั้งชื่อเป็นตัวอักษรพอร์ตตามด้วยหมายเลขพิน (เช่น pyb.Pin.cpu.A0) การแมปพินส่วนหัว OpenMV แต่ละพินไปยังพิน CPU ถูกกำหนดโดยบอร์ด

พินอาจถูกเลือกด้วยชื่อสตริงได้เช่นกัน:

g = pyb.Pin("P0", pyb.Pin.OUT_PP)

สามารถเพิ่มชื่อที่ผู้ใช้กำหนดได้ด้วย Pin.dict()

MyMapperDict = {"LeftMotorDir": pyb.Pin.cpu.A0}
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

และสอบถามกลับได้:

pin = pyb.Pin("LeftMotorDir")

อีกทางหนึ่ง สามารถติดตั้งฟังก์ชันแมปแบบกำหนดเองได้ด้วย Pin.mapper()

def MyMapper(pin_name):
    if pin_name == "LeftMotorDir":
        return pyb.Pin.cpu.A0

pyb.Pin.mapper(MyMapper)

ดังนั้นการเรียก pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) จะส่ง "LeftMotorDir" ไปยัง mapper โดยตรง

ลำดับต่อไปนี้กำหนดวิธีที่ชื่อถูกแมปไปยังพินฟิสิคัล:

  1. ออบเจกต์ Pin ถูกส่งผ่านโดยตรง

  2. ฟังก์ชัน mapper ที่ผู้ใช้จัดเตรียมคืนค่าพิน

  3. พจนานุกรมที่ผู้ใช้จัดเตรียมมีคีย์ที่ตรงกัน

  4. สตริงตรงกับชื่อพินบอร์ด (P0, P1, ...)

  5. สตริงตรงกับชื่อพอร์ต/พิน CPU (A0, B7, ...)

เรียก pyb.Pin.debug(True) เพื่อพิมพ์ข้อมูลการวินิจฉัยเกี่ยวกับวิธีที่แต่ละออบเจกต์ถูกแมปไปยังพิน

ตัวสร้าง

class pyb.Pin(id: str | Pin, *args, **kwargs)

สร้างออบเจกต์ Pin ใหม่ที่เชื่อมโยงกับ id ที่กำหนด หากมีอาร์กิวเมนต์เพิ่มเติม อาร์กิวเมนต์เหล่านั้นจะถูกส่งต่อไปยัง Pin.init() เพื่อกำหนดค่าพิน

เมธอดของคลาส

classmethod debug(state: bool | None = None) bool | None

รับหรือตั้งค่าสถานะการดีบัก (True หรือ False สำหรับเปิดหรือปิด)

classmethod dict(dict: dict | None = None) dict | None

รับหรือตั้งค่าพจนานุกรม mapper ของพิน

classmethod mapper(fun: Callable[[str], Pin] | None = None) Callable[[str], Pin] | None

รับหรือตั้งค่าฟังก์ชัน mapper ของพิน

เมธอด

init(mode: int, pull: int = Pin.PULL_NONE, *, value: int | None = None, alt: int | str = -1) None

เริ่มต้นพิน:

  • mode สามารถเป็นหนึ่งใน:

    • Pin.IN - กำหนดค่าพินสำหรับอินพุต;

    • Pin.OUT_PP - กำหนดค่าพินสำหรับเอาต์พุต ด้วยการควบคุม push-pull;

    • Pin.OUT_OD - กำหนดค่าพินสำหรับเอาต์พุต ด้วยการควบคุม open-drain;

    • Pin.ALT - กำหนดค่าพินสำหรับฟังก์ชันสำรอง อินพุตหรือเอาต์พุต;

    • Pin.AF_PP - กำหนดค่าพินสำหรับฟังก์ชันสำรอง แบบ push-pull;

    • Pin.AF_OD - กำหนดค่าพินสำหรับฟังก์ชันสำรอง แบบ open-drain;

    • Pin.ANALOG - กำหนดค่าพินสำหรับอนาล็อก

  • pull สามารถเป็นหนึ่งใน:

    • Pin.PULL_NONE - ไม่มีตัวต้านทานดึงขึ้นหรือดึงลง;

    • Pin.PULL_UP - เปิดใช้งานตัวต้านทานดึงขึ้น;

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

    เมื่อพินมีโหมดดึง Pin.PULL_UP หรือ Pin.PULL_DOWN เปิดใช้งาน พินนั้นจะถูกดึงไปที่ 3V3 หรือ GND ตามลำดับผ่านตัวต้านทานภายใน (โดยทั่วไปเป็นสิบ kOhm -- ดูคุณลักษณะทางไฟฟ้าใน datasheet STM32 สำหรับ OpenMV Cam ที่ใช้)

  • value หากไม่ใช่ None จะตั้งค่าเอาต์พุตพอร์ตก่อนเปิดใช้งานพิน

  • alt สามารถใช้ได้เมื่อโหมดเป็น Pin.ALT, Pin.AF_PP หรือ Pin.AF_OD เพื่อตั้งค่าดัชนีหรือชื่อของฟังก์ชันสำรองหนึ่งที่เชื่อมโยงกับพิน อาร์กิวเมนต์นี้เดิมเรียกว่า af ซึ่งยังสามารถใช้ได้หากจำเป็น

value(value: Any | None = None) int | None

รับหรือตั้งค่าระดับลอจิกดิจิทัลของพิน:

  • เมื่อไม่มีอาร์กิวเมนต์ คืนค่า 0 หรือ 1 ขึ้นอยู่กับระดับลอจิกของพิน

  • เมื่อมี value กำหนด ตั้งค่าระดับลอจิกของพิน value สามารถเป็นอะไรก็ได้ที่แปลงเป็นบูลีน หากแปลงเป็น True พินจะถูกตั้งสูง มิฉะนั้นจะถูกตั้งต่ำ

__str__() str

คืนค่าสตริงที่อธิบายออบเจกต์พิน

af() int

คืนค่าฟังก์ชันสำรองที่กำหนดค่าปัจจุบันของพิน จำนวนเต็มที่คืนค่าจะตรงกับหนึ่งในค่าคงที่ที่อนุญาตสำหรับอาร์กิวเมนต์ af ของฟังก์ชัน init

af_list() List[PinAF]

คืนค่าอาร์เรย์ของฟังก์ชันสำรองที่มีอยู่สำหรับพินนี้

gpio() int

คืนค่าที่อยู่ฐานของบล็อก GPIO ที่เชื่อมโยงกับพินนี้

mode() int

คืนค่าโหมดที่กำหนดค่าปัจจุบันของพิน จำนวนเต็มที่คืนค่าจะตรงกับหนึ่งในค่าคงที่ที่อนุญาตสำหรับอาร์กิวเมนต์ mode ของฟังก์ชัน init

name() str

รับชื่อพิน

names() List[str]

คืนค่าชื่อ cpu และบอร์ดสำหรับพินนี้

pin() int

รับหมายเลขพิน

port() int

รับพอร์ตพิน

pull() int

คืนค่าการดึงที่กำหนดค่าปัจจุบันของพิน จำนวนเต็มที่คืนค่าจะตรงกับหนึ่งในค่าคงที่ที่อนุญาตสำหรับอาร์กิวเมนต์ pull ของฟังก์ชัน init

ค่าคงที่

IN: int

กำหนดค่าพินเป็นอินพุตดิจิทัล (high-impedance)

OUT_PP: int

กำหนดค่าพินเป็นเอาต์พุตดิจิทัลด้วยไดรเวอร์ push-pull

OUT_OD: int

กำหนดค่าพินเป็นเอาต์พุตดิจิทัลด้วยไดรเวอร์ open-drain

ANALOG: int

กำหนดค่าพินเป็นอินพุตอนาล็อก (เช่น สำหรับใช้กับ ADC)

ALT: int

กำหนดค่าพินเป็นฟังก์ชันสำรอง (อินพุตหรือเอาต์พุต)

AF_PP: int

กำหนดค่าพินเป็นฟังก์ชันสำรองด้วยไดรเวอร์ push-pull

AF_OD: int

กำหนดค่าพินเป็นฟังก์ชันสำรองด้วยไดรเวอร์ open-drain

PULL_NONE: int

ปิดใช้งานทั้งตัวต้านทานดึงขึ้นและดึงลงบนพิน

PULL_UP: int

เปิดใช้งานตัวต้านทานดึงขึ้นภายในบนพิน

PULL_DOWN: int

เปิดใช้งานตัวต้านทานดึงลงภายในบนพิน