class DSIDisplay -- Trình điều khiển màn hình DSI¶
Lớp DSIDisplay điều khiển các tấm nền MIPI-DSI thông qua bộ điều khiển DSI host STM32. MIPI DSI là giao thức hiển thị nối tiếp dạng gói sử dụng một làn xung nhịp cùng một hoặc nhiều làn dữ liệu dạng cặp vi sai, cho phép truyền nội dung có độ phân giải cao (lên đến 1080p) qua số dây ít hơn nhiều so với RGB song song 24-bit. Các điểm ảnh được truyền trực tiếp từ bộ đệm khung hình được hỗ trợ bởi SDRAM với tốc độ làm mới đã chọn, do đó CPU không tham gia vào quá trình làm mới.
Độ phân giải tấm nền được chọn thông qua framesize sử dụng các hằng số trong module display (QVGA, VGA, HD, FHD, ...). Trình tự khởi tạo dành riêng cho tấm nền được cắm vào thông qua đối số từ khóa controller -- ST7701 hỗ trợ các tấm nền DSI 480x800 thông dụng dựa trên ST7701. Các lệnh DCS có thể được phát ngoài băng tần qua bus_write() / bus_read(). Độ sáng đèn nền được điều khiển bằng GPIO đơn giản theo mặc định, hoặc bằng DACBacklight / PWMBacklight nếu được truyền vào làm backlight.
Các khung hình được trình bày bằng cách gọi write() với image.Image. Trình điều khiển xử lý chuyển đổi RGB, chia tỷ lệ, ROI, bảng màu và các phép biến đổi hướng nội bộ.
Ví dụ -- phản chiếu camera lên tấm nền DSI 480x800 dựa trên 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)
Hàm khởi tạo¶
- 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)¶
framesizeMột trong các độ phân giải tiêu chuẩn được hỗ trợ (ví dụ:display.FWVGA).refreshĐặt tốc độ làm mới màn hình tính bằng hertz. Phạm vi hợp lệ là 30 đến 120. Điều này điều khiển xung nhịp LCD DSI.display_onBật màn hình.triple_bufferCấp phát ba bộ đệm khung hình để cho phép cập nhật màn hình không bị xé. Bắt buộc khi lật dọc trongwrite().portraitHoán đổi chiều rộng và chiều cao của framesize.channelKênh MIPI DSI ảo dùng để giao tiếp với màn hình.controllerTruyền lớp chip bộ điều khiển vào đây để khởi tạo cùng với màn hình. Ví dụ:display.ST7701()là bộ điều khiển màn hình tiêu chuẩn cho màn hình MIPI DSI.backlightChỉ định module bộ điều khiển đèn nền cần sử dụng. Theo mặc định, đèn nền sẽ được điều khiển qua chân (pin) GPIO.- deinit() None¶
Giải phóng các chân (pin) I/O và RAM được sử dụng bởi lớp. Được gọi tự động khi hủy đối tượ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: 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 bắt đầu tại vị tríx,y.imagecó thể là chuỗi đường dẫn thay vì đối tượng ảnh để tự động tải ảnh từ đĩa. Ví dụ:write("test.jpg").x_scaleđiều khiển mức độ ảnh được hiển thị được phóng to trong hướng x (số thực). Nếu giá trị này âm, ảnh sẽ được lật ngang. Nếuy_scalekhông được chỉ định thì nó sẽ khớp vớix_scaleđể duy trì tỷ lệ khung hình.y_scaleđiều khiển mức độ ảnh được hiển thị được phóng to trong hướng y (số thực). Nếu giá trị này âm, ảnh sẽ được lật dọc. Lật dọc yêu cầutriple_buffer=True. Nếux_scalekhông được chỉ định thì nó sẽ khớp vớiy_scale.roilà tuple hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của ảnh cần hiển thị.rgb_channellà kênh RGB (0=R, 1=G, 2=B) để trích xuất từ ảnh RGB565 và hiển thị trên màn hình ở thang xám.-1vô hiệu hóa trích xuất. Phạm vi hợp lệ là -1 đến 2.alphađiều khiển độ đục của ảnh. 255 hiển thị ảnh mờ đục, giá trị thấp hơn trộn về phía màu đen, và 0 tạo ra ảnh hoàn toàn màu đen. Phạm vi hợp lệ là 0 đến 255.color_palettecó thể là enum bảng màu hoặc ảnh RGB565 256 điểm ảnh để sử dụng làm bảng tra cứu màu sắc trên giá trị thang xám của ảnh đầu vào. Được áp dụng sau khi trích xuấtrgb_channel.alpha_palettecó thể là ảnh thang xám 256 điểm ảnh được sử dụng làm bảng tra cứu alpha điều chỉnhalphatheo giá trị thang xám của từng điểm ảnh đầu vào. Được áp dụng sau khi trích xuấtrgb_channel.hintlà phép OR logic của các cờ:image.AREA: Sử dụng chia tỷ lệ theo vùng khi thu nhỏ thay vì mặc định là lân cận gần nhất.image.BILINEAR: Sử dụng chia tỷ lệ song tuyến thay vì mặc định là chia tỷ lệ lân cận gần nhất.image.BICUBIC: Sử dụng chia tỷ lệ song khối thay vì mặc định là chia tỷ lệ lân cận gần nhất.image.CENTER: Căn giữa ảnh đang được vẽ trên màn hình. Điều này được áp dụng sau khi chia tỷ lệ.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: Thực hiện trích xuất rgb_channel trước khi chia tỷ lệ.image.APPLY_COLOR_PALETTE_FIRST: Áp dụng bảng màu trước khi chia tỷ lệ.image.SCALE_ASPECT_KEEP: Chia tỷ lệ ảnh đang được vẽ để vừa bên trong màn hình.image.SCALE_ASPECT_EXPAND: Chia tỷ lệ ảnh đang được vẽ để lấp đầy màn hình (dẫn đến cắt xén).image.SCALE_ASPECT_IGNORE: Chia tỷ lệ ảnh đang được vẽ để lấp đầy màn hình (dẫn đến kéo dãn).image.ROTATE_90: Xoay ảnh 90 độ (đây chỉ là VFLIP | TRANSPOSE).image.ROTATE_180: Xoay ảnh 180 độ (đây chỉ là HMIRROR | VFLIP).image.ROTATE_270: Xoay ảnh 270 độ (đây chỉ là HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Xóa bộ đệm khung hình LCD về màu đen.
display_offnếu True tắt logic màn hình thay vì xóa bộ đệm khung hình.
- backlight(value: int | None = None) int¶
Đặt giá trị giảm sáng đèn nền LCD từ 0 (tắt) đến 100 (bật). Không truyền đối số để lấy giá trị đèn nền hiện tại.
Trừ khi bộ điều khiển
DACBacklighthoặcPWMBacklightđược truyền vào hàm khởi tạo, đèn nền được điều khiển như chân (pin) GPIO và sẽ chỉ chuyển từ 0 (tắt) sang khác không (bật).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
Gửi lệnh DSI
cmdđến màn hình.argslà số nguyên hoặc bộ đệm tùy chọn chứa các tham số lệnh.dcsnếu True gửi lệnh dưới dạng gói DCS (Display Command Set).