Skip to the content
PCBKitNew board
2 layers55 × 55 mmControlBoard, the printed circuit board in 3D

A small project that combines ESP32 with a vintage Soviet Nixie tube from the 70’ to create an artistic clock. Originally developed on ESP8266/Arduino, now evolved to ESP32 with ESP-IDF for greater performance and stability.

Size
55 × 55 mm
Copper layers
2
Thickness
1.6 mm
Parts
39
Nets
58
Pads
200
Tracks, vias
290, 75
Pours
8
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
13 Apr 2020
Updated
18 Dec 2025

Overview

ControlBoard is an open-source printed circuit board by Deni90, from the Deni90/singleDigitNixieClock repository on GitHub, published under the MIT licence. It is a 2-layer board of 55 × 55 mm with 39 parts on 58 nets, routed with 290 tracks and 75 vias.

It is built around the ESP32-WROOM-32D, CH340G and DS3231MZ+, with the LM1117DT-3.3 and BC847 among its other parts. Its parts include 11 capacitors, 11 resistors, 4 ICs, 2 diodes and 2 connectors. It belongs with the lEDs and displays and retro computing and games boards and the ESP32 boards of this library.

Main components

5

README

README.md

Single Digit Nixie Clock

A small project combining ESP32 with a vintage Soviet Nixie tube from the 70’ to create an artistic clock. Originally developed on ESP8266/Arduino, now evolved to ESP32 with ESP-IDF for greater performance and stability.

Huge thank you to PCBWay for sponsoring this project!

Single Digit Nixie Clock

For more details follow project logs on: my personal blog or hackaday.io

Some of the key features:

  • Shows current time (hours and minutes) on a single nixie tube.
  • Configurable RGB LED backlight lights up the nixie tube every second.
  • USB powered.
  • Hosts a web server for easy setup & configuration.
  • Synchronises time with NTP server.

Operating modes:

  • AP mode
    • This mode is hosting a dedicated open wifi network called NixieClock. Its main purpose is to use it for first time setup to update wifi configuration. In addition, this mode will be activated when the clock is not able to connect to a configured network. Clock hosts a captive portal. A configuration page will be opened automatically upon connecting to NixieClock network.
  • Client mode
    • In this mode the clock is connected to a configured wifi network. If there is internet access, the clock will synchronize its RTC with NTP server at startup and then every hour periodically.

In both modes, the configuration page is easily reachable on the following URL: <HOSTNAME>.local. There is no need to keep track of the IP address, the clock is hosting Multicast DNS (mDNS) server. mDNS is supported by Chrome and Safari browsers out of the box.

By default, the HOSTNAME is set to mynixieclock.

Firmware

This project started on ESP8266 with the Arduino framework, which was great for fast prototyping. However, the reliance on third-party libraries often led to instability and crashes.

To ensure long-term support and stability, the project was migrated from the now-obsolete ESP8266 to the ESP32, using ESP-IDF in C++.

This move provides:

  • A robust and stable firmware base.
  • Full access to ESP32’s hardware features.
  • Use of official ESP-IDF components

REST API

End pointMethodBody (JSON)Description
/api/v1/led/led_infoGET{
    “R”: <0-255>,
    “G”: <0-255>,
    “B”: <0-255>,
    “state”: <0-2>
}
Get color and state of the backlight (RGB LED).
/api/v1/led/led_infoPOST{
    “R”: <0-255>,
    “G”: <0-255>,
    “B”: <0-255>,
    “state”: <0-2>
}
Set color and state of the backlight (RGB LED).
/api/v1/clock/sleep_infoGET{
     “sleep_before”: <value>,
     “sleep_after”: <value>
}
Get sleep mode configuration. The time before and after (in minutes) the backlight will be turned off.
/api/v1/clock/sleep_infoPOST{
     “sleep_before”: <value>,
     “sleep_after”: <value>
}
Set sleep mode configuration.
/api/v1/clock/time_infoGET{
    "tz_zone": "<Geographic zone>",
    “tz_offset”: “<Proleptic TZ>",
    "time_format": <"12h" | "24h">
}
Get time zone configuration
/api/v1/clock/time_infoPOST{
    "tz_zone": "<Geographic zone>",
    “tz_offset”: “<Proleptic TZ>",
    "time_format": <"12h" | "24h">
}
Set time zone configuration
/api/v1/wifi/wifi_infoGET{
    "hostname": "<HOSTNAME>",
    “SSID”: “<Wifi SSID>”,
    "auth_type": <"open" | "wpa2" | "wpa3">,
    “password”: “<base64 encoded password>”
}
Get wifi configuration.
/api/v1/wifi/wifi_infoPOST{
    "hostname": "<HOSTNAME>",
    “SSID”: “<Wifi SSID>”,
    "auth_type": <"open" | "wpa2" | "wpa3">,
    “password”: “<base64 encoded password>”
}
Set wifi configuration.

Front-end layout & design

Initially, the front end was implemented with jQuery mobile. Reason for choosing this framework was in its simplicity. It provides a simple way to create and control user interface components. One thing that always annoyed me was its low response time. It took too much time to load jQuery, jQueryMobile and theme resources. On top of this, this slow response time caused WDT resets.

One more thing, I just realised that jQuery mobile project is deprecated since October 7, 2021. Huh, when it comes to web related technologies, it looks like I'm living under a rock...

To solve these issues, I opted to completely re implement the frontend using plain HTML, CSS and JavaScript. The end result looks almost the same as the previous design or even better. Responsiveness and stability increased significantly. The only drawback is now in maintenance and extension. It is required to implement everything manually.

Custom design of nixie clock's frontend

Design

Schematic and PCB are designed with KiCAD

Control board

Control board is basically a re-packaged generic ESP32 board design connected with DS3231 real time clock and NCH8200HV high voltage boost module board.

Schematic

Control board schematic

Display board

Display board uses a CD4028 BCD-to-decimal decoder. Its purpose is to reduce the number of required GPIO pins from 10 to just 4 for showing digits from 0 to 9. Compared to dedicated BCD to decimal decoder nixie drivers (like K511ID1), the CD4028 is a widely spread component and it is available in SMD package. Since CD4028 has a voltage range from 3.0V to 15V it is not compatible with nixie tube’s operating voltage of 170V out of the box. This problem is solved with MMBTA42, a high voltage transistor, rated to more than 200V.

The rest of the display board consists of a WS2812B RGB LED and a pin header used to connect with the control board.

Schematic

Display board schematic

PCB manufacturing

A representative from PCBWay contacted me because he was deeply impressed by my project and offered to sponsor a batch of PCBs to test out their services.

Since I recently moved to KiCad, it was a perfect opportunity to try out the PCBWay Plug-in for KiCad. It provides a simple way to place an order in just a few clicks. There is no need to bother with exporting gerber files, everything is automated. You just need to update the PCB specification and fill in the shipping information on the webpage. That’s it.

The entire journey from placing the order to receiving the package took less than a week. Incredible! PCBWay did a superb job, PCBs are amazing. I am more than impressed.

Assembled control and display PCBs for the Nixie clock

Enclosure design

3D model is made with Autodesk Fusion 360.

The end result is a simple box shaped design with holes for the nixie tube and USB connector.

3D model of the enclosure for nixie clock

Third-party dependencies

This project includes firmware/flash_data/frontend/zones.json from https://github.com/nayarsystems/posix_tz_db, licensed under the MIT License.

Resources

Parts

39
QtyValueFootprintReferences
4100nCapacitor_SMD:C_0603_1608MetricC6, C7, C12, C13
410uCapacitor_Tantalum_SMD:CP_EIA-3216-10_Kemet-IC3, C4, C5, C11
412kResistor_SMD:R_0603_1608MetricR12, R14, R15, R16
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
34k7Resistor_SMD:R_0603_1608MetricR9, R10, R13
222pCapacitor_SMD:C_0603_1608MetricC9, C10
2470Resistor_SMD:R_0603_1608MetricR6, R7
25k1Resistor_SMD:R_0603_1608MetricR8, R11
2BC847Package_TO_SOT_SMD:SOT-23T1, T2
2ESD321Diode_SMD:D_SOD-523D1, D2
112MHzcristal:405I35D25M00000Y2
11uCapacitor_Tantalum_SMD:CP_EIA-3216-10_Kemet-IC8
1Battery_CellBattery:BatteryHolder_MYOUNG_BS-07-A1BJ001_CR2032BT1
1CH340GPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU3
1Conn_01x10_PinConnector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_VerticalJ1
1DS3231MPackage_SO:SOIC-16W_7.5x10.3mm_P1.27mmU4
1ESP32-WROOM-32DRF_Module:ESP32-WROOM-32D-no-keepoutU5
1LM1117DT-3.3Package_TO_SOT_SMD:TO-252-3_TabPin2U2
1NCH8200HVcontrolBoard:NCH8200HVUNK1
1USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ2

Questions

How big is the ControlBoard PCB?

It measures 55 × 55 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ControlBoard use?

39 parts, built around the ESP32-WROOM-32D, CH340G, DS3231MZ+ and LM1117DT-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ControlBoard KiCad files?

From the Deni90/singleDigitNixieClock repository on GitHub, at the commit this page was made from: the board is hardware/controlBoard/controlBoard.kicad_pcb and its schematic hardware/controlBoard/controlBoard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ControlBoard design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from Deni90/singleDigitNixieClock

1
  • 2 layers55 × 55 mmDisplayBoard, the printed circuit board in 3D

    DisplayBoard

    Deni90/singleDigitNixieClock

    A small project that combines ESP32 with a vintage Soviet Nixie tube from the 70’ to create an artistic clock. Originally developed on ESP8266/Arduino, now evolved to ESP32 with ESP-IDF for greater performance and…

    38 parts5MIT

Similar boards

  • 2 layers122 × 87.4 mmGETWAY, the printed circuit board in 3D

    GETWAY

    maivananh111/GETWAY_PCB

    264 parts
  • 2 layers85 × 85 mmFront Panel PCB 1, the printed circuit board in 3D

    Front Panel PCB 1

    RiddheshVeling/Industrial-Flowmeter-Totalizer-with-Modbus-based-HMI-and-Data-Logging

    EXTC Final year project: Industrial flowmeter totalizer with Modbus-based HMI for real-time monitoring and data logging using STM32 and RS485.

    47 parts
  • 2 layers67.3 × 99.7 mmSensor, the printed circuit board in 3D

    Sensor

    oakayasaroglu/esp32d_i2c

    esp32d based i2c pcb

    40 parts1
  • 2 layers66.2 × 80 mmSOLDERING IRON CONTROLLER, the printed circuit board in 3D

    SOLDERING IRON CONTROLLER

    MAATHES-THILAK-K/Solder-Master-PRO

    Professional-grade soldering temperature control on a DIY budget

    34 partsApache-2.0
  • 4 layers100 × 80 mmESP32, the printed circuit board in 3D

    ESP32

    Tanmayeers/Projects

    Specifications: 1. Operting Voltage: 9V 2. Operating Current: 200mA 3. Output Voltage Swing: 6.5V 4. 3dB - Bandwidth: 100 ± 10 Hz 5. Noise: 5.406mVrms

    63 parts1
  • 4 layers99 × 99 mmMPPT Controller, the printed circuit board in 3D

    MPPT Controller

    akbar-q/Circuits-PCB-HardwareDesign

    The High Voltage Arc Detector is a non-contact RF-based sensing system that detects high-voltage electrical arcs.

    101 parts
  • 2 layers40 × 85.1 mmLidar 2, the printed circuit board in 3D

    Lidar 2

    Slenderman00/Lidar

    19 parts