class SPIDisplay – SPI 디스플레이 드라이버¶
SPIDisplay 클래스는 소형 SPI 연결 TFT 및 OLED 패널을 구동하며, 가장 흔하게는 OpenMV LCD Shield의 SSD1351 128x160 RGB OLED를 구동합니다. 드라이버는 SPI 버스와 GPIO 칩 선택 / DC 라인을 내부적으로 소유하므로, 호출자는 패널 기하 구조, 새로 고침 빈도 및 방향 플래그만 구성하면 됩니다. 패널별 초기화(레지스터 시퀀스, RAM 쓰기 프레이밍)는 controller 키워드 인수를 통해 제공됩니다. LCD Shield를 구동하려면 SSD1351 인스턴스를 전달하거나, 다른 패널을 위해 자체 컨트롤러 클래스를 구현하세요.
프레임은 image.Image 와 함께 write() 를 호출하여 표시됩니다. 드라이버는 소스를 RGB565로 변환하고 스케일링, ROI, 팔레트 및 방향 변환을 내부적으로 적용하므로, 호출자가 이미지 크기를 미리 맞출 필요가 없습니다. 백라이트 밝기는 단순한 켜짐/꺼짐 GPIO(기본값)로 둘 수도 있고, backlight 키워드 인수로 DACBacklight / PWMBacklight 중 하나를 전달하여 구동할 수도 있습니다.
예시 – 카메라를 OpenMV LCD Shield의 SSD1351 OLED에 미러링합니다:
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)¶
widthSPI LCD 너비(픽셀 단위, 1..32767).heightSPI LCD 높이(픽셀 단위, 1..32767).refreshLCD 새로 고침 빈도(헤르츠 단위, 1..120). SPI 클록 속도를 제어합니다.bgr빨강과 파랑 채널을 서로 바꾸려면 True로 설정합니다.byte_swapLCD로 보내는 RGB565 픽셀 바이트를 서로 바꾸려면 True로 설정합니다.hmirror디스플레이 출력을 가로로 미러링하려면 True로 설정합니다.vflip디스플레이 출력을 세로로 뒤집으려면 True로 설정합니다.triple_bufferTrue이면 RAM에서 디스플레이 크기의 3배를 소비하는 대신 화면 업데이트를 논블로킹으로 만듭니다. 기본값은 보드에 따라 다릅니다(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¶
왼쪽 위 모서리가
(x, y)에 위치하는image를 표시합니다. 이미지 대신 경로 문자열을 전달하여 한 단계로 불러와 그릴 수 있습니다.x_scalex축 스케일 계수입니다. 음수 값은 가로로 뒤집습니다.y_scale이 생략되면 종횡비를 유지하기 위해x_scale을 따릅니다.y_scaley축 스케일 계수입니다. 음수 값은 세로로 뒤집습니다(triple_buffer=True필요).x_scale이 생략되면y_scale을 따릅니다.roi그릴 소스 이미지의 관심 영역(ROI) 사각형(x, y, w, h)입니다.rgb_channelRGB565 소스 이미지에서 추출할 RGB 채널입니다(0=R, 1=G, 2=B, -1=전체). 범위: -1..2.alpha이미지의 불투명도입니다. 0은 완전히 투명(검은색), 255는 불투명입니다. 범위: 0..255.color_palette색상 팔레트 열거형(예:image.PALETTE_RAINBOW) 또는 소스의 그레이스케일 값에 대한 색상 조회 테이블로 사용되는 256픽셀 RGB565 이미지입니다.rgb_channel추출 후에 적용됩니다.alpha_palette소스 그레이스케일 값을 기준으로alpha를 변조하는 픽셀별 알파 조회 테이블로 사용되는 256픽셀 그레이스케일 이미지입니다.hint다음 플래그들의 논리 OR입니다: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¶
LCD 화면을 검은색으로 지웁니다.
display_offTrue이면 프레임버퍼를 지우는 대신 디스플레이 로직을 끕니다. 그 후 백라이트도 비활성화해야 합니다.
- backlight(value: int | None = None) int | None¶
value가 있으면 백라이트 강도를 설정합니다(0=꺼짐..100=최대). 인수가 없으면 현재 백라이트 값을 반환합니다.DACBacklight또는PWMBacklight컨트롤러가 생성 시 전달되지 않은 경우, 백라이트는 GPIO 핀으로 구동되며 0(꺼짐)에서 0이 아닌 값(켜짐)까지만 이동합니다.
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
SPI 버스를 통해
cmd를 디스플레이로 전송하며, 선택적으로 그 뒤에args(int 바이트 또는 바이트 버퍼)를 전송합니다.dcs는 컨트롤러가 지원할 때 DCS 프레이밍을 선택합니다.