ESP32 MicroPython 74HC595 4자리 7세그먼트 디스플레이

ESP32는 IoT 및 임베디드 프로젝트에 널리 사용되는 강력한 Wi-Fi 지원 마이크로컨트롤러입니다. MicroPython과 DIYables 4자리 7세그먼트 디스플레이 모듈(74HC595)을 결합하면 밝은 LED 디스플레이에 숫자, 텍스트, 센서 값을 손쉽게 표시할 수 있습니다.

이 튜토리얼에서 다루는 내용:

ESP32 마이크로파이썬 4자리 7세그먼트 디스플레이 74hc595

필요한 부품

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에 연결
4자리 7세그먼트 디스플레이 74hc595 핀아웃

배선

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 접지
ESP32 4자리 7세그먼트 디스플레이 74hc595 배선도

이 이미지는 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 버튼을 클릭하여 라이브러리를 설치합니다.
ESP32 4자리 7세그먼트 디스플레이 74hc595 라이브러리
  • 제공된 MicroPython 코드를 복사하여 Thonny 편집기에 붙여넣습니다.
  • 다음 방법으로 코드를 ESP32에 저장합니다:
    • Save 버튼을 클릭하거나 Ctrl+S를 누릅니다.
    • 저장 대화상자에서 MicroPython device를 선택합니다.
    • 파일 이름을 main.py로 지정합니다.
  • 녹색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행합니다.
  • 디스플레이를 관찰합니다 — 7세그먼트 디스플레이에 숫자, 텍스트 또는 기타 내용이 나타나야 합니다.

기본 코드 템플릿

from DIYables_MicroPython_4Digit7Segment_74HC595 import Display4Digit7Segment74HC595 import time display = Display4Digit7Segment74HC595(sclk_pin=18, rclk_pin=17, dio_pin=16, common_anode=True) # The display auto-refreshes in the background using a hardware Timer. # Just call display.print() and the display stays on automatically. display.print(1234)

ESP32 코드 — 정수 표시

""" Example: Display integer numbers on 4-digit 7-segment display with 74HC595. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Wiring guide: ESP32: 74HC595 Module ESP32 ────────────── ────── SCLK (SH_CP) -> GPIO18 RCLK (ST_CP) -> GPIO17 DIO (DS) -> GPIO16 VCC -> 3.3V GND -> GND Raspberry Pi Pico: 74HC595 Module Raspberry Pi Pico ────────────── ───────────────── SCLK (SH_CP) -> GP2 RCLK (ST_CP) -> GP1 DIO (DS) -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: 74HC595 Module Arduino Nano ESP32 ────────────── ────────────────── SCLK (SH_CP) -> D18 (GPIO18) RCLK (ST_CP) -> D17 (GPIO17) DIO (DS) -> D16 (GPIO16) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: 74HC595 Module Arduino Nano RP2040 Connect ────────────── ─────────────────────────── SCLK (SH_CP) -> D2 (GP2) RCLK (ST_CP) -> D1 (GP1) DIO (DS) -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_74HC595 import Display4Digit7Segment74HC595 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: SCLK=18, RCLK=17, DIO=16 # Raspberry Pi Pico / Nano RP2040: SCLK=2, RCLK=1, DIO=0 SCLK_PIN = 18 RCLK_PIN = 17 DIO_PIN = 16 display = Display4Digit7Segment74HC595(SCLK_PIN, RCLK_PIN, DIO_PIN, common_anode=True) while True: # Display integers numbers = [0, 42, 1234, -5, -123, 9999] for num in numbers: display.print(num) time.sleep(2) # Display with zero padding display.print(42, zero_pad=True) # Shows "0042" time.sleep(2)

실행해보기

  • 모듈을 배선하고 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 코드 — 소수 표시

""" Example: Display float numbers on 4-digit 7-segment display with 74HC595. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Wiring guide: ESP32: 74HC595 Module ESP32 ────────────── ────── SCLK (SH_CP) -> GPIO18 RCLK (ST_CP) -> GPIO17 DIO (DS) -> GPIO16 VCC -> 3.3V GND -> GND Raspberry Pi Pico: 74HC595 Module Raspberry Pi Pico ────────────── ───────────────── SCLK (SH_CP) -> GP2 RCLK (ST_CP) -> GP1 DIO (DS) -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: 74HC595 Module Arduino Nano ESP32 ────────────── ────────────────── SCLK (SH_CP) -> D18 (GPIO18) RCLK (ST_CP) -> D17 (GPIO17) DIO (DS) -> D16 (GPIO16) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: 74HC595 Module Arduino Nano RP2040 Connect ────────────── ─────────────────────────── SCLK (SH_CP) -> D2 (GP2) RCLK (ST_CP) -> D1 (GP1) DIO (DS) -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_74HC595 import Display4Digit7Segment74HC595 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: SCLK=18, RCLK=17, DIO=16 # Raspberry Pi Pico / Nano RP2040: SCLK=2, RCLK=1, DIO=0 SCLK_PIN = 18 RCLK_PIN = 17 DIO_PIN = 16 display = Display4Digit7Segment74HC595(SCLK_PIN, RCLK_PIN, DIO_PIN, common_anode=True) while True: # Display floats with auto decimal places floats = [1.5, 12.34, 3.141, -1.2, 0.5] for num in floats: display.print(num) time.sleep(2) # Display with specific decimal places display.print(23.5, decimal_places=1) # Shows "23.5" time.sleep(2) # Display 1.5 with auto decimal places display.print(1.5) # Shows "1.5" time.sleep(2) # Display 1.5 with 2 decimal places display.print(1.5, decimal_places=2) # Shows "1.50" time.sleep(2) # Display 1.5 with 2 decimal places and zero padding display.print(1.5, decimal_places=2, zero_pad=True) # Shows "01.50" time.sleep(2)

소수 표시

소수점은 올바른 위치에 자동으로 배치됩니다. 라이브러리가 소수 자릿수를 자동 선택하거나 직접 지정할 수 있습니다.

메서드 호출 디스플레이 표시 비고
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 코드 — 텍스트, 도수 기호, 온도 표시

""" Example: Display text, special characters, and temperature on 4-digit 7-segment display. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Wiring guide: ESP32: 74HC595 Module ESP32 ────────────── ────── SCLK (SH_CP) -> GPIO18 RCLK (ST_CP) -> GPIO17 DIO (DS) -> GPIO16 VCC -> 3.3V GND -> GND Raspberry Pi Pico: 74HC595 Module Raspberry Pi Pico ────────────── ───────────────── SCLK (SH_CP) -> GP2 RCLK (ST_CP) -> GP1 DIO (DS) -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: 74HC595 Module Arduino Nano ESP32 ────────────── ────────────────── SCLK (SH_CP) -> D18 (GPIO18) RCLK (ST_CP) -> D17 (GPIO17) DIO (DS) -> D16 (GPIO16) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: 74HC595 Module Arduino Nano RP2040 Connect ────────────── ─────────────────────────── SCLK (SH_CP) -> D2 (GP2) RCLK (ST_CP) -> D1 (GP1) DIO (DS) -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_74HC595 import Display4Digit7Segment74HC595 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: SCLK=18, RCLK=17, DIO=16 # Raspberry Pi Pico / Nano RP2040: SCLK=2, RCLK=1, DIO=0 SCLK_PIN = 18 RCLK_PIN = 17 DIO_PIN = 16 display = Display4Digit7Segment74HC595(SCLK_PIN, RCLK_PIN, DIO_PIN, common_anode=True) while True: # Display text strings texts = ["HELP", "Hi", "COOL", "done"] for text in texts: display.print(text) time.sleep(2) # Display temperature with degree symbol display.print_temperature(25, 'C') # Shows "25°C" time.sleep(2) display.print_temperature(72, 'F') # Shows "72°F" time.sleep(2) # Display string with degree constant display.print("25" + display.DEGREE + "C") # Same as print_temperature(25, 'C') time.sleep(2) # Display string with dots display.print("1.2.3.4") # Shows "1.2.3.4" with dots on digits 0,1,2 time.sleep(2)

지원 문자

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 상수를 사용하여 온도 문자열을 수동으로 구성할 수도 있습니다:

display.print("25" + display.DEGREE + "C") # Same as print_temperature(25, 'C')

문자열의 점 처리

문자열의 . 문자는 자체 위치를 차지하지 않고 앞 자릿수의 소수점을 활성화합니다:

display.print("1.2.3.4") # Shows digits 1, 2, 3, 4 with dots on digits 0, 1, 2

ESP32 코드 — 시간 표시

""" Example: Display time with blinking dot separator on 4-digit 7-segment display. Note: This module has dots only (no colon). The dot on digit 1 is used as a time separator. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Wiring guide: ESP32: 74HC595 Module ESP32 ────────────── ────── SCLK (SH_CP) -> GPIO18 RCLK (ST_CP) -> GPIO17 DIO (DS) -> GPIO16 VCC -> 3.3V GND -> GND Raspberry Pi Pico: 74HC595 Module Raspberry Pi Pico ────────────── ───────────────── SCLK (SH_CP) -> GP2 RCLK (ST_CP) -> GP1 DIO (DS) -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: 74HC595 Module Arduino Nano ESP32 ────────────── ────────────────── SCLK (SH_CP) -> D18 (GPIO18) RCLK (ST_CP) -> D17 (GPIO17) DIO (DS) -> D16 (GPIO16) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: 74HC595 Module Arduino Nano RP2040 Connect ────────────── ─────────────────────────── SCLK (SH_CP) -> D2 (GP2) RCLK (ST_CP) -> D1 (GP1) DIO (DS) -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_74HC595 import Display4Digit7Segment74HC595 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: SCLK=18, RCLK=17, DIO=16 # Raspberry Pi Pico / Nano RP2040: SCLK=2, RCLK=1, DIO=0 SCLK_PIN = 18 RCLK_PIN = 17 DIO_PIN = 16 display = Display4Digit7Segment74HC595(SCLK_PIN, RCLK_PIN, DIO_PIN, common_anode=True) hours = 12 minutes = 30 colon_on = True while True: display.print_time(hours, minutes, colon=colon_on) time.sleep(0.5) # Toggle dot separator every 500ms for blinking effect colon_on = not colon_on

시간 표시

이 모듈에는 점만 있습니다(콜론 없음). 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 코드 — 디스플레이 깜빡이기

""" Example: Blink integer, float, and text on 4-digit 7-segment display. Uses off() to stop the display and on() to restart it. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Wiring guide: ESP32: 74HC595 Module ESP32 ────────────── ────── SCLK (SH_CP) -> GPIO18 RCLK (ST_CP) -> GPIO17 DIO (DS) -> GPIO16 VCC -> 3.3V GND -> GND Raspberry Pi Pico: 74HC595 Module Raspberry Pi Pico ────────────── ───────────────── SCLK (SH_CP) -> GP2 RCLK (ST_CP) -> GP1 DIO (DS) -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: 74HC595 Module Arduino Nano ESP32 ────────────── ────────────────── SCLK (SH_CP) -> D18 (GPIO18) RCLK (ST_CP) -> D17 (GPIO17) DIO (DS) -> D16 (GPIO16) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: 74HC595 Module Arduino Nano RP2040 Connect ────────────── ─────────────────────────── SCLK (SH_CP) -> D2 (GP2) RCLK (ST_CP) -> D1 (GP1) DIO (DS) -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_74HC595 import Display4Digit7Segment74HC595 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: SCLK=18, RCLK=17, DIO=16 # Raspberry Pi Pico / Nano RP2040: SCLK=2, RCLK=1, DIO=0 SCLK_PIN = 18 RCLK_PIN = 17 DIO_PIN = 16 display = Display4Digit7Segment74HC595(SCLK_PIN, RCLK_PIN, DIO_PIN, common_anode=True) while True: # Blink an integer display.print(1234) for _ in range(5): # Blink 5 times display.off() time.sleep(0.3) display.on() time.sleep(0.3) time.sleep(1) # Blink a float display.print(12.34) for _ in range(5): # Blink 5 times display.off() time.sleep(0.3) display.on() time.sleep(0.3) time.sleep(1) # Blink text display.print("HELP") for _ in range(5): # Blink 5 times display.off() time.sleep(0.3) display.on() time.sleep(0.3) time.sleep(1)

디스플레이 켜기/끄기 제어

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()을 사용하여 간단한 시계를 만들어보세요.
  • 버튼을 추가하여 카운트다운 타이머 또는 스톱워치를 만들어보세요.