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

48 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 미니 상태 표시기 — 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`.
## 설치
```bash
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`