집안 여러 공간(거실, 안방, 아이방, 베란다 등)에 배치된 센서 노드들의 온습도 데이터를 매번 개별 앱이나 웹으로 확인하는 것이 번거로워, 한눈에 모든 방의 상태를 파악할 수 있는 전용 모니터링 디스플레이를 제작했습니다.

이번 프로젝트는 ESP32와 ST7789 TFT LCD, 그리고 uasyncio 비동기 처리를 결합하여 화면이 끊김 없이 부드럽게 갱신되도록 설계했습니다.
🛠️ 주요 핵심 기능
- 멀티 노드 비동기 데이터 수집 (
uasyncio)- 총 8~9개 센서 노드(거실, 주방, 안방, 서브룸, 드레스룸, 베란다, 야외 등)의 HTTP API를 non-blocking(비동기) 방식으로 순회 조회합니다.
- 특정 노드의 응답이 늦어지더라도 시계나 전체 UI가 멈추지 않고 매끄럽게 동작합니다.
- 동적 스케일링 기반 UI 가시성 극대화
- 측정된 집안 전체의 최저/최고 온습도 범위를 실시간 계산하여, 수치가 텍스트 박스 형태의 상대적인 가로 위치(x좌표)로 표현되도록 구현했습니다.
- 단순 숫자가 아닌, 각 방의 상대적인 온도/습도 위치를 직관적으로 파악할 수 있습니다.
- 스마트 전원 관리 및 인터렉티브 경고 시스템
- 터치 센서를 통한 화면 켜기/끄기 및 일정 시간 후 자동 절전(Auto Sleep) 모드를 지원합니다.
- 자동 종료 10초 전 또는 터치 버튼을 1초 이상 길게 누르고 있을 때 우측 상단에
OFF배지가 빨간색 반전으로 깜빡이며 종료 예고 신호를 줍니다.
- BLK 핀 부재 극복: 디스플레이 직접 전원 제어 방식 적용
- 사용한 ST7789 LCD 모듈은 별도의 백라이트(BLK) 핀이 없는 타입입니다.
- 단순히 백라이트만 끄는 방식이 불가능하므로,
PowerManager를 통해 절전 모드 진입 시 액정 전원(VCC)을 직접 차단하거나 Sleep 명령을 제어하여 절전 모드 시 소비 전력을 최소화했습니다.
📐 시스템 구조 및 핀 맵 (Pinout)
- MCU: ESP32 / ESP32-S3 계열
- Display: ST7789 2.4″ / 2.0″ IPS TFT LCD (240×320)
- Touch Sensor: TTP223 정전식 터치 모듈
| ST7789 Pin | ESP32 GPIO | 비고 |
| SCK | GPIO 4 | SPI1 Clock |
| MOSI | GPIO 6 | SPI1 Master Out |
| RESET | GPIO 3 | Reset |
| DC | GPIO 2 | Data/Command |
| CS | GPIO 7 | Chip Select |
| BLK(부재) | GPIO 10 | Backlight PWM / On-Off |
| TOUCH | GPIO 1 | 터치 입력 (Active High) |
💡 핵심 코드 설계 파트
1. 비동기 HTTP 센서 데이터 수집기
asyncio.open_connection을 사용하여 네트워크 지연으로 인한 UI 병목 현상을 방지했습니다.
Python
2. 동적 수치 계산 및 위치 맵핑
현재 수집된 모든 방의 최저/최고 온습도를 기준 삼아, 해당 수치가 차지하는 영역 내 x좌표 위치를 계산하여 텍스트를 출력합니다.
Python
3. 터치 버튼 롱프레스 & 자동 종료 깜빡임 알림
10초 전 자동 종료 알림과 1초 이상 터치 버튼 누름 동작을 실시간으로 감지하여 화면 상단에 OFF 배지를 깜빡이게 처리했습니다.
Python


🎬 완성된 동작 모습 및 소감
- 실시간 시계 & 상태 배지: 매초 정확하게 시간을 업데이트하며, 각 방의 데이터 수집 시 노드 이름이 회색으로 강조된 후 수집이 완료되면 원복됩니다.
- 통신 장애 대응: 특정 센서의 IP 통신이 차단되거나 수신에 실패하더라도 전체 시스템이 멈추지 않고 다음 노드로 넘어가 안전하게 작동합니다.
- 메모리 관리: MicroPython 특성상 소켓 통신 반복 시 힙 메모리 파편화가 발생할 수 있어, 각 통신 직후
gc.collect()를 명시적으로 실행해 주어 한 달 이상 연속 동작에도 안정성을 확보했습니다.


답글 남기기
댓글을 달기 위해서는 로그인해야합니다.