이 번에 ESP32 Dev Board와 RGB LED Dot Matrix를 이용한 시계를 만들어 보자.
준비물은 인터넷 직구로 구매하며 30%~50% 저렴하게 구매 할 수 있다.
단점은 배송이 1~2주 정도 걸린다는 점이다.
나 같은 경우 점퍼선와 브래드보드 제외하고 3만원 정도 들었다.
RGB LED Dot Matrix(HUB75, HUB85E) 스캔주기 1/16 이하
모듈갯수(32x16) 8개 이하 ESP32로 제어 가능하다.
그 이상은 분산처리 또는 전용 제어보드를 사용헤야한다.
앞으로도 같은 부품으로 코드만 바꾸어서 테스트를 진행할 예정이다.
주) RGB LED Dot Matrix 전원은 별도로 공급해야한다.
※ 준비물은 아래와 같다.
ESP32 Dev Board
RGB LED Dot Matrix 64 x 32
점퍼케이블(F-F) x 16
※ 핀 연결

| HUB75 | ESP32 |
| R1 | GPIO 25 |
| G1 | GPIO 26 |
| B1 | GPIO 27 |
| R2 | GPIO 14 |
| G2 | GPIO 12 |
| B2 | GPIO 13 |
| A | GPIO 23 |
| B | GPIO 19 |
| C | GPIO 5 |
| D | GPIO 17 |
| CLK | GPIO 16 |
| LAT | GPIO 4 |
| OE | GPIO 15 |
※ 소스
#include <time.h>
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
/* ================= HUB75 CONFIG ================= */
#define PANEL_RES_X 64
#define PANEL_RES_Y 32
#define PANEL_CHAIN 1
HUB75_I2S_CFG mxconfig(
PANEL_RES_X,
PANEL_RES_Y,
PANEL_CHAIN
);
MatrixPanel_I2S_DMA *dma_display;
/* ================= GLOBAL ================= */
bool clockMode = true;
bool colonVisible = true;
unsigned long lastTick = 0;
uint16_t DAY_TIME_COLOR;
uint16_t DAY_DATE_COLOR;
uint16_t DAY_DAY_COLOR;
uint16_t NIGHT_TIME_COLOR;
uint16_t NIGHT_DATE_COLOR;
uint16_t NIGHT_DAY_COLOR;
// Color
uint16_t COLOR_TIME;
uint16_t COLOR_DATE;
uint16_t COLOR_DAY;
void drawBigClock() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
char timeBuf[6];
if (colonVisible)
strftime(timeBuf, sizeof(timeBuf), "%H:%M", &timeinfo);
else
strftime(timeBuf, sizeof(timeBuf), "%H %M", &timeinfo);
char dateBuf[16];
strftime(dateBuf, sizeof(dateBuf), "%Y-%m-%d", &timeinfo);
static const char* weekStr[] =
{"SUN","MON","TUE","WED","THU","FRI","SAT"};
dma_display->clearScreen();
dma_display->setTextSize(2);
dma_display->setTextColor(COLOR_TIME);
dma_display->setCursor(2, 1);
dma_display->print(timeBuf);
dma_display->setTextSize(1);
dma_display->setTextColor(COLOR_DATE);
dma_display->setCursor(2, 16);
dma_display->print(dateBuf);
dma_display->setTextColor(COLOR_DAY);
dma_display->setCursor(2, 25);
dma_display->print(weekStr[timeinfo.tm_wday]);
}
/* ================= WIFI ================= */
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin("SSID", "SSID_PASS");
for (int i = 0; i < 20; i++) {
if (WiFi.status() == WL_CONNECTED) break;
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
configTime(9 * 3600, 0, "pool.ntp.org", "time.nist.gov");
staIPStr = WiFi.localIP().toString();
ipShowStart = millis();
}
}
}
bool isDayTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return true;
int h = timeinfo.tm_hour;
return (h >= 7 && h < 19);
}
void updateThemeByTime() {
if (isDayTime()) {
COLOR_TIME = DAY_TIME_COLOR;
COLOR_DATE = DAY_DATE_COLOR;
COLOR_DAY = DAY_DAY_COLOR;
} else {
COLOR_TIME = NIGHT_TIME_COLOR;
COLOR_DATE = NIGHT_DATE_COLOR;
COLOR_DAY = NIGHT_DAY_COLOR;
}
}
/* ================= SETUP ================= */
void setup() {
Serial.begin(115200);
//COLOR_TIME = dma_display->color565(255,255,255); // 시계
//COLOR_DATE = dma_display->color565(0,200,255); // 날짜
//COLOR_DAY = dma_display->color565(255,180,0); // 요일
/* DAY */
DAY_TIME_COLOR = dma_display->color565(255,255,255);
DAY_DATE_COLOR = dma_display->color565(0,200,255);
DAY_DAY_COLOR = dma_display->color565(255,180,0);
/* NIGHT (눈부심 최소화) */
NIGHT_TIME_COLOR = dma_display->color565(0,255,0);
NIGHT_DATE_COLOR = dma_display->color565(0,140,1);
NIGHT_DAY_COLOR = dma_display->color565(1,180,0);
COLOR_TIME = dma_display->color565(0,255,0);
COLOR_DATE = dma_display->color565(0,120,0);
COLOR_DAY = dma_display->color565(0,180,0);
COLOR_IP = dma_display->color565(0,255,0); // IP
dma_display = new MatrixPanel_I2S_DMA(mxconfig);
dma_display->begin();
dma_display->setBrightness8(128);
initWiFi();
}
/* ================= LOOP ================= */
void loop() {
if (millis() - lastTick >= 1000) {
lastTick = millis();
colonVisible = !colonVisible;
updateThemeByTime();
drawBigClock();
}
}
※ 실행화면

728x90
'Hardware > ESP32' 카테고리의 다른 글
| ESP32와 WS2812 RGB LED 1 - strip (0) | 2026.01.08 |
|---|---|
| ESP32와 1.28 Inch 원형 TFT LCD - 시계 (0) | 2026.01.08 |
| ESP32 소개 - 보드 종류 (0) | 2025.10.17 |
| ESP32 와 64x32 RGB LED Matrix 3차 테스트 (1) | 2024.10.04 |
| ESP32 와 64x32 RGB LED Matrix 2차 테스트 (0) | 2024.10.03 |
