class SPIDisplay -- Trình điều khiển màn hình SPI

Lớp SPIDisplay điều khiển các màn hình TFT và OLED nhỏ kết nối qua SPI -- phổ biến nhất là SSD1351 128x160 RGB OLED trên OpenMV LCD Shield. Trình điều khiển sở hữu bus SPI và một đường GPIO chip-select / DC nội bộ, do đó người dùng chỉ cần cấu hình hình học màn hình, tốc độ làm mới và các cờ hướng. Khởi tạo riêng cho từng màn hình (chuỗi thanh ghi, đóng khung ghi RAM) được cung cấp qua đối số từ khóa controller -- truyền một thể hiện SSD1351 để điều khiển LCD Shield, hoặc tự triển khai lớp điều khiển riêng cho các màn hình khác.

Các khung hình được hiển thị bằng cách gọi write() với một image.Image. Trình điều khiển chuyển đổi nguồn sang RGB565 và áp dụng thu phóng, ROI, bảng màu và các biến đổi hướng nội bộ, do đó người dùng không cần thay đổi kích thước ảnh trước. Độ sáng đèn nền có thể để nguyên là GPIO bật/tắt đơn giản (mặc định) hoặc được điều khiển bởi DACBacklight / PWMBacklight bằng cách truyền vào làm đối số từ khóa backlight.

Ví dụ -- phản chiếu camera lên SSD1351 OLED của 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())

Hàm khởi tạo

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 Chiều rộng LCD SPI tính bằng điểm ảnh (1..32767).

height Chiều cao LCD SPI tính bằng điểm ảnh (1..32767).

refresh Tốc độ làm mới LCD tính bằng hertz (1..120). Điều khiển tốc độ xung nhịp SPI.

bgr đặt thành True để hoán đổi kênh đỏ và kênh xanh dương.

byte_swap đặt thành True để hoán đổi các byte điểm ảnh RGB565 gửi đến LCD.

hmirror đặt thành True để lật ngang đầu ra màn hình.

vflip đặt thành True để lật dọc đầu ra màn hình.

triple_buffer nếu True làm cho các cập nhật màn hình không bị chặn với chi phí là RAM gấp 3 lần kích thước hiển thị. Mặc định phụ thuộc vào bo mạch (bật trên các bo mạch có SDRAM).

controller chỉ từ khóa. Truyền một thể hiện lớp chip điều khiển để khởi tạo cùng với màn hình. Khi được cung cấp, các phương thức init, display_on, display_offram_write của bộ điều khiển (nếu có) sẽ được gọi thay vì các lệnh tích hợp.

backlight chỉ từ khóa. Truyền một module điều khiển đèn nền để sử dụng. Theo mặc định, đèn nền được điều khiển qua chân (pin) GPIO.

width() int

Trả về chiều rộng của màn hình.

height() int

Trả về chiều cao của màn hình.

refresh() int

Trả về tốc độ làm mới.

bgr() bool

Trả về giá trị cho biết kênh đỏ và kênh xanh dương có bị hoán đổi hay không.

byte_swap() bool

Trả về giá trị cho biết các byte điểm ảnh RGB565 có được gửi theo thứ tự ngược byte hay không.

triple_buffer() bool

Trả về giá trị cho biết bộ đệm ba có được bật hay không.

framesize() int

Trả về định danh framesize đã được cấu hình.

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

Hiển thị image với góc trên bên trái tại (x, y). Có thể truyền chuỗi đường dẫn thay cho ảnh để tải và vẽ trong một bước.

x_scale hệ số tỷ lệ trục x. Giá trị âm lật ngang. Nếu y_scale bị bỏ qua, nó theo x_scale để giữ tỷ lệ khung hình.

y_scale hệ số tỷ lệ trục y. Giá trị âm lật dọc (yêu cầu triple_buffer=True). Nếu x_scale bị bỏ qua, nó theo y_scale.

roi hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của ảnh nguồn cần vẽ.

rgb_channel kênh RGB để trích xuất từ ảnh nguồn RGB565 (0=R, 1=G, 2=B, -1=tất cả). Phạm vi: -1..2.

alpha độ mờ đục của ảnh. 0 là hoàn toàn trong suốt (đen), 255 là mờ đục. Phạm vi: 0..255.

color_palette enum bảng màu (ví dụ image.PALETTE_RAINBOW) hoặc ảnh RGB565 256 điểm ảnh được dùng làm bảng tra cứu màu sắc trên giá trị thang xám của nguồn. Áp dụng sau khi trích xuất rgb_channel.

alpha_palette ảnh thang xám 256 điểm ảnh được dùng làm bảng tra cứu alpha theo từng điểm ảnh điều chỉnh alpha dựa trên giá trị thang xám của nguồn.

hint phép OR logic của các cờ:

clear(display_off: bool = False) None

Xóa màn hình LCD về màu đen.

display_off nếu True, tắt logic hiển thị thay vì xóa bộ đệm khung hình. Đèn nền cũng nên được tắt sau đó.

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

Với value, đặt cường độ đèn nền (0=tắt..100=đầy đủ). Không có đối số, trả về giá trị đèn nền hiện tại.

Trừ khi một bộ điều khiển DACBacklight hoặc PWMBacklight được truyền vào khi khởi tạo, đèn nền được điều khiển như một chân (pin) GPIO và chỉ chuyển từ 0 (tắt) sang khác 0 (bật).

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None

Gửi cmd đến màn hình qua bus SPI, tùy chọn theo sau bởi args (một byte int hoặc bộ đệm byte). dcs chọn đóng khung DCS khi được hỗ trợ bởi bộ điều khiển.

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray

Gửi cmd qua bus SPI và đọc lại len byte, trả về chúng dưới dạng bytearray. args tùy chọn được ghi trước khi đọc (một byte int hoặc bộ đệm byte). dcs chọn đóng khung DCS khi được hỗ trợ bởi bộ điều khiển.

ioctl(cmd: int, arg: object | None = None) object

Phát lệnh ioctl cmd theo đặc thù bộ điều khiển với arg tùy chọn. Ném ra ValueError nếu màn hình bên dưới không hỗ trợ ioctl.