ESP32 MicroPython 74HC595 4자리 7세그먼트 디스플레이
ESP32는 IoT 및 임베디드 프로젝트에 널리 사용되는 강력한 Wi-Fi 지원 마이크로컨트롤러입니다. MicroPython과 DIYables 4자리 7세그먼트 디스플레이 모듈(74HC595)을 결합하면 밝은 LED 디스플레이에 숫자, 텍스트, 센서 값을 손쉽게 표시할 수 있습니다.
이 튜토리얼에서 다루는 내용:
- 74HC595 기반 4자리 7세그먼트 디스플레이를 ESP32에 연결하기 — 데이터 핀 3개만 필요합니다.
- 정수, 소수, 텍스트 문자열 표시하기.
- 도수 기호(°C / °F)를 포함한 온도 표시하기.
- 깜빡이는 점 구분자로 시간 표시하기.
- 디스플레이 깜빡이기.
- 자동 갱신 기능 사용하기 — 수동 갱신 루프가 필요 없습니다.

필요한 부품
| 1 | × | 38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow | 쿠팡 | 아마존 | |
| 1 | × | (또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide | 쿠팡 | 아마존 | |
| 1 | × | (또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide | 아마존 | |
| 1 | × | (또는) ESP32 Uno-form board | 아마존 | |
| 1 | × | (또는) ESP32 S3 Uno-form board | 아마존 | |
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 | |
| 1 | × | 74HC595 4-digit 7-segment 디스플레이 | 쿠팡 | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) ESP32용 스크루 터미널 확장 보드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Breakout Expansion Board for ESP32 | 쿠팡 | 아마존 | |
| 1 | × | (추천) ESP32용 전원 분배기 | 쿠팡 | 아마존 |
74HC595 4자리 7세그먼트 디스플레이 모듈
DIYables 74HC595 4자리 7세그먼트 디스플레이 모듈은 두 개의 74HC595 시프트 레지스터로 구동되는 소형 LED 디스플레이입니다. 4자리와 4개의 소수점을 표시합니다. 시프트 레지스터가 모든 세그먼트와 자릿수 구동을 처리하므로, ESP32는 12핀 이상 필요한 직접 연결 디스플레이 대신 GPIO 핀 3개(클럭, 래치, 데이터)만 사용합니다.
ESP32는 세그먼트 데이터와 자릿수 선택 데이터를 직렬로 시프트하여 모듈과 통신합니다. 라이브러리는 하드웨어 타이머를 사용해 멀티플렉싱을 자동으로 처리합니다 — 각 자릿수가 순서대로 고속으로 갱신되어 4자리 모두 동시에 켜진 것처럼 보입니다.
모듈의 주요 특징:
- 데이터용 3선 연결 (SCLK, RCLK, DIO) + 전원
- 4개의 소수점 — 개별 제어 가능
- 공통 애노드 또는 공통 캐소드 버전 제공
- 5V 또는 3.3V 호환
핀 설명
| 핀 | 용도 | ESP32 연결 |
|---|---|---|
| SCLK (SH_CP) | 직렬 클럭 입력 | GPIO18에 연결 |
| RCLK (ST_CP) | 레지스터 클럭 / 래치 | GPIO17에 연결 |
| DIO (DS) | 직렬 데이터 입력 | GPIO16에 연결 |
| VCC | 3.3V~5V 전원 입력 | 3.3V에 연결 |
| GND | 접지 | GND에 연결 |

배선
ESP32는 3.3V 로직으로 동작합니다. 74HC595 모듈은 3.3V와 5V 모두 지원하므로 레벨 시프터 없이 직접 배선할 수 있습니다.
| 74HC595 모듈 | ESP32 | 비고 |
|---|---|---|
| SCLK (SH_CP) | GPIO18 | 직렬 클럭 |
| RCLK (ST_CP) | GPIO17 | 래치 / 레지스터 클럭 |
| DIO (DS) | GPIO16 | 직렬 데이터 |
| VCC | 3.3V | 전원 |
| GND | GND | 접지 |

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
팁: ESP32의 사용 가능한 GPIO 핀을 자유롭게 사용할 수 있습니다. 코드에서 핀 번호만 업데이트하면 됩니다.
빠른 시작
Thonny IDE를 사용하여 ESP32에서 MicroPython 코드를 설정하고 실행하는 방법:
- Thonny IDE가 컴퓨터에 설치되어 있는지 확인합니다.
- ESP32 보드에 MicroPython 펌웨어가 로드되어 있는지 확인합니다.
- ESP32에서 MicroPython을 처음 사용하는 경우, ESP32 마이크로파이썬 - 시작하기 가이드를 참조하세요.
- 제공된 배선도에 따라 ESP32 보드를 4자리 7세그먼트 디스플레이 모듈에 연결합니다.
- USB 케이블로 ESP32 보드를 컴퓨터에 연결합니다.
- 컴퓨터에서 Thonny IDE를 엽니다.
- Thonny IDE에서 Tools Options로 이동합니다.
- Interpreter 탭에서 드롭다운 메뉴의 MicroPython (ESP32)를 선택합니다.
- 올바른 포트가 선택되어 있는지 확인합니다. Thonny IDE가 자동으로 감지하지만, 수동으로 선택해야 할 수도 있습니다(Windows에서는 COM3, Linux에서는 /dev/ttyUSB0).
- Thonny IDE의 Tools Manage packages로 이동합니다.
- "DIYables-MicroPython-4Digit7Segment-74HC595"를 검색하여 DIYables에서 만든 4자리 7세그먼트 디스플레이 라이브러리를 찾습니다.
- DIYables-MicroPython-4Digit7Segment-74HC595를 클릭한 후 Install 버튼을 클릭하여 라이브러리를 설치합니다.

- 제공된 MicroPython 코드를 복사하여 Thonny 편집기에 붙여넣습니다.
- 다음 방법으로 코드를 ESP32에 저장합니다:
- Save 버튼을 클릭하거나 Ctrl+S를 누릅니다.
- 저장 대화상자에서 MicroPython device를 선택합니다.
- 파일 이름을 main.py로 지정합니다.
- 녹색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행합니다.
- 디스플레이를 관찰합니다 — 7세그먼트 디스플레이에 숫자, 텍스트 또는 기타 내용이 나타나야 합니다.
기본 코드 템플릿
ESP32 코드 — 정수 표시
실행해보기
- 모듈을 배선하고 USB로 ESP32를 연결합니다.
- Thonny IDE로 코드를 업로드합니다.
- 디스플레이가 여러 정수(0, 42, 1234, -5, -123, 9999)와 0으로 채워진 숫자(0042)를 순환 표시합니다.
정수 표시
print() 메서드는 정수를 자동으로 감지하고 디스플레이의 오른쪽부터 정렬합니다.
| 메서드 호출 | 디스플레이 표시 | 비고 |
|---|---|---|
| display.print(0) | " 0" | 한 자리, 오른쪽 정렬 |
| display.print(42) | " 42" | 두 자리 |
| display.print(1234) | "1234" | 4자리 전체 |
| display.print(-5) | " -5" | 음수 기호 포함 |
| display.print(-123) | "-123" | 음수, 전체 폭 |
| display.print(9999) | "9999" | 최대 양수 값 |
| display.print(42, zero_pad=True) | "0042" | 앞에 0 채우기 |
정수 범위: -999 ~ 9999. 이 범위를 벗어난 값은 "Err"로 표시됩니다.
ESP32 코드 — 소수 표시
소수 표시
소수점은 올바른 위치에 자동으로 배치됩니다. 라이브러리가 소수 자릿수를 자동 선택하거나 직접 지정할 수 있습니다.
| 메서드 호출 | 디스플레이 표시 | 비고 |
|---|---|---|
| display.print(1.5) | " 1.5" | 자동 소수 자릿수 |
| display.print(12.34) | "12.34" | 자동 — 소수 2자리 |
| display.print(3.141) | "3.141" | 자동 — 소수 3자리 |
| display.print(23.5, decimal_places=1) | "23.5" | 소수 1자리 고정 |
| display.print(1.5, decimal_places=2) | " 1.50" | 소수 2자리 고정, 끝 0 포함 |
| display.print(1.5, decimal_places=2, zero_pad=True) | "01.50" | 앞에 0 채우기, 소수 2자리 |
ESP32 코드 — 텍스트, 도수 기호, 온도 표시
지원 문자
7세그먼트 디스플레이에서 표시 가능한 알파벳 문자 일부를 지원합니다:
- 숫자: 0-9
- 문자: A, b, C, c, d, E, F, G, H, h, I, i, J, L, n, O, o, P, r, S, t, U, u, Y
- 특수: ° (도수), - (대시), _ (밑줄), (공백)
온도 표시
| 메서드 호출 | 디스플레이 표시 | 비고 |
|---|---|---|
| display.print_temperature(25, 'C') | "25°C" | 섭씨 |
| display.print_temperature(72, 'F') | "72°F" | 화씨 |
| display.print_temperature(-5, 'C') | "-5°C" | 음수 온도 |
| display.print_temperature(100, 'C') | "100°" | 단위 표시 공간 부족 |
DEGREE 상수를 사용하여 온도 문자열을 수동으로 구성할 수도 있습니다:
문자열의 점 처리
문자열의 . 문자는 자체 위치를 차지하지 않고 앞 자릿수의 소수점을 활성화합니다:
ESP32 코드 — 시간 표시
시간 표시
이 모듈에는 점만 있습니다(콜론 없음). print_time() 메서드는 두 번째 자릿수(왼쪽에서)의 점을 시간 구분자로 사용합니다.
| 메서드 호출 | 디스플레이 표시 | 비고 |
|---|---|---|
| display.print_time(12, 30) | "12.30" | 점 구분자 켜짐 |
| display.print_time(9, 5) | "09.05" | 자동 0 채우기 |
| display.print_time(12, 30, colon=False) | "12 30" | 점 구분자 꺼짐 |
깜빡임 효과: 메인 루프에서 500ms마다 colon 파라미터를 토글하여 깜빡이는 시간 구분자를 만들 수 있습니다.
ESP32 코드 — 디스플레이 깜빡이기
디스플레이 켜기/끄기 제어
off() 메서드는 자동 갱신 타이머를 중지하고 모든 세그먼트를 끕니다. on() 메서드는 타이머를 재시작합니다 — 마지막으로 출력된 내용이 print()를 다시 호출하지 않아도 복원됩니다.
| 메서드 | 동작 | 비고 |
|---|---|---|
| display.off() | 디스플레이 중지 및 모든 세그먼트 끄기 | 타이머 중지됨 |
| display.on() | 현재 내용으로 디스플레이 재시작 | 타이머 재개 |
| display.clear() | 디스플레이 버퍼 지우기 | 빈 화면 표시 |
루프에서 off()와 on()을 사용하여 깜빡임 효과를 만들 수 있습니다. print()로 설정된 디스플레이 내용은 off() 중에도 유지됩니다.
API 요약
자세한 매개변수와 예제가 포함된 전체 API 레퍼런스는 라이브러리 레퍼런스를 참조하세요.
| 메서드 | 설명 |
|---|---|
| print(value, decimal_places, zero_pad) | 정수, 소수, 문자열 표시 (타입 자동 감지) |
| print_temperature(temperature, unit) | ° 기호와 함께 온도 표시 |
| print_time(hours, minutes, colon) | 점 구분자로 HH.MM 형식 시간 표시 |
| clear() | 디스플레이 버퍼 지우기 |
| off() | 자동 갱신 중지 및 디스플레이 끄기 |
| on() | 자동 갱신 재시작 |
| set_char(position, char) | 지정 위치(0-3)에 문자 설정 |
| set_number(position, number) | 지정 위치(0-3)에 0-9 숫자 설정 |
| set_dot(position, state) | 지정 위치(0-3)의 소수점 설정 |
| set_segments(position, segments) | 지정 위치(0-3)에 원시 세그먼트 비트 설정 |
다음 단계
- 전체 API(저수준 세그먼트 제어 포함)는 라이브러리 레퍼런스를 참조하세요.
- 센서(예: DHT11, DS18B20)와 결합하여 온도 모니터를 만들어보세요.
- ESP32의 RTC 또는 NTP와 함께 print_time()을 사용하여 간단한 시계를 만들어보세요.
- 버튼을 추가하여 카운트다운 타이머 또는 스톱워치를 만들어보세요.