клас SPIDisplay – SPI-драйвер дисплея¶
Клас SPIDisplay керує невеликими TFT і OLED панелями, підключеними через SPI – найчастіше SSD1351 128x160 RGB OLED на OpenMV LCD Shield. Драйвер внутрішньо керує SPI-шиною та лінією GPIO вибору мікросхеми / DC, тому користувачу потрібно налаштувати лише геометрію панелі, частоту оновлення та прапори орієнтації. Специфічна для панелі ініціалізація (послідовності регістрів, оформлення RAM-запису) надається через аргумент ключового слова controller – передайте екземпляр SSD1351 для керування LCD Shield, або реалізуйте власний клас контролера для інших панелей.
Кадри виводяться шляхом виклику write() з image.Image. Драйвер перетворює джерело в RGB565 і внутрішньо застосовує масштабування, ROI, палітру та перетворення орієнтації, тому попередньо змінювати розмір зображення не потрібно. Яскравість підсвічування може залишатися простим GPIO вмкн/вимк (за замовчуванням) або керуватися за допомогою DACBacklight / PWMBacklight, якщо один з них переданий як аргумент ключового слова backlight.
Приклад – відображення зображення з камери на OLED SSD1351 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 РК-дисплея в пікселях (1..32767).heightвисота SPI РК-дисплея в пікселях (1..32767).refreshчастота оновлення РК-дисплея в герцах (1..120). Керує швидкістю передачі SPI.bgrвстановіть значення True, щоб поміняти червоний та синій канали місцями.byte_swapвстановіть значення True, щоб переставляти байти пікселів RGB565, що надсилаються на РК-дисплей.hmirrorвстановіть значення True для горизонтального відзеркалення виведення дисплея.vflipвстановіть значення True для вертикального перевертання виведення дисплея.triple_bufferякщо True, оновлення екрана стають неблокуючими, але потребують оперативної пам’яті втричі більше, ніж розмір кадру дисплея. За замовчуванням залежить від плати (увімкнено для плат із 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_scale.roiпрямокутна область інтересу(x, y, w, h)вихідного зображення для відображення.rgb_channelканал RGB для вилучення з вихідного зображення RGB565 (0=R, 1=G, 2=B, -1=всі). Діапазон: -1..2.alphaнепрозорість зображення. 0 – повністю прозоре (чорне), 255 – непрозоре. Діапазон: 0..255.color_paletteперерахування палітри кольорів (наприклад,image.PALETTE_RAINBOW) або зображення RGB565 із 256 пікселів, яке використовується як таблиця відповідності кольорів для значень сірого джерела. Застосовується після вилученняrgb_channel.alpha_paletteзображення у відтінках сірого із 256 пікселів, яке використовується як таблиця відповідності прозорості для кожного пікселя, модулюючиalphaна основі значення сірого джерела.hintпобітове АБО наступних прапорів:image.AREA: Використовувати масштабування за площею при зменшенні.image.BILINEAR: Використовувати білінійне масштабування.image.BICUBIC: Використовувати бікубічне масштабування.image.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¶
Очищує екран РК-дисплея до чорного кольору.
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-оформлення, якщо контролер його підтримує.
- bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray¶
Відправляє
cmdчерез SPI-шину і зчитуєlenбайтів у відповідь, повертаючи їх якbytearray.argsза бажанням записується перед зчитуванням (цілочисельний байт або буфер байтів).dcsвибирає DCS-оформлення, якщо контролер його підтримує.