
Cooling Pump Board
byui-formula-hybrid/legacy-Cooling-Pump-Board
BYUI Cooling pump CAN control board

A custom ESP32-based clock platform driving WS2812B/NeoPixel LED displays. Firmware and PCB are display-agnostic, supporting any addressable LED clock with minimal adjustments. The reference implementation drives a 4-digit Lixie tube display, combining modern IoT hardware with classic nixie-style aesthetics.
Timekeeper is an open-source printed circuit board by liam-tirpitz, from the liam-tirpitz/TickTock repository on GitHub. It is a 4-layer board of 70 × 50 mm with 57 parts on 88 nets, routed with 373 tracks and 159 vias.
It is built around the CH340C, ESP32-WROOM-32 and NEO-M8M, with the AP2112K-3.3, DS3232MZ+ and TPD2EUSB30ADRT among its other parts. Its parts include 19 resistors, 11 capacitors, 7 ICs, 6 connectors and 5 diodes. It belongs with the lEDs and displays boards and the ESP32 boards of this library.
A custom ESP32-based clock platform for WS2812B-driven LED clocks. The firmware and PCB are designed to be display-agnostic: any clock that accepts a stream of addressable LEDs (WS2812B/NeoPixel) can be driven with minor adjustments to the display layer. This repository's reference implementation drives a 4-digit Lixie tube display.
Time is sourced from a 3-tier fallback chain: GPS → NTP → RTC, ensuring accurate time even without network or satellite coverage. The display integrates with Home Assistant via MQTT.
The display logic is isolated in MqttDisplay.h/cpp and main.cpp. To drive a different WS2812B-based clock (e.g. a 7-segment LED display, a nixie-style digit ring, or a custom matrix):
Lixie calls in MqttDisplay.cpp and main.cpp with your own FastLED or display-library code.LIXIE_PIN and LIXIE_DIGIT_COUNT in config.defaults.h to match your LED count and data pin.TimeManager class, configuration system, and MQTT integration require no changes.Protject_Tick_Tock/
├── software/
│ ├── TickTock2/ # Active PlatformIO firmware (start here)
├── hardware/
│ └── timekeeper/ # KiCad V3 mainboard schematic & PCB layoutThe PCB provides power, programming, and I2C routing for the core timekeeping components. The display connector exposes a single WS2812B data line and can be wired to any compatible LED clock display.
| Component | Part | Interface | Address |
|---|---|---|---|
| MCU | ESP32-WROOM-32 | — | — |
| GPS | u-blox NEO-6M | I2C / DDC | 0x42 |
| RTC | DS3231M | I2C | 0x68 |
| Display | WS2812B (any) | Single-wire (GPIO 17) | — |
| I2C bus | — | SDA=GPIO21, SCL=GPIO22 | — |
The custom PCB design (V3) is in hardware/timekeeper/. Open timekeeper.kicad_pro in KiCad 7+.
The active firmware lives in software/TickTock2/ and is built with PlatformIO.
Managed automatically by PlatformIO:
mikalhart/TinyGPSPlus — GPS NMEA parsingmakuna/RTC — DS3231M driverknolleary/PubSubClient — MQTTbblanchon/ArduinoJson — MQTT payload encodingBundled in lib/:
FastLED — WS2812B LED driverLixie — Lixie display abstraction (reference implementation; replace for other displays)All settings have defaults in src/config.defaults.h. To override with your own credentials and settings, create src/config.local.h (gitignored):
// src/config.local.h
#pragma once
#undef WIFI_SSID
#define WIFI_SSID "your_network"
#undef WIFI_PASS
#define WIFI_PASS "your_password"
// Optional: MQTT credentials
#undef MQTT_HOST
#define MQTT_HOST "homeassistant.local"
#undef MQTT_USER
#define MQTT_USER "mqtt_user"
#undef MQTT_PASS
#define MQTT_PASS "mqtt_password"
// Timezone — POSIX TZ string
// Full list: https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
#undef TIMEZONE_POSIX
#define TIMEZONE_POSIX "CET-1CEST,M3.5.0,M10.5.0/3"An annotated example with all available options is in src/config.local.h.example.
cd software/TickTock2
# Build
pio run
# Upload via USB
pio run --target upload
# Open serial monitor (115200 baud)
pio device monitorThe TimeManager class selects the best available time source at runtime:
Priority: GPS > NTP > RTC > NoneTime is stored and transmitted in UTC everywhere; the timezone is applied only at display time.
The display registers itself as an MQTT light via Home Assistant discovery.
| MQTT Topic | Direction | Content |
|---|---|---|
homeassistant/light/ticktock/config | publish | HA discovery payload (JSON) |
ticktock/light/state | publish | Current state (JSON) |
ticktock/light/set | subscribe | Commands (JSON) |
Supported commands:
| Field | Values |
|---|---|
state | ON / OFF |
brightness | 0 – 255 |
color | {"r": 255, "g": 100, "b": 0} |
effect | SOLID, NIXIE, RAINBOW |
While running, the firmware prints the current time and active source once per second:
[TimeManager] 2025-03-15 14:32:01 UTC source=GPSEnable verbose GPS polling output by setting #define GPS_DEBUG 1 in config.local.h.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 10K | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R4, R7, R12, R13, R17 |
| 4 | 100n | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C1, C2, C3, C4 |
| 3 | LED | Diode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolder | D1, D2, D5 |
| 2 | 10u | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C6, C8 |
| 2 | 1K | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R14, R15 |
| 2 | 1u | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C5, C11 |
| 2 | 3.3k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R5, R6 |
| 2 | 330 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R8, R9 |
| 2 | 5.1K | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R10, R11 |
| 2 | BC817 | Package_TO_SOT_SMD:SOT-23 | Q2, Q3 |
| 1 | 0 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R16 |
| 1 | 10 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R3 |
| 1 | 100 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R18 |
| 1 | 1000u | Capacitor_THT:CP_Radial_D8.0mm_P3.50mm | C9 |
| 1 | 100K | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1 |
| 1 | 10n | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C10 |
| 1 | 27n | Inductor_SMD:L_0402_1005Metric_Pad0.77x0.64mm_HandSolder | L1 |
| 1 | 27u | NFM31PC276B0J3L:NFM31HK103R1H3L | C7 |
| 1 | 300 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R2 |
| 1 | 68 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R19 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U1 |
| 1 | BSS138 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | Battery_Cell | Battery:BatteryHolder_Keystone_1058_1x2032 | BT1 |
| 1 | CH340C | Package_SO:SOIC-16_3.9x9.9mm_P1.27mm | U4 |
| 1 | Conn_01x02 | TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-2-3.5-H_1x02_P3.50mm_Horizontal | J1 |
| 1 | Conn_01x02 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | Conn_01x03 | Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_Vertical | J5 |
| 1 | Conn_01x08 | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J3 |
| 1 | Conn_Coaxial | Connector_Coaxial:U.FL_Hirose_U.FL-R-SMT-1_Vertical | J4 |
| 1 | DS3232M | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U5 |
| 1 | D_TVS | Diode_SMD:D_SOD-923 | D3 |
| 1 | D_Zener | Diode_SMD:D_SOD-323 | D4 |
| 1 | ESP32-WROOM-32 | RF_Module:ESP32-WROOM-32 | U3 |
| 1 | LOGO | LOGO | G*** |
| 1 | NEO-M8M | RF_GPS:ublox_NEO | U2 |
| 1 | TPD2EUSB30A | Package_TO_SOT_SMD:Texas_DRT-3 | U7 |
| 1 | TVS0500DRV | Package_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm | U6 |
| 1 | USB_C_Receptacle_USB2.0 | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J6 |
The 54 most common of 57 parts.
It measures 70 × 50 mm and has 4 copper layers, 4.69 mm thick.
57 parts, built around the CH340C, ESP32-WROOM-32, NEO-M8M and AP2112K-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.
From the liam-tirpitz/TickTock repository on GitHub, at the commit this page was made from: the board is hardware/timekeeper/timekeeper.kicad_pcb and its schematic hardware/timekeeper/ESP32.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask liam-tirpitz before reusing the design.

byui-formula-hybrid/legacy-Cooling-Pump-Board
BYUI Cooling pump CAN control board


Blackcastus/ESP32_A7670
To make it easy for you to get started with GitLab, here's a list of recommended next steps.

alaotach/rc-car
Quixie is a small autonomous RC delivery car. The custom PCB handles motor control and sensor expansion; the firmware manages navigation, telemetry, and the locking cargo bay.


Harshad-vali/esp32-stereo-audio-recorder
ESP32-WROOM-32 based stereo audio recorder with dual I2S MEMS microphones, RTC timestamping, and microSD logging. KiCad hardware design + manufacturing files.

ViKozh/ctrl.energy
ESPHome-based node for energy monitoring with additional functionality

ToyotaKosen-Procon2026-Free002/Coco_Seal_Kicad
Strapping pins に割り当てられているため、2, 8, 9 はちょっと使いづらい