คลาส USB_VCP -- พอร์ตสื่อสารเสมือน USB

คลาส USB_VCP ช่วยให้สร้างออบเจกต์คล้าย stream ที่แทนพอร์ตสื่อสารเสมือน USB ใช้เพื่ออ่านและเขียนข้อมูลผ่าน USB ไปยังโฮสต์ที่เชื่อมต่ออยู่ได้

คอนสตรักเตอร์

class pyb.USB_VCP(id: int = 0)

สร้างออบเจกต์ USB_VCP ใหม่ อาร์กิวเมนต์ id เลือกว่าจะใช้พอร์ต USB VCP ใดเมื่อมีการเปิดเผยมากกว่าหนึ่งพอร์ต

เมธอด

init(*, flow: int = -1) None

กำหนดค่าพอร์ต USB VCP หากอาร์กิวเมนต์ flow ไม่ใช่ -1 จะตั้งค่าการควบคุมการไหล ซึ่งเป็น bitwise-OR ของ USB_VCP.RTS และ USB_VCP.CTS RTS ควบคุมพฤติกรรมการอ่าน CTS ควบคุมพฤติกรรมการเขียน

setinterrupt(chr: int) None

ตั้งค่าอักขระที่ขัดจังหวะการทำงานของโค้ด Python ที่กำลังรัน ค่าเริ่มต้นคือ 3 (CTRL-C) และเมื่อได้รับอักขระ CTRL-C ผ่านพอร์ต USB VCP จะเกิดข้อยกเว้น KeyboardInterrupt

ตั้งค่าเป็น -1 เพื่อปิดใช้งานฟีเจอร์การขัดจังหวะนี้ มีประโยชน์เมื่อต้องการส่งไบต์ดิบผ่านพอร์ต USB VCP

isconnected() bool

คืนค่า True หาก USB เชื่อมต่อเป็นอุปกรณ์อนุกรม ไม่เช่นนั้นคืนค่า False

debug_mode_enabled() bool

คืนค่า True หาก OpenMV IDE เชื่อมต่อกับ OpenMV Cam

any() bool

คืนค่า True หากมีอักขระรออยู่ ไม่เช่นนั้นคืนค่า False

close() None

เมธอดนี้ไม่ทำอะไร มีอยู่เพื่อให้ออบเจกต์ USB_VCP ทำงานเป็นไฟล์ได้

read(nbytes: int | None = None) bytes | None

อ่านสูงสุด nbytes จากอุปกรณ์อนุกรมและคืนค่าเป็นออบเจกต์ bytes หากไม่ได้ระบุ nbytes เมธอดจะอ่านไบต์ที่มีอยู่ทั้งหมดจากอุปกรณ์อนุกรม USB_VCP stream ทำงานในโหมดไม่บล็อกโดยปริยาย ดังนั้นหากไม่มีข้อมูลที่รออยู่ เมธอดนี้จะส่งคืนทันทีด้วยค่า None

readinto(buf: bytearray, maxlen: int | None = None) int | None

อ่านไบต์จากอุปกรณ์อนุกรมและเก็บลงใน buf ซึ่งควรเป็นออบเจกต์คล้ายบัฟเฟอร์ อ่านได้สูงสุด len(buf) ไบต์ หากระบุ maxlen จะอ่านได้สูงสุด min(maxlen, len(buf)) ไบต์

คืนค่าจำนวนไบต์ที่อ่านและเก็บใน buf หรือ None หากไม่มีข้อมูลรออยู่

readline() bytes | None

อ่านบรรทัดทั้งหมดจากอุปกรณ์อนุกรม

คืนค่าออบเจกต์ bytes ที่มีข้อมูล รวมถึงอักขระขึ้นบรรทัดใหม่ท้ายบรรทัด หรือ None หากไม่มีข้อมูลรออยู่

readlines() List[bytes]

อ่านข้อมูลให้ได้มากที่สุดจากอุปกรณ์อนุกรม โดยแบ่งออกเป็นบรรทัด

คืนค่ารายการของออบเจกต์ bytes แต่ละออบเจกต์คือหนึ่งบรรทัด แต่ละบรรทัดจะมีอักขระขึ้นบรรทัดใหม่รวมอยู่ด้วย

write(buf: bytes | bytearray | str) int

เขียนไบต์จาก buf ไปยังอุปกรณ์อนุกรม

คืนค่าจำนวนไบต์ที่เขียน

recv(data: int | bytearray, *, timeout: int = 5000) bytes | int

รับข้อมูลบนบัส:

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

  • timeout คือระยะหมดเวลาเป็นมิลลิวินาทีสำหรับรอการรับ

ค่าที่ส่งคืน: หาก data เป็นจำนวนเต็ม จะคืนค่าบัฟเฟอร์ใหม่ของไบต์ที่รับมา ไม่เช่นนั้นจะคืนค่าจำนวนไบต์ที่อ่านลงใน data

send(data: int | bytes | bytearray, *, timeout: int = 5000) int

ส่งข้อมูลผ่าน USB VCP:

  • data คือข้อมูลที่จะส่ง (จำนวนเต็มที่จะส่ง หรือออบเจกต์บัฟเฟอร์)

  • timeout คือระยะหมดเวลาเป็นมิลลิวินาทีสำหรับรอการส่ง

ค่าที่ส่งคืน: จำนวนไบต์ที่ส่ง

irq(handler: Callable[[USB_VCP], None] | None = None, trigger: int = IRQ_RX, hard: bool = False) None

ลงทะเบียน handler ให้ถูกเรียกเมื่อเกิดเหตุการณ์ที่ระบุโดย trigger ฟังก์ชัน handler ต้องรับอาร์กิวเมนต์เพียงหนึ่งตัว ซึ่งจะเป็นออบเจกต์ USB VCP ส่งค่า None เพื่อปิดใช้งาน callback

ค่าที่ใช้ได้สำหรับ trigger ได้แก่:

  • USB_VCP.IRQ_RX: มีข้อมูลใหม่พร้อมสำหรับการอ่านจากออบเจกต์ USB VCP

ค่าคงที่

RTS: int

แฟล็กควบคุมการไหลสำหรับ init() การเปิดใช้งาน RTS จะทำให้อุปกรณ์จำกัดการส่งข้อมูลของโฮสต์เมื่อบัฟเฟอร์อ่านเต็ม

CTS: int

แฟล็กควบคุมการไหลสำหรับ init() การเปิดใช้งาน CTS จะทำให้อุปกรณ์ปฏิบัติตามการควบคุมการไหลของโฮสต์ระหว่างการเขียน (บล็อกจนกว่าโฮสต์จะพร้อมรับ) สามารถ OR กับ RTS ได้

IRQ_RX: int

ทริกเกอร์ irq(): เกิดขึ้นเมื่อมีข้อมูลใหม่พร้อมสำหรับการอ่านจากออบเจกต์ USB VCP