로그인회원가입

ESP32와 원형 LCD(GC9A01)를 활용한 실감 나는 로봇 눈 만들기 (feat. MicroPython)

1.28 인치 7PIN 8PIN SPI TFT LCD 모듈 GC9A01 

프로젝트 개요: 왜 원형 LCD인가?

일반적인 사각형 디스플레이와 달리 GC9A01 원형 TFT LCD는 로봇의 눈을 표현하기에 최적화된 형태를 가집니다. 하지만 두 개의 고해상도(240×240) 화면을 동시에, 그것도 자연스럽게 구동하는 데는 여러 기술적 난관이 있었습니다.

🛠️ 주요 문제 해결 및 기술적 포인트

1. SPI 통신 속도 최적화 (60MHz의 발견)

초기에는 통신 안정성을 위해 낮은 속도를 고려했으나, 고해상도 이미지를 실시간으로 뿌리기엔 역부족이었습니다.

  • 해결: SPI 클럭 속도를 60MHz로 설정하여 데이터 전송 병목 현상을 해결했습니다. 신호가 더 날카롭고 정확하게 전달되면서 화면 깨짐 없이 부드러운 프레임 전환이 가능해졌습니다.

2. 하드웨어 리셋(Reset) 핀의 분리

두 디스플레이의 리셋 핀을 하나로 묶었을 때 발생하는 초기화 오류를 해결했습니다.

  • 해결: 각 LCD에 독립적인 리셋 핀을 할당하고, 순차적으로 tft.reset()을 수행하여 컨트롤러가 확실하게 명령을 인식하도록 개선했습니다.

3. 노이즈 없는 깨끗한 부팅 (Zero-Noise Start)

전원을 넣을 때 비디오 램(VRAM)의 무작위 데이터 때문에 나타나는 ‘지직거리는 노이즈’를 잡았습니다.

  • 해결: 하드웨어 리셋 직후, 눈 이미지를 그리기 전에 tft.fill(0) 명령으로 화면을 검은색으로 즉시 초기화하는 로직을 추가하여 고급스러운 부팅 시퀀스를 완성했습니다.

4. 시차 없는 동기화: 인터리빙(Interleaving) 기법

왼쪽 눈을 다 그리고 오른쪽 눈을 그리면 발생하는 미세한 시차(약 0.1~0.2초)는 로봇의 생동감을 떨어뜨립니다.

  • 해결: 전체 이미지를 한 번에 보내지 않고, 20줄씩 번갈아 가며(Interleaving) 양쪽 눈에 쏘는 방식을 도입했습니다. 이를 통해 우리 눈에는 양쪽 눈이 동시에 움직이는 것처럼 보이는 완벽한 동기화를 구현했습니다.

5. 코믹한 감정 표현 (윙크 및 사시 동작)

단순한 시선 이동을 넘어 로봇에게 성격을 부여했습니다.

  • 기능: 한쪽 눈의 통신만 열어 수행하는 윙크, 그리고 좌우 이미지를 교차하여 시선을 모으거나 벌리는 코믹 사시(Eye Gag) 패턴을 랜덤으로 배치해 생동감을 더했습니다.

💡 연결 시 주의사항 (Troubleshooting Tips)

  1. 전력 공급: ESP32의 3.3V 출력은 디스플레이 두 개를 감당하기에 충분하지만, 점퍼 와이어가 너무 길거나 헐거우면 전압 강하로 인해 화면이 떨릴 수 있습니다. 가급적 짧고 굵은 선을 사용하세요.
  2. 공유 핀 vs 독립 핀: * SCL, SDA, DC는 두 디스플레이가 사이좋게 나눠 쓰는 공유 핀입니다.
    • CS와 RES는 각 눈을 따로 제어하기 위한 독립 핀입니다. (이걸 합치면 어제 겪으셨던 초기화 지옥이 다시 찾아옵니다!)
  3. BL (Backlight) 핀: 만약 8핀 모듈을 사용 중이시라면 BL 핀을 3.3V에 직접 연결하거나, 남는 GPIO에 연결해 밝기 조절(PWM) 용도로 쓰실 수 있습니다. (7핀 모듈은 내부적으로 VCC에 묶여 있어 생략 가능합니다.)

“SPI 통신의 효율을 극대화하기 위해 클럭과 데이터 라인은 공유하되, 각 디스플레이의 개별 제어를 위해 CS와 Reset 라인을 분리하여 하드웨어적 안정성을 확보했습니다.”

라이브러리 gc9a01.py 다운로드

Python gc10.py

코멘트

“ESP32와 원형 LCD(GC9A01)를 활용한 실감 나는 로봇 눈 만들기 (feat. MicroPython)”에 대한 댓글 1개

  1. km kim

    [구매정보] 블로그에서 사용한 부품 구매정보입니다.
    아래 링크를 통해 구매 시 소정의 수수료를 제공받으며, 채널 운영에 큰 도움이 됩니다.

답글 남기기