POSA_LEAKSMS/raspberry_pi_zero2w_display/README.md
cw2007 42a6ee4bb0 feat(display): Zero 2 W ST7789 상태 디스플레이 노드
Pi Zero 2 W + ST7789 패널에 노드 상태(누수/온습도/미세먼지·오프라인·정체)를 상시 표시하는
디스플레이 노드 신설. 배포 전 렌더 검증 원칙에 따라 합성 최악 프레임 11종을 패널 실해상도로
render_preview/ 에 PNG 로 선렌더.

- st7789_driver.py · display_dashboard.py · render_preview.py(합성 프레임 생성)
- install.sh · vendor.sh · systemd/display-dashboard.service · 배선(WIRING)·연결테스트
- render_preview/01~11: 요약/통합/메트릭/오프라인/stale/legacy-무PM 최악 케이스
2026-07-19 10:47:00 +09:00

2.1 KiB
Raw Permalink Blame History

미니 상태 표시기 — Pi Zero 2 W + ST7789V (GMT020-02 2.0" 240×320)

관제 서버의 요약 상태를 2인치 IPS 화면에 상시 표시하는 글랜스 장치. 서버 api/status_summary.php 를 30초 폴링(읽기 전용, X-Status-Key HMAC 인증), 페이지 자동 순환: 시스템 요약 → 센서별(누수/온습도) 상세. 배경색 = 시스템 상태(정상 녹색 / 온습도 경보 주황 / 누수 청색 / 오프라인 회색 / 서버 무응답 적색 STALE).

배선 (GMT020-02 7핀 ↔ Zero 2 W 40핀, BCM)

LCD 핀 기능 Pi 핀(BCM) 물리 핀
VCC 3.3V 3V3 17
GND GND GND 20
SCL SPI SCLK GPIO11 23
SDA SPI MOSI GPIO10 19
RES Reset GPIO24 18
DC Data/Cmd GPIO25 22
CS Chip Select GPIO8 (CE0) 24

핀 변경 시 config.py 의 PIN_* 수정. 상세 그림: WIRING.html.

설치

cp config_local.example.py config_local.py   # STATUS_URL / STATUS_KEY 입력(파생키 — API_KEY 아님)
./install.sh                                  # SPI 활성 + apt + venv (번들 있으면 오프라인)
python3 test_connection.py                    # 서버 연결 검증
sudo cp systemd/display-dashboard.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now display-dashboard

폐쇄망: 빌드 PC에서 bash vendor.sh → debs/+wheelhouse/ 동봉 후 USB 이송. 하드닝: 센서 노드와 동일 harden_pi.sh 사용 가능(아웃바운드 전용 장치).

화면 텍스트

기본 폰트 DejaVu → 라벨은 영문 축약(ALL OK / LEAK! / TEMP C …). 한글 표시를 원하면 한글 TTF 를 복사하고 config.py FONT_PATH 를 바꾼다 (폐쇄망이므로 폰트 파일도 USB 로 반입).

문제 해결

  • 화면 백지: SPI 활성 여부(ls /dev/spidev0.0), 배선(DC/RES 스왑 흔함)
  • 색 이상: config.py INVERT 토글
  • 403: STATUS_KEY 불일치 — php -r 'echo hash_hmac("sha256","status","<서버 API_KEY>");' 로 재계산
  • 서비스 로그: journalctl -u display-dashboard -e
  • 하드웨어 없이 렌더 확인: FORCE_SIMULATION = True → /tmp/display_preview.png