kelas DSIDisplay -- Driver Display DSI¶
Kelas DSIDisplay mengendalikan panel MIPI-DSI melalui pengontrol host DSI STM32. MIPI DSI adalah protokol display serial terpaketkan yang menggunakan satu lane clock ditambah satu atau lebih lane data sebagai pasangan diferensial, yang memungkinkan pengiriman konten resolusi tinggi (hingga 1080p) melalui kabel yang jauh lebih sedikit dibandingkan RGB paralel 24-bit. Piksel mengalir langsung dari buffer bingkai berbasis SDRAM pada laju refresh yang dipilih, sehingga CPU tidak terlibat dalam proses refresh.
Resolusi panel dipilih melalui framesize menggunakan konstanta di modul display (QVGA, VGA, HD, FHD, ...). Urutan inisialisasi khusus panel disisipkan melalui argumen kata kunci controller -- ST7701 mencakup panel DSI 480x800 berbasis ST7701 yang umum. Perintah DCS dapat dikirimkan secara out-of-band melalui bus_write() / bus_read(). Kecerahan lampu latar dikendalikan sebagai GPIO sederhana secara default, atau oleh DACBacklight / PWMBacklight jika diberikan sebagai backlight.
Bingkai ditampilkan dengan memanggil write() dengan sebuah image.Image. Driver menangani konversi RGB, penskalaan, ROI, transformasi palet dan orientasi secara internal.
Contoh -- cerminkan kamera ke panel DSI 480x800 berbasis 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)
Konstruktor¶
- 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)¶
framesizeSalah satu resolusi standar yang didukung (mis.display.FWVGA).refreshMengatur laju refresh layar dalam hertz. Rentang valid adalah 30 hingga 120. Ini mengontrol jam LCD DSI.display_onMengaktifkan display.triple_bufferMengalokasikan tiga buffer bingkai untuk memungkinkan pembaruan display tanpa robekan. Diperlukan untuk pembalikan vertikal dalamwrite().portraitTukar lebar dan tinggi framesize.channelSaluran MIPI DSI virtual yang digunakan untuk berkomunikasi dengan display.controllerBerikan kelas chip pengontrol di sini untuk menginisialisasinya bersama dengan display. Mis.display.ST7701()yang merupakan pengontrol display standar untuk display MIPI DSI.backlightTentukan modul pengontrol lampu latar yang akan digunakan. Secara default lampu latar akan dikontrol melalui pin GPIO.- deinit() None¶
Melepaskan pin I/O dan RAM yang digunakan oleh kelas. Ini dipanggil secara otomatis saat penghapusan.
- 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¶
Menampilkan sebuah
imageyang sudut kiri atasnya dimulai dari lokasix,y.imagedapat berupa string path sebagai ganti objek citra untuk memuat citra secara otomatis dari disk. Mis.write("test.jpg").x_scalemengontrol seberapa banyak citra yang ditampilkan diskalakan dalam arah x (float). Jika nilai ini negatif, citra akan dibalik secara horizontal. Jikay_scaletidak ditentukan maka akan mengikutix_scaleuntuk mempertahankan rasio aspek.y_scalemengontrol seberapa banyak citra yang ditampilkan diskalakan dalam arah y (float). Jika nilai ini negatif, citra akan dibalik secara vertikal. Pembalikan vertikal membutuhkantriple_buffer=True. Jikax_scaletidak ditentukan maka akan mengikutiy_scale.roiadalah tuple persegi panjang wilayah yang diminati (x, y, w, h) dari citra yang akan ditampilkan.rgb_channeladalah saluran RGB (0=R, 1=G, 2=B) yang diekstrak dari citra RGB565 dan dirender pada display dalam skala abu-abu.-1menonaktifkan ekstraksi. Rentang valid adalah -1 hingga 2.alphamengontrol seberapa buram citranya. 255 menampilkan citra yang buram, nilai yang lebih rendah memperkirakan warna hitam, dan 0 menghasilkan citra hitam sepenuhnya. Rentang valid adalah 0 hingga 255.color_palettedapat berupa enum palet warna atau citra RGB565 256 piksel yang digunakan sebagai tabel pencarian warna pada nilai skala abu-abu citra input. Diterapkan setelah ekstraksirgb_channel.alpha_palettedapat berupa citra skala abu-abu 256 piksel yang digunakan sebagai tabel pencarian alpha yang memodulasialphaper nilai skala abu-abu piksel input. Diterapkan setelah ekstraksirgb_channel.hintadalah OR logis dari flag-flag:image.AREA: Gunakan penskalaan area saat memperkecil versus default nearest neighbor.image.BILINEAR: Gunakan penskalaan bilinear versus default penskalaan nearest neighbor.image.BICUBIC: Gunakan penskalaan bicubic versus default penskalaan nearest neighbor.image.CENTER: Pusatkan citra yang digambar pada display. Ini diterapkan setelah penskalaan.image.HMIRROR: Cerminkan citra secara horizontal.image.VFLIP: Balik citra secara vertikal.image.TRANSPOSE: Transpose citra (tukar x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Lakukan ekstraksi rgb_channel sebelum penskalaan.image.APPLY_COLOR_PALETTE_FIRST: Terapkan palet warna sebelum penskalaan.image.SCALE_ASPECT_KEEP: Skalakan citra yang digambar agar muat di dalam display.image.SCALE_ASPECT_EXPAND: Skalakan citra yang digambar untuk mengisi display (mengakibatkan pemotongan).image.SCALE_ASPECT_IGNORE: Skalakan citra yang digambar untuk mengisi display (mengakibatkan peregangan).image.ROTATE_90: Putar citra 90 derajat (ini hanyalah VFLIP | TRANSPOSE).image.ROTATE_180: Putar citra 180 derajat (ini hanyalah HMIRROR | VFLIP).image.ROTATE_270: Putar citra 270 derajat (ini hanyalah HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Membersihkan buffer bingkai LCD ke warna hitam.
display_offjika True mematikan logika display alih-alih membersihkan buffer bingkai.
- backlight(value: int | None = None) int¶
Mengatur nilai redupan lampu latar LCD, 0 (mati) hingga 100 (hidup). Berikan tanpa argumen untuk mendapatkan nilai lampu latar saat ini.
Kecuali pengontrol
DACBacklightatauPWMBacklightdiberikan ke konstruktor, lampu latar dikontrol sebagai pin GPIO dan hanya akan berpindah dari 0 (mati) ke non-nol (hidup).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Kirim perintah DSI
cmdke display.argsadalah integer opsional atau buffer yang berisi parameter perintah.dcsjika True mengirimkan perintah sebagai paket DCS (Display Command Set).