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

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

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

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

필요한 부품

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×TM1637 4-digit 7-segment 디스플레이 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

TM1637 4자리 7세그먼트 디스플레이 모듈

TM1637은 최대 6자리의 멀티플렉싱과 세그먼트 구동을 모두 처리하는 전용 LED 드라이버 IC입니다. 이 모듈은 두 번째와 세 번째 자릿수 사이에 콜론 구분자가 있는 4자리 7세그먼트 LED 디스플레이를 구동하며, 시계 및 타이머 애플리케이션에 이상적입니다.

74HC595와 같은 시프트 레지스터 기반 디스플레이와 달리, TM1637에는 내장 디스플레이 메모리가 있습니다. 칩에 데이터를 쓰면 타이머 인터럽트나 갱신 루프 없이 자동으로 디스플레이를 켜진 상태로 유지합니다. TM1637은 또한 8단계 밝기(0–7)를 지원하며 통신에 GPIO 핀 2개(CLK와 DIO)만 사용합니다.

모듈은 I2C와 유사한(단 표준 I2C는 아님) 2선 시리얼 프로토콜로 통신합니다. 라이브러리가 모든 프로토콜 세부 사항을 처리하므로 print()print_time()과 같은 간단한 메서드만 호출하면 됩니다.

핀 설명

용도 ESP32 연결
CLK 직렬 클럭 입력 GPIO21에 연결
DIO 직렬 데이터 입력/출력 GPIO22에 연결
VCC 3.3V~5V 전원 입력 3.3V에 연결
GND 접지 GND에 연결
tm1637 4자리 7세그먼트 디스플레이 핀아웃

배선

ESP32는 3.3V 로직으로 동작합니다. TM1637 모듈은 3.3V와 5V 모두 지원하므로 레벨 시프터 없이 ESP32와 직접 호환됩니다.

TM1637 모듈 ESP32 비고
CLK GPIO21 클럭 라인
DIO GPIO22 데이터 I/O 라인
VCC 3.3V 전원
GND GND 접지
ESP32 tm1637 4자리 7세그먼트 디스플레이 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

팁: ESP32의 사용 가능한 GPIO 핀을 자유롭게 사용할 수 있습니다. 코드에서 핀 번호만 업데이트하면 됩니다.

빠른 시작

Thonny IDE를 사용하여 ESP32에서 MicroPython 코드를 설정하고 실행하는 방법:

  • Thonny IDE가 컴퓨터에 설치되어 있는지 확인합니다.
  • ESP32 보드에 MicroPython 펌웨어가 로드되어 있는지 확인합니다.
  • ESP32에서 MicroPython을 처음 사용하는 경우, ESP32 마이크로파이썬 - 시작하기 가이드를 참조하세요.
  • 제공된 배선도에 따라 ESP32 보드를 TM1637 모듈에 연결합니다.
  • 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-TM1637"를 검색하여 DIYables에서 만든 TM1637 4자리 7세그먼트 디스플레이 라이브러리를 찾습니다.
  • DIYables-MicroPython-4Digit7Segment-TM1637를 클릭한 후 Install 버튼을 클릭하여 라이브러리를 설치합니다.
ESP32 tm1637 4자리 7세그먼트 디스플레이 라이브러리
  • 제공된 MicroPython 코드를 복사하여 Thonny 편집기에 붙여넣습니다.
  • 다음 방법으로 코드를 ESP32에 저장합니다:
    • Save 버튼을 클릭하거나 Ctrl+S를 누릅니다.
    • 저장 대화상자에서 MicroPython device를 선택합니다.
    • 파일 이름을 main.py로 지정합니다.
  • 녹색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행합니다.
  • 결과를 관찰합니다 — 4자리 7세그먼트 디스플레이에 숫자, 텍스트, 시간이 예제에 따라 표시됩니다.

기본 코드 템플릿

from DIYables_MicroPython_4Digit7Segment_TM1637 import Display4Digit7SegmentTM1637 import time display = Display4Digit7SegmentTM1637(clk_pin=21, dio_pin=22) #Display stays on automatically — no refresh loop needed display.print(1234)

ESP32 코드 — 정수 표시

""" Example: Display integer numbers on 4-digit 7-segment display with TM1637. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Product page: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon Wiring guide: ESP32: TM1637 Module ESP32 ───────────── ────── CLK -> GPIO21 DIO -> GPIO22 VCC -> 3.3V GND -> GND Raspberry Pi Pico: TM1637 Module Raspberry Pi Pico ───────────── ───────────────── CLK -> GP1 DIO -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: TM1637 Module Arduino Nano ESP32 ───────────── ────────────────── CLK -> D21 (GPIO21) DIO -> D22 (GPIO22) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: TM1637 Module Arduino Nano RP2040 Connect ───────────── ─────────────────────────── CLK -> D1 (GP1) DIO -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_TM1637 import Display4Digit7SegmentTM1637 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: CLK=21, DIO=22 # Raspberry Pi Pico / Nano RP2040: CLK=1, DIO=0 CLK_PIN = 21 DIO_PIN = 22 display = Display4Digit7SegmentTM1637(CLK_PIN, DIO_PIN) 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으로 채워진 42를 "0042"로 표시합니다.

정수 표시 참조

메서드 호출 디스플레이 표시 비고
display.print(0) 0 오른쪽 정렬 단일 자리
display.print(42) 42 오른쪽 정렬
display.print(1234) 1234 4자리 전체 사용
display.print(-5) -5 음수 기호 + 자리
display.print(-123) -123 최대 3자리 음수
display.print(9999) 9999 최대 표시 가능 값
display.print(10000) Err 오버플로 오류
display.print(42, zero_pad=True) 0042 4자리로 0 채우기

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 Product page: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon Wiring guide: ESP32: TM1637 Module ESP32 ───────────── ────── CLK -> GPIO21 DIO -> GPIO22 VCC -> 3.3V GND -> GND Raspberry Pi Pico: TM1637 Module Raspberry Pi Pico ───────────── ───────────────── CLK -> GP1 DIO -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: TM1637 Module Arduino Nano ESP32 ───────────── ────────────────── CLK -> D21 (GPIO21) DIO -> D22 (GPIO22) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: TM1637 Module Arduino Nano RP2040 Connect ───────────── ─────────────────────────── CLK -> D1 (GP1) DIO -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_TM1637 import Display4Digit7SegmentTM1637 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: CLK=21, DIO=22 # Raspberry Pi Pico / Nano RP2040: CLK=1, DIO=0 CLK_PIN = 21 DIO_PIN = 22 display = Display4Digit7SegmentTM1637(CLK_PIN, DIO_PIN) 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.print("HELP") HELP 텍스트 표시
display.print("Hi") Hi 왼쪽 정렬, 2자
display.print("COOL") COOL 4자
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) 100° 3자리, 단위 공간 없음

도수 기호는 display.DEGREE 상수를 통해 문자열에서 직접 사용할 수도 있습니다.

ESP32 코드 — 깜빡이는 콜론으로 시간 표시

""" Example: Display time with blinking colon separator on 4-digit 7-segment display. This module has a colon separator between digit 1 and digit 2, ideal for clock display. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Product page: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon Wiring guide: ESP32: TM1637 Module ESP32 ───────────── ────── CLK -> GPIO21 DIO -> GPIO22 VCC -> 3.3V GND -> GND Raspberry Pi Pico: TM1637 Module Raspberry Pi Pico ───────────── ───────────────── CLK -> GP1 DIO -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: TM1637 Module Arduino Nano ESP32 ───────────── ────────────────── CLK -> D21 (GPIO21) DIO -> D22 (GPIO22) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: TM1637 Module Arduino Nano RP2040 Connect ───────────── ─────────────────────────── CLK -> D1 (GP1) DIO -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_TM1637 import Display4Digit7SegmentTM1637 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: CLK=21, DIO=22 # Raspberry Pi Pico / Nano RP2040: CLK=1, DIO=0 CLK_PIN = 21 DIO_PIN = 22 display = Display4Digit7SegmentTM1637(CLK_PIN, DIO_PIN) hours = 12 minutes = 30 colon_on = True while True: display.print_time(hours, minutes, colon=colon_on) time.sleep(0.5) # Toggle colon every 500ms for blinking effect colon_on = not colon_on

시간 표시 참조

메서드 호출 디스플레이 표시 비고
display.print_time(12, 30) 1230 콜론 켜짐
display.print_time(9, 5) 0905 시·분 0 채우기
display.print_time(12, 30, colon=False) 12 30 콜론 꺼짐 (깜빡임 효과)

시계 디스플레이에서 일반적으로 볼 수 있는 깜빡이는 콜론 효과를 만들려면 500ms마다 colon 파라미터를 토글합니다.

ESP32 코드 — 개별 자릿수 및 콜론 설정

""" Example: Set individual digits and colon on 4-digit 7-segment display with TM1637. Works with: ESP32, Raspberry Pi Pico, Arduino Nano ESP32, Arduino Nano R1 WiFi Product page: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon Wiring guide: ESP32: TM1637 Module ESP32 ───────────── ────── CLK -> GPIO21 DIO -> GPIO22 VCC -> 3.3V GND -> GND Raspberry Pi Pico: TM1637 Module Raspberry Pi Pico ───────────── ───────────────── CLK -> GP1 DIO -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: TM1637 Module Arduino Nano ESP32 ───────────── ────────────────── CLK -> D21 (GPIO21) DIO -> D22 (GPIO22) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: TM1637 Module Arduino Nano RP2040 Connect ───────────── ─────────────────────────── CLK -> D1 (GP1) DIO -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_TM1637 import Display4Digit7SegmentTM1637 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: CLK=21, DIO=22 # Raspberry Pi Pico / Nano RP2040: CLK=1, DIO=0 CLK_PIN = 21 DIO_PIN = 22 display = Display4Digit7SegmentTM1637(CLK_PIN, DIO_PIN) while True: # Set individual numbers on each digit position display.clear() display.set_number(0, 1) display.set_number(1, 2) display.set_number(2, 3) display.set_number(3, 4) # Display shows "1234" time.sleep(2) # Turn colon on — display shows "12:34" display.set_colon(True) time.sleep(2) # Turn colon off — display shows "1234" display.set_colon(False) time.sleep(2) # Set individual characters on each digit position display.clear() display.set_char(0, 'H') display.set_char(1, 'E') display.set_char(2, 'L') display.set_char(3, 'P') # Display shows "HELP" time.sleep(2) # Mix characters and numbers with colon display.clear() display.set_char(0, 'A') display.set_number(1, 3) display.set_char(2, 'b') display.set_number(3, 7) display.set_colon(True) # Display shows "A3:b7" time.sleep(2) # Blinking colon effect with individual digits display.clear() display.set_number(0, 1) display.set_number(1, 2) display.set_number(2, 3) display.set_number(3, 0) for _ in range(5): # Blink 5 times display.set_colon(True) time.sleep(0.5) display.set_colon(False) time.sleep(0.5) time.sleep(1)

개별 자릿수 참조

메서드 호출 설명
display.set_number(position, number) 위치 0-3에 단일 자리(0-9) 설정
display.set_char(position, char) 위치 0-3에 문자 설정
display.set_colon(True) 1번과 2번 자릿수 사이의 콜론 켜기
display.set_colon(False) 콜론 끄기

set_number(), set_char(), set_colon()을 혼합하여 자릿수별로 사용자 정의 디스플레이를 구성할 수 있습니다.

ESP32 코드 — 디스플레이 깜빡이기

""" Example: Blink integer 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 Product page: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon Wiring guide: ESP32: TM1637 Module ESP32 ───────────── ────── CLK -> GPIO21 DIO -> GPIO22 VCC -> 3.3V GND -> GND Raspberry Pi Pico: TM1637 Module Raspberry Pi Pico ───────────── ───────────────── CLK -> GP1 DIO -> GP0 VCC -> 3.3V (pin 36) GND -> GND (pin 38) Arduino Nano ESP32: TM1637 Module Arduino Nano ESP32 ───────────── ────────────────── CLK -> D21 (GPIO21) DIO -> D22 (GPIO22) VCC -> 3.3V GND -> GND Arduino Nano RP2040 Connect: TM1637 Module Arduino Nano RP2040 Connect ───────────── ─────────────────────────── CLK -> D1 (GP1) DIO -> D0 (GP0) VCC -> 3.3V GND -> GND """ from DIYables_MicroPython_4Digit7Segment_TM1637 import Display4Digit7SegmentTM1637 import time # Pin configuration - change the pins to match your wiring and board # ESP32 / Arduino Nano ESP32: CLK=21, DIO=22 # Raspberry Pi Pico / Nano RP2040: CLK=1, DIO=0 CLK_PIN = 21 DIO_PIN = 22 display = Display4Digit7SegmentTM1637(CLK_PIN, DIO_PIN) 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 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)

깜빡임 참조

display.off()로 디스플레이를 끄고 display.on()으로 다시 켭니다. 디스플레이 데이터가 유지됩니다 — on()을 호출하면 print()를 다시 호출하지 않아도 이전 내용이 복원됩니다.

라이브러리 참조

전체 API 문서(모든 생성자, 메서드, 상수 포함)는 DIYables_MicroPython_4Digit7Segment_TM1637 라이브러리 참조를 확인하세요.

다음 단계

  • DS3231 RTC 모듈과 결합하여 실시간 시계를 만들어보세요.
  • DHT11/DHT22 센서를 추가하여 실시간 온도 측정값을 표시해보세요.
  • 버튼을 사용하여 시계 모드와 온도 모드 사이를 전환해보세요.