клас DSIDisplay – Драйвер DSI-дисплея¶
Клас DSIDisplay керує панелями MIPI-DSI через хост-контролер DSI STM32. MIPI DSI — це пакетний послідовний протокол відображення, який використовує один тактовий лейн і один або більше інформаційних лейнів як диференційні пари, що дозволяє передавати контент високої роздільної здатності (до 1080p) значно меншою кількістю проводів, ніж 24-бітний паралельний RGB. Пікселі потокуються безпосередньо з кадрового буфера на основі SDRAM з обраною частотою оновлення, тому процесор не бере участі в оновленні.
Роздільна здатність панелі вибирається через framesize за допомогою констант у модулі display (QVGA, VGA, HD, FHD, …). Специфічні для панелі послідовності ініціалізації підключаються через аргумент ключового слова controller — ST7701 охоплює звичайні панелі DSI 480x800 на основі ST7701. Команди DCS можна надсилати поза діапазоном через bus_write() / bus_read(). Яскравість підсвічування за замовчуванням керується як простий GPIO, або через DACBacklight / PWMBacklight, якщо передано як backlight.
Кадри відображаються шляхом виклику write() з image.Image. Драйвер внутрішньо обробляє перетворення RGB, масштабування, ROI, палітру та трансформації орієнтації.
Приклад — відображення зображення з камери на панелі DSI 480x800 на основі ST7701:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.DSIDisplay(framesize=display.TFWVGA,
controller=display.ST7701())
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
Конструктори¶
- class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)¶
framesizeодна зі стандартних підтримуваних роздільних здатностей (наприклад,display.FWVGA).refreshвстановлює частоту оновлення екрана в герцах. Допустимий діапазон — від 30 до 120. Це керує тактовою частотою DSI LCD.display_onвмикає дисплей.triple_bufferвиділяє три кадрових буфери для відображення без розривів. Необхідно для вертикального перевертання уwrite().portraitміняє місцями ширину та висоту розміру кадру.channelвіртуальний канал MIPI DSI для зв’язку з дисплеєм.controllerпередайте сюди клас мікросхеми контролера для ініціалізації разом із дисплеєм. Наприклад,display.ST7701()— стандартний контролер дисплея для MIPI DSI-дисплеїв.backlightвкажіть модуль контролера підсвічування для використання. За замовчуванням підсвічування керується через вивід GPIO.- deinit() None¶
Звільняє виводи вводу/виводу та RAM, що використовуються класом. Викликається автоматично під час знищення.
- 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: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
Відображає
image, верхній лівий кут якого починається в позиціїx,y.imageможе бути рядком шляху замість об’єкта зображення для автоматичного завантаження зображення з диска. Наприклад,write("test.jpg").x_scaleвизначає, наскільки зображення, що відображається, масштабується у напрямку x (float). Якщо це значення від’ємне, зображення буде відображено горизонтально. Якщоy_scaleне вказано, воно відповідатимеx_scaleдля збереження пропорцій.y_scaleвизначає, наскільки зображення, що відображається, масштабується у напрямку y (float). Якщо це значення від’ємне, зображення буде перевернуто вертикально. Вертикальне перевертання вимагаєtriple_buffer=True. Якщоx_scaleне вказано, воно відповідатимеy_scale.roi— це кортеж прямокутника області інтересу (x, y, w, h) зображення для відображення.rgb_channel— це канал RGB (0=R, 1=G, 2=B) для вилучення із зображення RGB565 та відображення на дисплеї у відтінках сірого.-1вимикає вилучення. Допустимий діапазон — від -1 до 2.alphaвизначає непрозорість зображення. 255 відображає непрозоре зображення, менші значення змішують до чорного, а 0 дає повністю чорне зображення. Допустимий діапазон — від 0 до 255.color_paletteможе бути перерахуванням палітри кольорів або зображенням RGB565 розміром 256 пікселів для використання як таблиці підстановки кольорів на основі значень відтінків сірого вхідного зображення. Застосовується після вилученняrgb_channel.alpha_paletteможе бути зображенням у відтінках сірого розміром 256 пікселів, що використовується як таблиця підстановки альфа-значень, яка модулюєalphaдля кожного вхідного пікселя за значенням відтінку сірого. Застосовується після вилученняrgb_channel.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: Застосовує палітру кольорів перед масштабуванням.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¶
Встановлює значення затемнення підсвічування LCD від 0 (вимкнено) до 100 (увімкнено). Передайте без аргументів, щоб отримати поточне значення підсвічування.
Якщо до конструктора не передано контролер
DACBacklightабоPWMBacklight, підсвічування керується як вивід GPIO і переходитиме лише від 0 (вимкнено) до ненульового (увімкнено).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Надсилає команду DSI
cmdна дисплей.args— необов’язкове ціле число або буфер, що містить параметри команди.dcsякщо True, надсилає команду як пакет DCS (Display Command Set).