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)¶
widthChiều rộng LCD SPI tính bằng điểm ảnh (1..32767).heightChiều cao LCD SPI tính bằng điểm ảnh (1..32767).refreshTố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_buffernế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).controllerchỉ 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ứcinit,display_on,display_offvàram_writecủa bộ điều khiển (nếu có) sẽ được gọi thay vì các lệnh tích hợp.backlightchỉ 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.- 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.
- 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ị
imagevớ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_scalehệ số tỷ lệ trục x. Giá trị âm lật ngang. Nếuy_scalebị bỏ qua, nó theox_scaleđể giữ tỷ lệ khung hình.y_scalehệ số tỷ lệ trục y. Giá trị âm lật dọc (yêu cầutriple_buffer=True). Nếux_scalebị bỏ qua, nó theoy_scale.roihình chữ nhật vùng quan tâm (ROI)(x, y, w, h)của ảnh nguồn cần vẽ.rgb_channelkê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_paletteenum 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ấtrgb_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ỉnhalphadựa trên giá trị thang xám của nguồn.hintphép OR logic của các cờ:image.AREA: Sử dụng thu phóng diện tích khi thu nhỏ.image.BILINEAR: Sử dụng thu phóng song tuyến tính.image.BICUBIC: Sử dụng thu phóng song lập phương.image.CENTER: Căn giữa ảnh trên màn hình (sau khi thu phóng).image.HMIRROR: Lật ảnh theo chiều ngang.image.VFLIP: Lật ảnh theo chiều dọc.image.TRANSPOSE: Chuyển vị ảnh (hoán đổi x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Áp dụng trích xuấtrgb_channeltrước khi thu phóng.image.APPLY_COLOR_PALETTE_FIRST: Áp dụngcolor_palettetrước khi thu phóng.image.SCALE_ASPECT_KEEP: Thu phóng để vừa trong màn hình.image.SCALE_ASPECT_EXPAND: Thu phóng để lấp đầy màn hình (cắt xén).image.SCALE_ASPECT_IGNORE: Thu phóng để lấp đầy màn hình (kéo giãn).image.ROTATE_90: Xoay 90 độ (VFLIP | TRANSPOSE).image.ROTATE_180: Xoay 180 độ (HMIRROR | VFLIP).image.ROTATE_270: Xoay 270 độ (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Xóa màn hình LCD về màu đen.
display_offnế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
DACBacklighthoặcPWMBacklightđượ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ởiargs(một byte int hoặc bộ đệm byte).dcschọn đóng khung DCS khi được hỗ trợ bởi bộ điều khiển.