ESP32 기반 온습도 LED 매트릭스 전광판

ESP32C++ArduinoHUB75온습도 센서Python

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

humi.jpg

개발 범위

  • 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 설정, 비트맵 폰트 헤더, 폰트 변환 스크립트 및 하드웨어 연결 안내입니다. 온습도 측정값을 현장에서 직접 확인해야 하는 공장, 창고, 온실, 실험실 등의 표시 장치에 활용할 수 있는 구성을 만들었습니다.

ESP32 기반 온습도 LED 매트릭스 전광판 | POLSTARIN