Arduino MKR WiFi 1010 - TM1637 4-Digit 7-Segment Display

This recipe walks you through driving a TM1637 4-digit 7-segment display with the Arduino MKR WiFi 1010. The MKR WiFi 1010 combines a SAMD21 processor with an ESP32-based NINA-W102 module for Wi-Fi and BLE connectivity. It runs at 3.3V, includes a LiPo battery connector for portable projects, and the TM1637 module accepts 3.3V logic directly - no level shifter required.

Ingredients in this recipe:

Arduino MKR WiFi 1010 TM1637 4-Digit 7-Segment Display

Hardware Preparation

1×Arduino MKR WiFi 1010
1×Micro USB Cable
1×TM1637 4-digit 7-segment Display (colon-separated)
1×Jumper Wires

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables .

The TM1637 Display Module at a Glance

The TM1637 is a dedicated controller for 7-segment LED displays that handles digit multiplexing and brightness control without any help from your code once the data is sent. It uses a 2-wire protocol through CLK and DIO pins and retains the displayed content in its own internal registers.

Here is what the module brings:

  • 4 digits, each made up of 7 segments plus a decimal point
  • Colon separator between the second and third digit for time display
  • 8 software-selectable brightness levels
  • 2-wire serial interface, works at both 3.3V and 5V
  • Latching display - no refresh needed from the MCU
Function Pin
CLK Clock signal input
DIO Data input/output
VCC Power supply (3.3V or 5V)
GND Ground

The MKR WiFi 1010 uses numbered pins (0-14 for digital). Any two digital pins can serve as CLK and DIO. The examples use pins 2 and 3.

Wiring Diagram

Connect the TM1637 module to the MKR WiFi 1010:

  • CLK to pin 2
  • DIO to pin 3
  • VCC to VCC (3.3V)
  • GND to GND
The wiring diagram between Arduino MKR WiFi 1010 TM1637 4-Digit 7-Segment Display

This image is created using Fritzing. Click to enlarge image

Installing the Library

  1. Connect the MKR WiFi 1010 to your computer with a Micro-B USB cable.
  2. Open Arduino IDE and select Arduino MKR WiFi 1010 from the board menu. Choose the correct port.
  3. Navigate to the Libraries panel.
  4. Search for "DIYables_4Digit7Segment_TM1637". Find the version published by DIYables.
  5. Click Install.
Arduino TM1637 4-Digit 7-Segment Display library

Fully self-contained - no additional libraries required.

Note: If the MKR WiFi 1010 does not appear in the board list, install the Arduino SAMD Boards core through the Boards Manager.

Base Template

The simplest sketch you can write with the DIYables_4Digit7Segment_TM1637 library:

#include <DIYables_4Digit7Segment_TM1637.h> #define CLK_PIN 2 #define DIO_PIN 3 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { }

Provide the CLK and DIO pin numbers to the constructor, call begin() once, and the display is ready for action.

Recipe - Display Integer Numbers

This recipe shows how to display various integer values, including negative numbers and zero-padded output.

/* * This Arduino MKR WiFi 1010 code was developed by newbiely.com * * This Arduino MKR WiFi 1010 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mkr/arduino-mkr-wifi-1010-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Integer Example * * Displays various integer values on a 4-digit 7-segment display * with TM1637 driver, including zero-padded numbers. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 2 #define DIO_PIN 3 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Integer Example"); } void loop() { // Display various integers int numbers[] = {0, 42, 1234, -5, -123, 9999}; int count = sizeof(numbers) / sizeof(numbers[0]); for (int i = 0; i < count; i++) { display.print(numbers[i]); Serial.print("Displaying: "); Serial.println(numbers[i]); delay(2000); } // Display with zero padding display.print(42, true); // Shows "0042" Serial.println("Displaying: 0042 (zero-padded)"); delay(2000); }

Make It Happen

  • Wire the TM1637 module to the MKR WiFi 1010 as shown in the wiring diagram.
  • Plug the MKR WiFi 1010 into your computer via Micro-B USB.
  • Open Arduino IDE, confirm board and port, paste the code, then click Upload.
  • Open the Serial Monitor to check the output.

The display cycles through 0, 42, 1234, -5, -123, 9999, and then "0042" with zero-padding.

Quick API Reference

Method Behavior Code Snippet
print(int) Display an integer (-999 to 9999) display.print(1234)
print(int, true) Display with leading zeros display.print(42, true)
clear() Clear all digits display.clear()

Recipe - Display Text and Temperature

This recipe puts text strings and temperature values on the display, including the degree symbol.

/* * This Arduino MKR WiFi 1010 code was developed by newbiely.com * * This Arduino MKR WiFi 1010 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mkr/arduino-mkr-wifi-1010-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - TextAndDegree Example * * Displays text strings, special characters, and temperature * on a 4-digit 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 2 #define DIO_PIN 3 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Text and Degree Example"); } void loop() { // Display text strings const char* texts[] = {"HELP", "Hi", "COOL", "done"}; for (int i = 0; i < 4; i++) { display.print(texts[i]); Serial.print("Displaying: "); Serial.println(texts[i]); delay(2000); } // Display temperature with degree symbol display.printTemperature(25, 'C'); // Shows "25*C" Serial.println("Displaying: 25 degrees C"); delay(2000); display.printTemperature(72, 'F'); // Shows "72*F" Serial.println("Displaying: 72 degrees F"); delay(2000); // Display string with degree constant char buf[5]; buf[0] = '2'; buf[1] = '5'; buf[2] = DIYables_4Digit7Segment_TM1637::DEGREE; buf[3] = 'C'; buf[4] = '\0'; display.print(buf); // Same as printTemperature(25, 'C') Serial.println("Displaying: 25 degrees C (via print)"); delay(2000); }

Make It Happen

  • Wire the module and upload the sketch.
  • Open the Serial Monitor.

The display shows "HELP", "Hi", "COOL", "done", then "25*C" and "72*F".

Quick API Reference

Method Behavior Code Snippet
print(const char*) Display text (up to 4 chars) display.print("HELP")
printTemperature(int, char) Display temperature with degree/unit display.printTemperature(25, 'C')
DEGREE Degree symbol constant display.DEGREE

Recipe - Display Time with Blinking Colon

This recipe creates a clock-style display with the colon toggling every half second.

/* * This Arduino MKR WiFi 1010 code was developed by newbiely.com * * This Arduino MKR WiFi 1010 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mkr/arduino-mkr-wifi-1010-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Time Example * * Displays time in HH:MM format with blinking colon separator * on a 4-digit 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 2 #define DIO_PIN 3 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); int hours = 12; int minutes = 30; bool colonOn = true; void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Time Example"); Serial.println("Displaying 12:30 with blinking colon"); } void loop() { display.printTime(hours, minutes, colonOn); delay(500); // Toggle colon every 500ms for blinking effect colonOn = !colonOn; }

Make It Happen

  • Upload and observe "12:30" with the colon blinking on and off.

Quick API Reference

Method Behavior Code Snippet
printTime(int, int) Display time HHMM with colon display.printTime(12, 30)
printTime(int, int, bool) Display time, control colon state display.printTime(12, 30, false)

Recipe - Individual Digit Control

This recipe sets each digit position independently with numbers, characters, and the colon.

/* * This Arduino MKR WiFi 1010 code was developed by newbiely.com * * This Arduino MKR WiFi 1010 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mkr/arduino-mkr-wifi-1010-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - IndividualDigits Example * * Sets individual digits, characters, and colon on a 4-digit * 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 2 #define DIO_PIN 3 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Individual Digits Example"); } void loop() { // Set individual numbers on each digit position display.clear(); display.setNumber(0, 1); display.setNumber(1, 2); display.setNumber(2, 3); display.setNumber(3, 4); Serial.println("Displaying: 1234"); delay(2000); // Turn colon on display.setColon(true); Serial.println("Displaying: 12:34"); delay(2000); // Turn colon off display.setColon(false); Serial.println("Displaying: 1234"); delay(2000); // Set individual characters display.clear(); display.setChar(0, 'H'); display.setChar(1, 'E'); display.setChar(2, 'L'); display.setChar(3, 'P'); Serial.println("Displaying: HELP"); delay(2000); // Mix characters and numbers with colon display.clear(); display.setChar(0, 'A'); display.setNumber(1, 3); display.setChar(2, 'b'); display.setNumber(3, 7); display.setColon(true); Serial.println("Displaying: A3:b7"); delay(2000); // Blinking colon effect display.clear(); display.setNumber(0, 1); display.setNumber(1, 2); display.setNumber(2, 3); display.setNumber(3, 0); Serial.println("Blinking colon: 12:30"); for (int i = 0; i < 5; i++) { display.setColon(true); delay(500); display.setColon(false); delay(500); } delay(1000); }

Make It Happen

  • Upload and observe the different digit and character combinations.

Quick API Reference

Method Behavior Code Snippet
setNumber(int, int) Set digit 0-9 at position 0-3 display.setNumber(0, 1)
setChar(int, char) Set character at position 0-3 display.setChar(0, 'H')
setColon(bool) Control colon on/off display.setColon(true)
setSegments(int, uint8_t) Set raw segments at position 0-3 display.setSegments(0, 0x76)

Troubleshoot

  • Display is blank: Check all four wires. Verify CLK and DIO pin numbers match the code and VCC goes to 3.3V (VCC pin on MKR).
  • Wrong characters displayed: CLK and DIO are probably swapped. Switch the two signal wires.
  • Display too dim: Call setBrightness(7) for maximum brightness.
  • Compile error: Make sure DIYables_4Digit7Segment_TM1637 is installed via the Library Manager.
  • Board not showing up: Install the Arduino SAMD Boards core through the Boards Manager if the MKR WiFi 1010 does not appear in the board list.

Platform Support

This library relies solely on Arduino standard APIs and is compatible with all Arduino-supported platforms (architectures=*).

Learn More

※ OUR MESSAGES

  • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!