class SPIDisplay – драйвер SPI-дисплея¶
Класс SPIDisplay управляет небольшими TFT- и OLED-панелями, подключаемыми по SPI – чаще всего SSD1351 128x160 RGB OLED на OpenMV LCD Shield. Драйвер внутренне владеет шиной SPI и линиями выбора кристалла (chip-select) / DC GPIO, поэтому вызывающему коду нужно лишь настроить геометрию панели, частоту обновления и любые флаги ориентации. Инициализация, специфичная для панели (последовательности регистров, кадрирование записи в ОЗУ), задаётся через именованный аргумент 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_channelRGB-канал для извлечения из исходного изображения 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, когда оно поддерживается контроллером.