Skip to the content
PCBKitNew board
2 layers128 × 33 mmDotglow v1, the printed circuit board in 3D

DotGlow: WiFi + Bluetooth LED matrix clock firmware for ESP32 / ESP32-S3 + MAX7219, with Android app setup

Size
128 × 33 mm
Copper layers
2
Thickness
1.6 mm
Parts
41
Nets
57
Pads
210
Tracks, vias
270, 195
Pours
3
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
2 Oct 2026
Updated
26 Oct 2026

Overview

Dotglow v1 is an open-source printed circuit board by ElectroIoT, from the ElectroIoT/DotGlow-ESP32 repository on GitHub, published under the MIT licence. It is a 2-layer board of 128 × 33 mm with 41 parts on 57 nets, routed with 270 tracks and 195 vias.

It is built around the 74AHCT125D, ESP32-S3-WROOM-1-N16R8 and DHT22, with the USBLC6-2SC6 and XC6220B331MR-G among its other parts. Its parts include 10 resistors, 8 capacitors, 7 connectors, 5 ICs and 3 switches. It belongs with the radio and wireless and lEDs and displays boards and the ESP32 boards of this library.

Main components

5

README

README.md

DotGlow: the clock rolling from 12:45 to 12:46

A WiFi + Bluetooth LED matrix clock for ESP32 and ESP32-S3, with its own Android app.
Set it up from your phone in two minutes: no computer, no app accounts, no cloud.

ESP32 | ESP32-S3 Display Firmware PlatformIO License


▶ Watch the 30-second demo: YouTube Short

Get the app

The DotGlow Android app is live on Google Play:

Get DotGlow on Google Play

No account, no ads, no tracking. Details and setup guide: mtpcode.com/apps/dotglow.html · feedback: admin@mtpcode.com

Contents

Repository map · Features · How it works · Parts · Wiring · Install the firmware · First setup · Using the clock · Stopwatch · Updates · Troubleshooting · For developers · Roadmap · Credits

Repository map

FolderWhat is in it
src/the firmware (C++, PlatformIO): display, clock, WiFi, web dashboard, Bluetooth
platformio.inibuild settings for ESP32, ESP32-S3 and test builds
desktop-flasher/a small Windows tool to flash a board over USB
tools/ · release/scripts that build the release images and the firmware list the app reads
hardware/pcb/the custom DotGlow V1 circuit board (schematic, Gerbers, BOM, 3D renders)
hardware/enclosure/3D-printable cases (STL + OpenSCAD)
docs/architecture, Bluetooth protocol, development and release guides, pictures

Related repo: the Android app, DotGlow-Android.

Features

📱 Android app over BluetoothEvery setting, WiFi setup, firmware updates, live previews (DotGlow-Android)
🔒 Secure pairing6-digit PIN shown on the LED display, encrypted Bluetooth (LE Secure Connections)
🌐 Web dashboard tooSettings page on the clock's IP address, with a login
🕒 Internet timeNTP with time zones and daylight saving, 12 / 24 hour, leading zero, blinking colon, seconds bar, date
✨ Animations6 digit-change styles, 5 effects (hourly and at power-on), scrolling messages, special days (birthdays...)
🌙 BrightnessManual, night mode with its own brightness (or display off), optional light sensor (LDR)
⏱️ StopwatchFrom the app or with an optional push button
🔄 Rotate 180°Mounted upside down? One tap in the app, or double-press BOOT
🧱 4 to 16 modules8x32 up to 8x128, any module type (FC-16, generic, Parola, IC-Station), mirror / flip
⬆️ UpdatesFrom GitHub over WiFi, from the app over Bluetooth, or a new board straight from the phone over USB
🛟 Safe modeAfter repeated crashes it starts with only WiFi + updates, so a bad update can always be fixed

Digit-change styles

Roll downRoll upDissolve
SlideFlipDrop & bounce

Effects (every hour, at power-on, or on demand)

SparkleWipeRain
BoxesPac-ManStopwatch

All pictures are generated from the firmware's own fonts and frame logic (tools/make_images.py), so they match the real display.

How it works

App to clock over Bluetooth, clock to the internet over WiFi

  • The app talks to the clock over Bluetooth LE: paired once with the PIN on the display, then encrypted.
  • The clock gets the time over WiFi and checks for updates. It works on its own; the phone is only for setup and control.
  • The same settings are on the clock's web page (any browser on the same WiFi).
  • Protocol details: docs/PROTOCOL.md.

Parts

PartNotes
ESP32-S3 DevKitC-1 or ESP32 DevKit (WROOM-32)Any flash size from 4 MB. ESP32-S2 has no Bluetooth: not supported
MAX7219 4-in-1 LED matrix (8x32)The common blue "FC-16" boards. Chain more for 8x64 ... 8x128
5 jumper wiresFemale-female for most boards
5 V / 1 A (or stronger) phone charger + cableRequired. A computer USB port is too weak for the display, see power
470-1000 µF capacitorAcross VCC / GND at the display (+ leg to VCC). Strongly recommended
Optional: LDR + 10 kΩ resistorAutomatic brightness
Optional: push buttonStopwatch without the phone
Optional: 3D-printed casehardware/enclosure: leaning desk case, smoked acrylic front, DC jack; STLs for ESP32-S3, ESP32 DevKit, NodeMCU, D1 mini

DotGlow 3D-printed case

Using an ESP8266 / NodeMCU instead? That is the ESP8266 Matrix Clock (WiFi + web page, no Bluetooth). The DotGlow app can install it too.

Wiring

ESP32-S3 DevKitC-1ESP32 DevKit
MAX7219ESP32-S3ESP32 DevKit
VCC5VVIN (5V)
GNDGNDGND
DINGPIO11GPIO23
CSGPIO10GPIO5
CLKGPIO12GPIO18
LDR (optional)GPIO1GPIO34
Stopwatch button (optional)GPIO4GPIO13

Light sensor: LDR from 3V3 to the LDR pin, 10 kΩ from that pin to GND, then turn on Auto brightness.

⚠️ ESP32 DevKit: never use the pins labelled CLK, SD0, SD1, SD2, SD3, CMD. They are the board's flash memory pins; a wire there stops the board from starting (invalid header: 0xffffffff). The display's CLK goes to D18, not to the pin called "CLK". Always wire the display's IN end (pins marked DIN), not DOUT.

Power (read this)

5 V charger to the board, display VCC/GND from 5V/VIN with a capacitor

Power the clock from a 5 V / 1 A (or stronger) phone charger. A computer's USB port cannot drive the display: the LEDs stay dim, all LEDs stay on or show garbage, the board keeps restarting and drops off USB. That was the cause of every "display does not work" case during testing; a 1 A charger fixed all of them. Flashing from a computer is fine; test the display on the charger.

More modules and power

Two boards chained, separate 5 V supply, a capacitor at each board

Connect OUT of one board to IN of the next, then set the module count in the app (Display).

ModulesDisplaySupply
48x325 V / 1 A (USB is fine)
88x645 V / 2 A, separate supply
128x965 V / 3 A
168x1285 V / 4 A

Above 4 modules feed 5 V to the boards directly (not through the ESP32), with a 470-1000 µF capacitor at each board.

Install the firmware

A. From your phone (easiest)

  1. Install the DotGlow app (Get it on Google Play).
  2. Plug the board into the phone with a USB-OTG adapter (or a USB-C data cable).
  3. In the app: Install firmware → Find my board → Install. The app detects ESP32 / ESP32-S3 and writes the right image (about 20-60 s).

A1. From your browser (nothing to install)

Open mtpcode.com/flash in Chrome or Edge on a computer, plug the board in, press Install. ESP32, ESP32-S3 and ESP8266 (NodeMCU / D1 mini).

A2. From a PC (no phone, no PlatformIO)

desktop-flasher: a small program that finds the board, downloads the latest firmware and installs it (window or command line, Windows / Linux / macOS). python desktop-flasher/dotglow_flasher.py or the .exe.

B. PlatformIO

bash
pio run -e esp32s3 -t upload --upload-port COM5     # ESP32-S3 (the "USB" port)
pio run -e esp32dev -t upload                        # classic ESP32

C. esptool, with a release image

bash
esptool.py write_flash 0x0 dotglow-esp32s3-full.bin

Full images (bootloader + partitions + app) are made by python tools/release.py.

First setup

Install, Pair, WiFi, Done

  1. Power on. The clock plays its welcome animation and shows manoranjan.dev.
  2. Pair. In the app tap DotGlow-XXXX. The clock shows a 6-digit PIN; type it in Android's pairing request.
  3. WiFi. Tap Set up, pick your network, type the password. The clock restarts and fetches the time.
  4. Done. Change anything from the app. The clock scrolls its IP address for the web page.

No app? The clock opens a WiFi hotspot DotGlow-XXXX; join it and the setup page opens (or http://192.168.4.1).

Using the clock

  • App: brightness, night mode, time format and zone, digit style, effects, messages, special days, display layout, updates, security.
  • Web page: http://<clock IP> or http://dotglow.local, with an optional login password.
  • BOOT button: short press = scroll the IP · double press = rotate the display 180° · hold 5 s = WiFi setup · hold 10 s = remove the web password.

Stopwatch

On the display

RunningPaused (blinks)After an hour
MM:SS, tenths fill the bottom rowDigits blink, time keptHH:MM, the bottom row fills once a minute

Button wiring (optional)

Push button from GPIO4 / GPIO13 to GND
  • In the app: Stopwatch → Start / Pause / Reset / Back to the clock. The app shows a live copy of the display.
  • With a button (optional, from GPIO4 on the S3 / GPIO13 on the ESP32 to GND, no resistor needed): tap = start / pause (from the clock: open the stopwatch), hold = reset, hold at 0 = back to the clock.
  • With 6 or more modules it shows HH:MM:SS all the time.

Updates

HowWhen to use
GitHub over WiFiAutomatic at night (if enabled) or Updates → Check now
App over BluetoothUpdates → Update over Bluetooth: no WiFi needed, about 30 s
USB from the phoneNew or broken boards: Install firmware
Web uploadUpload firmware.bin on the web page (password protected)

Hardware: the DotGlow V1 board

DotGlow V1 Board: ESP32-S3 + USB-C + speaker, 128 x 31.1 mm

A custom 128 x 31.1 mm PCB that stacks on the back of the 4-in-1 MAX7219 module: ESP32-S3, USB-C, I2S speaker amplifier, stopwatch / LDR / DHT22 connectors, and an I2C port for a clock chip. Schematic, Gerbers, BOM, 3D renders and the KiCad / EasyEDA files are in hardware/pcb/. Untested V1. ▶ Watch the PCB Short.

Troubleshooting

ProblemFix
Board light is on but the app doesn't see the clockJoin the grounds: display GND, board GND and the power supply GND must be connected together. Use a stable 5 V supply: a weak one restarts the board when Bluetooth starts
Dim, all LEDs stuck on, or garbagePower: use a 5 V / 1 A charger, not a computer USB port; add the capacitor
Only the first module worksA broken link between modules (re-solder the joints between module 1 and 2)
ESP32 doesn't start after wiringA wire is on CMD / SD0-SD3 / CLK (flash pins): move it
Text scrambled / mirroredApp → Display → module type / mirror / flip
Upside downApp → Display → Rotate 180°, the rotate button on the dashboard, or double-press BOOT
Keeps restartingBetter 5 V supply, add the capacitor; after 3 crashes it starts in safe mode
Can't pairUse the PIN on the display (not 0000 / 1234). After a factory reset the app re-pairs by itself
"Getting time..." foreverWiFi has no internet, or the time zone is wrong (App → Clock & time)
Board drops off USB / flash stops half wayTake the display's 5 V wire off the board while flashing (the display draws more than USB gives); short thick data cable, another port
USB install failsUse a data cable; hold BOOT, tap RESET, release BOOT, try again

For developers

DocWhat's in it
docs/ARCHITECTURE.mdModules, main loop, settings storage, safe mode, OTA
docs/PROTOCOL.mdBluetooth GATT service, request / response format, every operation
docs/DEVELOPMENT.mdBuild envs, test build, serial gotchas, testing with the app
docs/RELEASE.mdVersion bump, release images, publishing the firmware catalog
CHANGELOG.mdWhat changed in each version
CLAUDE.mdQuick brief for AI coding assistants

Roadmap

PhaseWhatStatus
1ESP32 / ESP32-S3 port of the ESP8266 Matrix Clock✅ working on an ESP32-S3 with the real MAX7219 display
2Bluetooth service + protocol✅ tested on a Motorola Edge 40 Neo (Android 15)
3Android app: pairing, dashboard✅
4Android app: all settings, WiFi setup, app PIN lock, setup guide✅
5Firmware updates over Bluetooth✅ 1.2 MB in 26 s
6Flash a new board from the phone over USB-OTG (ESP32, ESP32-S3, ESP8266)✅ tested on an ESP32-S3
6bStopwatch with an optional button✅
6c3D-printed case (OpenSCAD, parametric)🟡 designed, test print pending
6dTemperature + humidity from a DHT22 (shown on the display and in the app); the case has a pocket for it⬜ planned
7Public release✅ app live on Google Play, firmware repo public

Credits

License

MIT, see LICENSE. Made with care in India by Manoranjan · ElectroIoT.

Name and logo

The code is MIT licensed, but the DotGlow name, logo and app icon are not covered by the licence. Forks and rebuilt apps are welcome; please publish them under your own name, icon and package (not com.electroiot.dotglow), so users can tell them apart from the official app.

Parts

41
QtyValueFootprintReferences
4100nFCapacitor_SMD:C_0805_2012MetricC3, C6, C7, C8
410kResistor_SMD:R_0805_2012MetricR1, R4, R5, R8
4M3MountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
222uF 10VCapacitor_SMD:C_1206_3216MetricC1, C2
24.7kResistor_SMD:R_0805_2012MetricR6, R7
25.1kResistor_SMD:R_0805_2012MetricR9, R10
1100kResistor_SMD:R_0805_2012MetricR3
110uF 10VCapacitor_SMD:C_0805_2012MetricC5
11kResistor_SMD:R_0805_2012MetricR11
11uFCapacitor_SMD:C_0805_2012MetricC4
174AHCT125Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU3
1BOOTButton_Switch_SMD:SW_SPST_B3S-1000SW2
1DHT22Connector_JST:JST_XA_B03B-XASK-1_1x03_P2.50mm_VerticalJ3
1DISPLAY INConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ2
1ESP32-S3-WROOM-1-N16R8RF_Module:ESP32-S3-WROOM-1U1
1I2C (RTC V2)Connector_JST:JST_XA_B04B-XASK-1-A_1x04_P2.50mm_VerticalJ4
1LDRConnector_JST:JST_XA_B02B-XASK-1-A_1x02_P2.50mm_VerticalJ6
1MAX98357APackage_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mmU4
1NTC 10kResistor_SMD:R_0603_1608MetricRT1
1Power LEDLED_SMD:LED_0805_2012MetricD1
1RESETButton_Switch_SMD:SW_SPST_B3S-1000SW1
1SPEAKER 8R 2WConnector_JST:JST_XA_B02B-XASK-1-A_1x02_P2.50mm_VerticalJ5
1SPK+ padTestPoint:TestPoint_Pad_D2.5mmTP1
1SPK- padTestPoint:TestPoint_Pad_D2.5mmTP2
1STOPWATCHButton_Switch_SMD:SW_SPST_B3S-1000SW3
1STOPWATCH SWConnector_JST:JST_XA_B02B-XASK-1-A_1x02_P2.50mm_VerticalJ7
1USB-C 5VConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U5
1XC6220B331MR-GPackage_TO_SOT_SMD:SOT-23-5U2

Questions

How big is the Dotglow v1 PCB?

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

What parts does the Dotglow v1 use?

41 parts, built around the 74AHCT125D, ESP32-S3-WROOM-1-N16R8, DHT22 and USBLC6-2SC6. 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 Dotglow v1 KiCad files?

From the ElectroIoT/DotGlow-ESP32 repository on GitHub, at the commit this page was made from: the board is hardware/pcb/kicad/dotglow-v1.kicad_pcb and its schematic hardware/pcb/kicad/dotglow-v1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Dotglow v1 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).

Similar boards

  • 2 layers90 × 55 mmS3.1-before repack, the printed circuit board in 3D

    S3.1-before repack

    puji4810/coffe-scale

    USB-C J5 ──► U8 ESD ──► R19/R20 22R ──► U4 IO19/IO20 (native USB-Serial/JTAG) │VBUS ├─► U5 TP4057 充电 ──► J6 1S Li-ion └─► D1/Q1 负载切换 ──► VSYS ──► U6 XC6220 3V3 1A ──► VCC3V3 ──► U4/外设 └──► U7 HT7533 ──► VDDADC ──► U1/U3…

    96 partsApache-2.0
  • 2 layers153.2 × 95.3 mmSkean, the printed circuit board in 3D

    Skean

    krikun98/Skean

    Wireless-first 44-key split keyboard with the Jian's stagger and the Corne's thumb cluster

    80 parts68
  • 2 layers92.1 × 78.1 mmPaperd ink rev3, the printed circuit board in 3D

    Paperd ink rev3

    paperdink/paperd.ink_hw

    Hardware files for paperd.ink

    92 parts9CC-BY-SA-4.0
  • 2 layers48 × 65.5 mmOpen telegraph, the printed circuit board in 3D

    Open telegraph

    animesh-chouhan/open-telegraph

    A pocket-size Morse key. One button, one RGB LED, an ESP32-S3, and a battery. Plug it in over USB-C or pair it over Bluetooth and it types Morse into any device as a standard keyboard. Fully open, down to the copper.

    52 parts5CERN-OHL-S-2.0
  • 4 layers148 × 102 mmFlightComputer, the printed circuit board in 3D

    FlightComputer

    akkdong/FlightComputer

    Flight assistant computer

    434 parts2
  • 2 layers96 × 50 mmPager, the printed circuit board in 3D

    Pager

    justinlindh/bramble

    Privacy-first LoRa mesh networking for ESP32-S3, built with ESP-IDF

    97 parts2MIT
  • 4 layers25 × 30 mmSmove r2-main, the printed circuit board in 3D

    Smove r2-main

    okbrainhq/sMove

    Applied to power.kicadsch, compute.kicadsch and smove-r2-main.kicadsch:

    53 parts1MIT
  • 2 layers120 × 80 mmBiometric scanner, the printed circuit board in 3D

    Biometric scanner

    Sid93/levram-biometric-attendance-scanner

    ESP32-S3 face-recognition factory attendance terminal — firmware, KiCad PCB, OpenSCAD enclosure, BOM

    45 parts1