Arduino Nano ESP32 - 74HC595 4-Digit 7-Segment Display

Welcome to this hands-on workshop where we connect a 74HC595 4-digit 7-segment display module to an Arduino Nano ESP32. The Nano ESP32 is built around the ESP32-S3 chip, giving you Wi-Fi, Bluetooth Low Energy, and dual-core processing power - all packed into the familiar Nano form factor with a USB-C connector.

In this workshop you will:

Arduino Nano ESP32 74HC595 4-Digit 7-Segment Display

Hardware Preparation

1×Arduino Nano ESP32
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×74HC595 4-digit 7-segment Display
1×Jumper Wires
1×Breadboard
1×Recommended: Screw Terminal Expansion Board for Arduino Nano
1×Recommended: Breakout Expansion Board for Arduino Nano
1×Recommended: Power Splitter for Arduino Nano ESP32

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 .

Overview of the 74HC595 4-Digit 7-Segment Display

This compact module pairs four 7-segment digits with a 74HC595 shift register. Data is shifted in serially through 3 pins and then latched to the LED segments. The library handles the digit multiplexing automatically - you set a value with print() and the display keeps showing it.

Function Pin Description
SCLK (SH_CP) Serial Clock Clocks data bits into the register
RCLK (ST_CP) Register Clock Latches shifted data to outputs
DIO (DS) Data Input Serial data line
VCC Power 3.3V or 5V
GND Ground Common ground

Note: The Arduino Nano ESP32 operates at 3.3V. The 74HC595 module works at 3.3V without issues.

Wiring Diagram

Connect the display to the Nano ESP32:

  • SCLK to D7
  • RCLK to D6
  • DIO to D5
  • VCC to 3.3V
  • GND to GND
The wiring diagram between Arduino Nano ESP32 and 74HC595 4-Digit 7-Segment Display

This image is created using Fritzing. Click to enlarge image

Library Setup

  1. Plug the Arduino Nano ESP32 into your computer through its USB-C port.
  2. Open Arduino IDE. Pick Arduino Nano ESP32 from the board list and select the right port.
  3. Click the Libraries icon on the left sidebar.
  4. Type "DIYables_4Digit7Segment_74HC595" in the search field. Find the DIYables entry.
  5. Hit Install. Select version 2.0.0 or later.
Arduino Nano ESP32 74HC595 4-Digit 7-Segment Display library

Self-contained library - nothing else to install.

Starter Sketch

The minimum code needed to get going:

#include <DIYables_4Digit7Segment_74HC595.h> #define SCLK_PIN D7 #define RCLK_PIN D6 #define DIO_PIN D5 DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { display.loop(); }

begin() sets up the pins. loop() handles multiplexing - call it as often as possible. Use display.delay() instead of delay() to keep the display alive during waits.

Workshop - Display Integers

Shows integers from -999 to 9999, including zero-padded output.

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN D7 // The Arduino Nano ESP32 pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN D6 // The Arduino Nano ESP32 pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN D5 // The Arduino Nano ESP32 pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); int numbers[] = {0, 42, 1234, -5, -123, 9999}; int numCount = 6; int currentIndex = 0; bool showZeroPad = false; unsigned long lastChange = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Integer Example"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastChange >= 2000) { lastChange = millis(); if (!showZeroPad) { display.print(numbers[currentIndex]); Serial.print("Displaying: "); Serial.println(numbers[currentIndex]); currentIndex++; if (currentIndex >= numCount) { currentIndex = 0; showZeroPad = true; } } else { display.print(42, true); // Shows "0042" Serial.println("Displaying: 0042 (zero-padded)"); showZeroPad = false; } } }

Hands-On

  • Wire the display to the Nano ESP32 as described above.
  • Connect the Nano ESP32 to your computer via USB-C.
  • In Arduino IDE, choose the board and port, paste the code, and click Upload.
  • Open the Serial Monitor to observe the results.

The display cycles through 0, 42, 1234, -5, -123, 9999, then 0042 (zero-padded).

Method Reference

Method Action Syntax
print(int) Display an integer display.print(1234)
print(int, true) Integer with zero-padding display.print(42, true)
loop() Refresh the display display.loop()

Workshop - Display Floats

Floating-point numbers with auto and fixed decimals.

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN D7 // The Arduino Nano ESP32 pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN D6 // The Arduino Nano ESP32 pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN D5 // The Arduino Nano ESP32 pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Float Example"); } void loop() { // Auto decimal placement display.print(1.5); // Shows " 1.5" Serial.println("Auto decimal: 1.5"); display.delay(2000); display.print(12.34); // Shows "12.34" Serial.println("Auto decimal: 12.34"); display.delay(2000); display.print(3.141); // Shows "3.141" Serial.println("Auto decimal: 3.141"); display.delay(2000); display.print(-1.2); // Shows "-1.20" Serial.println("Auto decimal: -1.20"); display.delay(2000); display.print(0.5); // Shows " 0.5" Serial.println("Auto decimal: 0.5"); display.delay(2000); // Fixed decimal places display.print(23.5, 1); // 1 decimal place: shows "23.5" Serial.println("1 decimal place: 23.5"); display.delay(2000); display.print(1.5, 2); // 2 decimal places: shows "1.50" Serial.println("2 decimal places: 1.50"); display.delay(2000); // Zero-padded display.print(1.5, 2, true); // Shows "01.50" Serial.println("2 decimal places, zero-padded: 01.50"); display.delay(2000); }

Hands-On

  • Upload the code and open the Serial Monitor.

Shows auto-decimal floats, then fixed 1 and 2 decimal places, and zero-padded.

Workshop - Text and Temperature

Text strings, degree symbol, and temperature display.

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN D7 // The Arduino Nano ESP32 pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN D6 // The Arduino Nano ESP32 pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN D5 // The Arduino Nano ESP32 pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); const char* texts[] = {"HELP", "Hi", "COOL", "done"}; int textCount = 4; int currentIndex = 0; int phase = 0; unsigned long lastChange = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Text and Degree Example"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastChange >= 2000) { lastChange = millis(); if (phase == 0) { // Display text strings display.print(texts[currentIndex]); Serial.print("Text: "); Serial.println(texts[currentIndex]); currentIndex++; if (currentIndex >= textCount) { currentIndex = 0; phase = 1; } } else if (phase == 1) { // Display temperature 25 degrees C display.printTemperature(25, 'C'); Serial.println("Temperature: 25 C"); phase = 2; } else if (phase == 2) { // Display temperature 72 degrees F display.printTemperature(72, 'F'); Serial.println("Temperature: 72 F"); phase = 3; } else if (phase == 3) { // Display degree symbol using string with DEGREE_CHAR constant char degStr[5]; degStr[0] = '2'; degStr[1] = '5'; degStr[2] = DEGREE_CHAR; degStr[3] = 'C'; degStr[4] = '\0'; display.print(degStr); Serial.println("String with degree: 25 deg C"); phase = 4; } else { // Display string with dots display.print("1.2.3.4"); Serial.println("Dots: 1.2.3.4"); phase = 0; } } }

Hands-On

  • Upload the code and open the Serial Monitor.

Shows "HELP", "Hi", "COOL", "done", temperatures, and inline dots.

Workshop - Time

Clock-style HH.MM with blinking dot.

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN D7 // The Arduino Nano ESP32 pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN D6 // The Arduino Nano ESP32 pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN D5 // The Arduino Nano ESP32 pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); int hours = 12; int minutes = 30; bool colonOn = true; unsigned long lastToggle = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Time Example"); Serial.println("Displaying 12:30 with blinking dot separator"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastToggle >= 500) { lastToggle = millis(); display.printTime(hours, minutes, colonOn); colonOn = !colonOn; // Toggle dot separator every 500ms for blinking effect } }

Hands-On

  • Upload the code and open the Serial Monitor.

Displays 12.30 with the dot blinking every 500ms.

Troubleshoot

Issue Possible Cause Resolution
Display blank Wiring problem Check VCC, GND, and data pin connections
Wrong characters Anode/cathode mismatch Pass false to constructor for common cathode
Flickering delay() blocking loop() Use display.delay() instead
Upload fails Board in wrong mode Hold the BOOT button while pressing RESET, then retry upload

Platform Support

The library is built entirely on Arduino standard APIs and supports all Arduino-compatible platforms (architectures=*).

※ 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!