คลาส SPIDisplay -- ไดรเวอร์จอแสดงผล SPI¶
คลาส SPIDisplay ขับเคลื่อนแผง TFT และ OLED ขนาดเล็กที่เชื่อมต่อผ่าน SPI -- ที่พบบ่อยที่สุดคือ SSD1351 128x160 RGB OLED บน OpenMV LCD Shield ไดรเวอร์เป็นเจ้าของบัส SPI และสาย GPIO chip-select / DC ภายใน ดังนั้นผู้เรียกใช้เพียงแค่กำหนดค่าขนาดแผง อัตราการรีเฟรช และแฟล็กทิศทางต่างๆ การเริ่มต้นเฉพาะแผง (ลำดับรีจิสเตอร์ การจัดเฟรมการเขียน RAM) จะถูกกำหนดผ่านอาร์กิวเมนต์คีย์เวิร์ด controller -- ส่งอินสแตนซ์ SSD1351 เพื่อขับเคลื่อน LCD Shield หรือนำคลาสควบคุมของคุณเองมาใช้กับแผงอื่นๆ
เฟรมจะแสดงโดยการเรียก write() พร้อมกับ image.Image ไดรเวอร์จะแปลงต้นฉบับเป็น RGB565 และใช้การปรับขนาด ROI พาเลตต์ และการแปลงทิศทางภายใน ดังนั้นผู้เรียกใช้ไม่จำเป็นต้องปรับขนาดภาพล่วงหน้า ความสว่างของแบ็คไลท์สามารถปล่อยให้เป็น GPIO เปิด/ปิดเรียบง่าย (ค่าเริ่มต้น) หรือขับเคลื่อนด้วย DACBacklight / PWMBacklight โดยส่งค่าเป็นอาร์กิวเมนต์คีย์เวิร์ด backlight
ตัวอย่าง -- ส่งภาพจากกล้องไปยัง SSD1351 OLED ของ OpenMV LCD Shield:
import csi
import display
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize((128, 160)) # matches the SSD1351 panel
lcd = display.SPIDisplay(controller=display.SSD1351())
while True:
lcd.write(csi0.snapshot())
ตัวสร้าง¶
- class display.SPIDisplay(width: int = 128, height: int = 160, refresh: int = 60, bgr: bool = False, byte_swap: bool = False, hmirror: bool = True, vflip: bool = True, triple_buffer: bool | None = None, *, controller: object | None = None, backlight: object | None = None)¶
widthความกว้างของ SPI LCD เป็นพิกเซล (1..32767)heightความสูงของ SPI LCD เป็นพิกเซล (1..32767)refreshอัตราการรีเฟรช LCD เป็นเฮิร์ตซ์ (1..120) ควบคุมอัตราสัญญาณนาฬิกา SPIbgrตั้งค่าเป็น True เพื่อสลับช่องสีแดงและสีน้ำเงินbyte_swapตั้งค่าเป็น True เพื่อสลับไบต์พิกเซล RGB565 ที่ส่งไปยัง LCDhmirrorตั้งค่าเป็น True เพื่อพลิกเอาต์พุตจอแสดงผลในแนวนอนvflipตั้งค่าเป็น True เพื่อพลิกเอาต์พุตจอแสดงผลในแนวตั้งtriple_bufferถ้าเป็น True จะทำให้การอัปเดตหน้าจอไม่บล็อก แต่แลกด้วยการใช้ RAM 3 เท่าของขนาดจอแสดงผล ค่าเริ่มต้นขึ้นอยู่กับบอร์ด (เปิดใช้งานสำหรับบอร์ดที่มี SDRAM)controllerคีย์เวิร์ดเท่านั้น ส่งอินสแตนซ์คลาสชิปควบคุมเพื่อเริ่มต้นพร้อมกับจอแสดงผล เมื่อระบุ จะเรียกใช้เมธอดinit,display_on,display_offและram_write(ถ้ามี) ของตัวควบคุมแทนคำสั่งที่มีอยู่ภายในbacklightคีย์เวิร์ดเท่านั้น ส่งโมดูลควบคุมแบ็คไลท์ที่ต้องการใช้ ตามค่าเริ่มต้น แบ็คไลท์จะถูกควบคุมผ่านพิน GPIO- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
แสดง
imageโดยมีมุมซ้ายบนที่(x, y)สามารถส่งสตริงเส้นทางแทนภาพเพื่อโหลดและวาดในขั้นตอนเดียวx_scaleตัวคูณสเกลแนวแกน x ค่าลบจะพลิกในแนวนอน หากy_scaleถูกละไว้ จะตามค่าx_scaleเพื่อรักษาอัตราส่วนภาพy_scaleตัวคูณสเกลแนวแกน y ค่าลบจะพลิกในแนวตั้ง (ต้องการtriple_buffer=True) หากx_scaleถูกละไว้ จะตามค่าy_scaleroiสี่เหลี่ยมบริเวณที่สนใจ(x, y, w, h)ของภาพต้นฉบับที่จะวาดrgb_channelช่อง RGB ที่จะดึงออกจากภาพต้นฉบับ RGB565 (0=R, 1=G, 2=B, -1=ทั้งหมด) ช่วง: -1..2alphaความทึบแสงของภาพ 0 คือโปร่งใสสมบูรณ์ (ดำ) 255 คือทึบแสง ช่วง: 0..255color_paletteenum พาเลตต์สี (เช่นimage.PALETTE_RAINBOW) หรือภาพ RGB565 ขนาด 256 พิกเซลที่ใช้เป็นตารางค้นหาสีบนค่าระดับสีเทาของต้นฉบับ ใช้งานหลังจากการดึงด้วยrgb_channelalpha_paletteภาพ grayscale ขนาด 256 พิกเซลที่ใช้เป็นตารางค้นหาค่า alpha ต่อพิกเซลในการปรับalphaตามค่าระดับสีเทาของต้นฉบับhintการ OR แบบลอจิคัลของแฟล็ก:image.AREA: ใช้การปรับขนาดแบบ area เมื่อลดขนาดimage.BILINEAR: ใช้การปรับขนาดแบบ bilinearimage.BICUBIC: ใช้การปรับขนาดแบบ bicubicimage.CENTER: จัดกึ่งกลางภาพบนจอแสดงผล (หลังจากการปรับขนาด)image.HMIRROR: พลิกภาพในแนวนอนimage.VFLIP: พลิกภาพในแนวตั้งimage.TRANSPOSE: สับเปลี่ยนภาพ (สลับ x/y)image.EXTRACT_RGB_CHANNEL_FIRST: ใช้การดึงช่องสีด้วยrgb_channelก่อนการปรับขนาดimage.APPLY_COLOR_PALETTE_FIRST: ใช้color_paletteก่อนการปรับขนาดimage.SCALE_ASPECT_KEEP: ปรับขนาดให้พอดีภายในจอแสดงผลimage.SCALE_ASPECT_EXPAND: ปรับขนาดให้เต็มจอแสดงผล (ตัดส่วนเกิน)image.SCALE_ASPECT_IGNORE: ปรับขนาดให้เต็มจอแสดงผล (ยืดภาพ)image.ROTATE_90: หมุน 90 องศา (VFLIP | TRANSPOSE)image.ROTATE_180: หมุน 180 องศา (HMIRROR | VFLIP)image.ROTATE_270: หมุน 270 องศา (HMIRROR | TRANSPOSE)
- clear(display_off: bool = False) None¶
ล้างหน้าจอ LCD เป็นสีดำ
display_offถ้าเป็น True จะปิดลอจิกของจอแสดงผลแทนที่จะล้างบัฟเฟอร์เฟรม ควรปิดแบ็คไลท์ด้วยหลังจากนั้น
- backlight(value: int | None = None) int | None¶
เมื่อส่ง
valueจะกำหนดความเข้มของแบ็คไลท์ (0=ปิด..100=เต็มที่) เมื่อไม่มีอาร์กิวเมนต์ จะคืนค่าแบ็คไลท์ปัจจุบันหากไม่มีการส่งตัวควบคุม
DACBacklightหรือPWMBacklightตอนสร้าง แบ็คไลท์จะถูกขับเคลื่อนเป็นพิน GPIO และเปลี่ยนแปลงได้เพียงจาก 0 (ปิด) เป็นค่าไม่เป็นศูนย์ (เปิด)
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
ส่ง
cmdไปยังจอแสดงผลผ่านบัส SPI โดยอาจตามด้วยargs(ไบต์จำนวนเต็มหรือบัฟเฟอร์ไบต์)dcsเลือกการจัดเฟรม DCS เมื่อตัวควบคุมรองรับ