ESP32 기반 온습도 LED 매트릭스 전광판
ESP32 WROVER와 Sensirion SHT 계열 센서, 128×64 HUB75 LED 패널을 연동해 온도와 습도를 표시하는 전광판 펌웨어를 개발했습니다. 센서 측정부터 LED 출력, 한글 비트맵 폰트 생성까지 구현하고, 값이 바뀐 영역만 갱신하는 방식으로 화면 깜빡임을 완화했습니다.

개발 범위
- ESP32 WROVER 기반 펌웨어 설계 및 PlatformIO 빌드 환경 구성
- SHT3x/SHT4x 온습도 센서 I2C 연동과 오류 처리
- HUB75 LED 패널 핀맵 구성, FM6124 드라이버 설정 및 DMA 구동
- 한글·숫자·단위 비트맵 폰트와 Python 변환 도구 제작
- 화면 색상, 밝기, 출력 위치 조정 및 하드웨어 연결 문서화
주요 구현 내용
센서 측정과 오류 표시
온습도 값을 2초 주기로 측정하고, 센서 모델별 API를 readSensor()에 분리했습니다. SHT31/SHT35와 SHT40/SHT41/SHT45 계열은 컴파일 설정으로 선택할 수 있도록 구성했습니다. 센서 측정에 실패하면 LED 화면과 시리얼 로그에 오류 상태를 함께 표시해 배선, 전원, I2C 연결 상태를 확인할 수 있도록 했습니다.
#define SENSOR_MODEL_SHT3X 3
#define SENSOR_MODEL_SHT4X 4
#define SENSOR_MODEL SENSOR_MODEL_SHT4X
부분 갱신과 한글 표시
정적인 한글 라벨은 drawStaticLabels()에서 초기 1회 출력하고, 온습도 문자열은 currentTempText와 currentHumiText에 저장했습니다. 새 측정값이 달라질 때 해당 문자열 영역만 지우고 다시 그려 전체 화면 갱신을 줄였습니다.
Noto Sans CJK KR Regular 폰트에서 필요한 문자만 24px 비트맵으로 변환해 C++ 헤더의 PROGMEM에 저장했습니다. Python과 Pillow를 활용한 변환 도구로 폰트 데이터를 생성하고, 작은 패널에서 읽기 쉽도록 단위 기호를 별도로 구성했습니다.
| 구분 | 포함 문자 |
|---|---|
| 한글 | 온, 습, 도 |
| 숫자 | 0~9 |
| 기호 | -, %, °C |
세로형 화면 구성
270도 회전을 적용해 온도와 습도 라벨, 측정값을 위아래로 배치했습니다. 라벨·숫자·단위의 색상을 구분하고, 온도 단위는 설정에 따라 도 또는 °C로 표시할 수 있도록 했습니다.
온도
24도
습도
53%
시스템 구성
| 항목 | 구성 |
|---|---|
| MCU | ESP32 WROVER / esp-wrover-kit |
| 센서 | Sensirion SHT3x/SHT4x 계열, I2C |
| 디스플레이 | 128×64 HUB75 LED 패널 1장 |
| LED 드라이버 | FM6124 |
| 구동 설정 | 색상 깊이 6bit, I2S 16MHz, 최소 리프레시 설정 60Hz |
| 화면 방향 | 270도 회전 |
| 전원 | LED 패널 5V, 센서 3.3V, 공통 GND |
PSRAM과의 핀 충돌을 줄이기 위해 ESP32 WROVER의 GPIO16과 GPIO17을 피해서 HUB75 핀맵을 구성했습니다.
기술 스택과 산출물
| 구분 | 사용 기술 |
|---|---|
| 펌웨어 | C++, Arduino Framework |
| 빌드·업로드 | PlatformIO |
| LED 제어 | ESP32 HUB75 LED MATRIX PANEL DMA Display |
| 그래픽 | Adafruit GFX Library |
| 센서 라이브러리 | Sensirion I2C SHT3x/SHT4x Library |
| 폰트 변환 | Python, Pillow |
주요 산출물은 ESP32 펌웨어, PlatformIO 설정, 비트맵 폰트 헤더, 폰트 변환 스크립트 및 하드웨어 연결 안내입니다. 온습도 측정값을 현장에서 직접 확인해야 하는 공장, 창고, 온실, 실험실 등의 표시 장치에 활용할 수 있는 구성을 만들었습니다.