아두이노 우노 Q TM1637 4자리 7-세그먼트 디스플레이

Arduino UNO Q로 밝은 LED 디스플레이에 숫자와 시간을 표시하고 싶으신가요? 이 초보자 친화적 튜토리얼은 Arduino UNO Q와 함께 TM1637 4자리 7-세그먼트 디스플레이를 사용하는 방법을 단계별로 보여줍니다.

이 튜토리얼에서 배울 내용:

Arduino UNO Q tm1637 4-digit 7-segment 디스플레이

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×TM1637 4-digit 7-segment 디스플레이 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

TM1637 4자리 7-세그먼트 디스플레이 소개

TM1637 4자리 7-세그먼트 디스플레이는 전용 드라이버 IC를 사용하여 디스플레이 데이터를 내부에 저장하므로 MCU에서 2개의 신호 와이어만 필요합니다.

주요 사양 및 기능:

  • 자릿수: 4자리 7-세그먼트, 소수점 포함
  • 콜론 LED: 자릿수 1과 2 사이 — 시계 스타일 HH:MM 디스플레이에 완벽
  • 드라이버 IC: TM1637 — 자체 메모리에 데이터 저장, 지속적인 업데이트 불필요
  • 인터페이스: 2-와이어 직렬 (CLK + DIO) — 간단하고 최소한의 배선
  • 밝기: 8단계 조정 가능한 밝기
  • 전원: 3.3V 또는 5V 호환
  • 라이브러리: DIYables_4Digit7Segment_TM1637 — 정수, 실수, 텍스트, 온도 및 시간 지원
기능 설명
CLK Clock Signal Serial clock input
DIO Data I/O Serial data input/output
VCC Power 3.3V or 5V supply
GND Ground Common ground

핀아웃

tm1637 4-digit 7-segment 디스플레이 사용법 핀아웃
  • CLK: 클록 신호 — MCU와 TM1637 간 데이터 전송 동기화
  • DIO: 데이터 입력/출력 — 드라이버 IC와 직렬 데이터 전송
  • VCC: 전원 공급 — 3.3V 또는 5V 연결
  • GND: 접지 — 공통 접지

배선 다이어그램

TM1637 4자리 7-세그먼트 디스플레이를 Arduino UNO Q MCU에 표시된 대로 연결합니다:

Arduino UNO Q tm1637 4-digit 7-segment 디스플레이 연결 배선도

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

TM1637 핀 Arduino UNO Q MCU 핀 설명
CLK D9 Clock signal
DIO D10 Data input/output
VCC 5V Power supply
GND GND Ground

Arduino UNO Q 코드

Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다:

  • STM32 MCU는 두 개의 디지털 핀을 통해 TM1637 7-세그먼트 디스플레이를 직접 구동합니다
  • Qualcomm MPU는 Debian Linux를 실행하며 Wi-Fi, Python 및 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서 Bridge를 통해 두 프로세서가 함께 작동하는 방법을 보여줍니다.

아래 스케치는 7-세그먼트 디스플레이에서 0부터 9999까지 카운트하며 매초 증가합니다.

참고: 74HC595 디스플레이와 달리 TM1637은 내부 메모리에 데이터를 저장합니다 — loop() 새로고침 함수를 호출할 필요가 없습니다. delay()를 자유롭게 사용할 수 있습니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-tm1637-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_TM1637.h> #define CLK_PIN 9 // MCU pin connected to CLK of TM1637 7-segment display #define DIO_PIN 10 // MCU pin connected to DIO of TM1637 7-segment display DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); int count = 0; unsigned long lastUpdate = 0; void setup() { display.begin(); display.print(0); } void loop() { if (millis() - lastUpdate >= 1000) { lastUpdate = millis(); count++; if (count > 9999) count = 0; display.print(count); } }

빠른 단계

Arduino UNO Q를 처음 사용하시나요? 계속 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.

  • 연결: TM1637 디스플레이를 표시된 대로 Arduino UNO Q에 배선한 후 USB-C 케이블을 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드를 감지할 때까지 기다립니다 — 첫 실행 시 몇 분이 걸릴 수 있습니다.
  • 새로운 앱 생성: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다 (예: DIYables_7SegTM1637).
  • Create를 클릭하여 확인합니다.
  • 새로운 앱 내에 폴더 및 파일 집합이 생성됩니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • sketch/sketch.ino 파일을 찾습니다 — MCU 스케치를 붙여넣을 위치입니다.
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 스케치 파일에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • Search for DIYables_4Digit7Segment_TM1637 created by DIYables.io and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    DIYables_4Digit7Segment_TM1637 DIYables.io

    Supports integer display, text, temperature with degree symbol, time with colon separator, brightness control, and individual digit control. Uses 2-wire CLK/DIO interface. Compatible with all Arduino boards.

    1.0.0
    Install
    More Info
    • 업로드: Arduino App Lab의 Run 버튼을 클릭하여 STM32로 컴파일하고 업로드합니다.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    TM1637 디스플레이가 0부터 9999까지 카운트하기 시작하며 매초 증가합니다!

    • 유용한 팁: setup()에서 display.setBrightness(7)을 사용하여 최대 밝기 수준을 설정합니다 (0 = 가장 어둡게, 7 = 가장 밝게).

    Bridge: Linux + MCU

    이 섹션은 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하여 Linux 측에서 TM1637 디스플레이를 원격으로 제어하는 방법을 보여줍니다:

    • TM1637 7-세그먼트 디스플레이는 MCU (STM32)에 연결됩니다 — MCU는 2-와이어 직렬을 통해 값을 씁니다
    • MPU는 디스플레이를 직접 제어할 수 없습니다Bridge.call()을 통해 MCU에 업데이트 값을 요청해야 합니다
    • MPU에는 Wi-Fi가 있습니다 — 전체 Debian Linux를 실행하며 인터넷에 연결하고 디스플레이 업데이트를 원격으로 푸시할 수 있습니다
    • Arduino_RouterBridge는 두 프로세서 간 RPC 통신을 가능하게 합니다
    • ⚠️ /dev/ttyHS1 (Linux)과 Serial1 (MCU)는 라우터에 예약되어 있습니다 — 사용자 코드에서 절대 열지 마세요

    요약: MCU가 TM1637 디스플레이를 구동 → MPU가 값을 전송 → MPU가 인터넷을 통해 어디서나 디스플레이를 업데이트할 수 있습니다.

    MCU 코드 (Bridge)

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-tm1637-4-digit-7-segment-display */ #include "Arduino_RouterBridge.h" #include <DIYables_4Digit7Segment_TM1637.h> #define CLK_PIN 9 #define DIO_PIN 10 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); String current_value = ""; void display_number(String text) { int number = text.toInt(); current_value = text; display.print(number); Monitor.println("7SEG: " + text); } void display_float(String text) { float value = text.toFloat(); current_value = text; display.print(value, 1); Monitor.println("7SEG float: " + text); } void clear_display() { current_value = ""; display.clear(); Monitor.println("7SEG cleared"); } String get_status() { if (current_value == "") return "Display is clear"; return "Display shows: " + current_value; } void setup() { Bridge.begin(); Monitor.begin(9600); display.begin(); display.print(0); Bridge.provide_safe("display_number", display_number); Bridge.provide_safe("display_float", display_float); Bridge.provide_safe("clear_display", clear_display); Bridge.provide("get_status", get_status); } void loop() { }

    Python 코드 (Bridge)

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-tm1637-4-digit-7-segment-display */ from arduino.app_utils import * import time def loop(): result = Bridge.call("display_number", "1234") print(result) time.sleep(3) result = Bridge.call("display_float", "26.5") print(result) time.sleep(3) result = Bridge.call("display_number", "-42") print(result) time.sleep(3) result = Bridge.call("clear_display") print(result) time.sleep(2) result = Bridge.call("get_status") print(result) time.sleep(2) App.run(user_loop=loop)

    빠른 단계

    • 연결: TM1637 디스플레이를 Arduino UNO Q에 배선하고 USB-C 케이블을 연결합니다.
    • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 기다립니다.
    • 새로운 앱 생성: Create New App을 클릭하고 DIYables_7SegTM1637Bridge라고 이름을 지정한 후 Create를 클릭합니다.
    • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 Python 파일에 붙여넣습니다.
    • 업로드: Arduino App Lab의 Run 버튼을 클릭합니다.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    [2026-04-29 09:00:01] 7SEG: 1234 [2026-04-29 09:00:04] 7SEG float: 26.5 [2026-04-29 09:00:07] 7SEG: -42 [2026-04-29 09:00:09] 7SEG cleared
    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 09:00:01] OK [2026-04-29 09:00:04] OK [2026-04-29 09:00:07] OK [2026-04-29 09:00:09] OK [2026-04-29 09:00:11] Display is clear

    Telegram

    Telegram을 사용하여 TM1637 7-세그먼트 디스플레이를 어디서나 제어합니다. 휴대폰에서 숫자를 보내면 디스플레이가 즉시 업데이트됩니다.

    MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지합니다.

    Python 코드 (Telegram)

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-tm1637-4-digit-7-segment-display */ from arduino.app_utils import * import requests import time TELEGRAM_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception: pass return [] def send_message(text): url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage" requests.post(url, data={"chat_id": CHAT_ID, "text": text}) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] message = update.get("message", {}) text = message.get("text", "") if text.startswith("/number "): number = text[8:].strip() result = Bridge.call("display_number", number) send_message(result) elif text.startswith("/float "): value = text[7:].strip() result = Bridge.call("display_float", value) send_message(result) elif text == "/clear": result = Bridge.call("clear_display") send_message(result) elif text == "/status": result = Bridge.call("get_status") send_message(result) elif text == "/start": send_message("Commands:\n/number <value> - Show integer on display\n/float <value> - Show float on display\n/clear - Clear the display\n/status - Get current display value") App.run(user_loop=loop)

    빠른 단계

    • YOUR_TELEGRAM_BOT_TOKEN을 BotFather로부터 얻은 실제 봇 토큰으로 바꿉니다.
    • YOUR_CHAT_ID를 Telegram 채팅 ID로 바꿉니다.
    • 이 Python 코드를 앱의 Python 파일에 붙여넣습니다 (동일한 MCU 스케치 유지).
    • Run 버튼을 클릭합니다. Telegram을 열고 봇에 명령을 보냅니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 09:15:00] Waiting for Telegram messages... [2026-04-29 09:15:08] Received: /number 2025 [2026-04-29 09:15:22] Received: /float 23.4 [2026-04-29 09:15:40] Received: /status
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /number 2025
    10:15 AM ✓✓
    OK
    10:16 AM
    /float 23.4
    10:17 AM ✓✓
    OK
    10:18 AM
    /status
    10:19 AM ✓✓
    Display shows: 23.4
    10:20 AM
    /clear
    10:21 AM ✓✓
    OK
    10:22 AM

    OpenClaw

    You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial

    프로젝트 아이디어

    Arduino UNO Q와 함께 TM1637 7-세그먼트 디스플레이를 사용하여 많은 유용한 프로젝트를 구축할 수 있습니다:

    • 인터넷 시계: Python이 NTP를 통해 현재 시간을 가져와 MCU로 보내 콜론이 깜빡이는 HH:MM 형식으로 표시
    • 원격 카운터: Telegram을 통해 디스플레이에 카운트 값을 보냅니다 — 생산 카운터 또는 스코어보드에 유용합니다
    • 실시간 온도 디스플레이: MCU의 센서에서 온도를 가져와 Bridge를 통해 7-세그먼트 디스플레이에 표시
    • 카운트다운 타이머: Python이 Bridge를 통해 시작 값을 보내고 MCU는 디스플레이에서 0까지 카운트다운
    • 포모도로 타이머: TM1637 디스플레이에 작업/휴식 간격을 표시하며 Telegram을 통해 제어 및 추적