Ticker build guide v1 · 3D · 2026-10-29

Progress is saved on this phone.

Concept render of the PIN Desk Ticker on a desk (AI image, not a photo)
Concept render (AI image, not a photo of a built ticker; the CAD below is what the files make)
Concept render

A desk-sized scrolling LED ticker, like a Wall Street ticker, but it shows whatever you want.

  • Custom text: type anything on your phone and it scrolls across 32 x 8 full-colour pixels.
  • Prices: BTC and SPY with green up / red down / amber alert colours, from a tiny feed script on your Mac.
  • Weather: current temperature and sky from Open-Meteo (no account, no key).
  • Colours and effects: any colour, brightness and speed from the WLED app; presets for up/down/alert.
  • Alexa: "Alexa, turn on Ticker", brightness, and presets by voice (WLED's built-in Hue emulation).
CAD render: assembly front
CAD render · assembly front (from cad/ticker.py)
338 x 92 mmfront (13.3 x 3.6 in)
40 mmcase depth
32 x 8full-colour pixels
9 stages64 steps

Parts (CART.md, priced 2026-10-29, nothing bought)

#PartQtyPriceLink
1WS2812B 8x32 LED matrix (256 px, flexible)
BTF-LIGHTING ECO 8X32
1$17.99B088BTXHRG
2ESP32 Wi-Fi board (runs WLED)
AITRIP 2PCS ESP32-WROOM-32 USB-C, CP2102
1 (2-pack)$14.99B0HD9VJG9V
3Level shifter chip SN74AHCT125N
VANXY 12pcs SN74AHCT125N DIP-14
1 (12-pack)$7.59B0GHN5GY56
45V 6A power supply (5.5 mm barrel)
ALITOVE Upgrade 5V 6A 30W
1$17.99B0GX5N2DKV
5Panel-mount DC jack 5.5x2.1, pre-wired
DaierTek 6pcs METAL, 18 AWG 15 cm
1 (6-pack)$9.99B0BD46CP5Y
61000 uF 16V capacitor (optional, recommended)
E-Projects 5-pack
1 (5-pack)$6.63B07YN6DS58
7Smoked acrylic front, 1/8 in
Sibe-R-Plastics 12 x 24 in dark gray transparent #2074
1$14.15
+ $11.30 delivery
B0859KVQTT

Parts: $100.63 before tax (lines 1-7; $94.00 without the optional cap; Amazon-fulfilled $75.18 ships free)

3D print (case + base): ~$30-60 (est.), an estimate until a real Craftcloud quote (~450 g of PLA est., out/print_sheet.md)

All-in: ~$131-161 + tax (est.)

Reused from spares ($0): ruthex M3 heat-set inserts, HVAZI M3 socket-cap screws, 2 mm stainless rod, 26 AWG silicone wire, blue + black, Heat-shrink kit + zip ties, 3M VHB tape. (Plus a scrap of perfboard: check you have one.)

Prices change; links are plain product links (no affiliate tags). Anthony approves every purchase.

  • Work through the stages in order. Each stage ends with a STOP checkpoint. The next stage stays locked until every step in this stage is ticked and the STOP box is ticked.
  • Stage 2 and Stage 4 also have a PASS CHECK: type in what you measured (LED count, volts, current). The STOP box only unlocks when the numbers are in range. Don't fake them: Stage 4 is the one that keeps the wiring cool.
  • Every stage opens with a 3D view: tap a part for its name, cart line and where it goes; Play flies the step's parts into place; Exploded spreads everything out. Each step has a Show in 3D button.
  • (est.) means estimate. Where a part's size or thread wasn't confirmed it says assumed: measure yours.
  • Ticks and pass-check answers are saved on this phone only.
  • Mains: the only thing that touches the wall socket is the sealed ALITOVE power brick. Never open it, never cut its wall cord. Everything inside the ticker is 5 V.
  • Don't power the panel from USB. 256 LEDs can pull several amps; a laptop or ESP32 USB port gives 0.5-3 A. The panel always runs from the 5V 6A supply through the DC jack. The ESP32 takes its 5 V from the same rail.
  • Current limit: set WLED's brightness limiter (ABL) before full brightness. Bench tests: 1,500 mA. Finished ticker: 4,500 mA (the 6 A supply then has headroom). Full white with no limit is about 15 A (0.3 W x 256 LEDs / 5 V, BTF figure): never do that.
  • Capacitor polarity: the stripe (minus) leg goes to GND. Backwards, an electrolytic cap can bulge or burst. Wear glasses for the first power-on.
  • USB + power supply at the same time: for USB flashing, unplug the 5V supply first unless you know your board has a diode on its USB 5V line. Normal updates go over Wi-Fi (OTA), so you rarely need USB once it's built.
  • Soldering: iron in its stand, glasses on, a fan pulling the smoke away, unplug when done. Heat-set inserts: the iron touches brass, not your fingers.
  • Acrylic: score away from your hand; snapped edges are sharp until sanded.
WhatValueWhere it comes from
Finished front338 x 92 mm (13.3 x 3.6 in)cad/ticker.py, PRD
Case depth40.4 mmcad/ticker.py
On the desk358 x 84 x ~102 mm with the basecad/export.py
Panel320 x 80 mm, 32 x 8 px, 10 mm pitchCART.md / BTF listing
Acrylic cut size326 x 86 mm (from the 12 x 24 in sheet)cad/ticker.py
LED data pinGPIO16 (WLED's default on ESP32)this guide
Brightness limit (ABL)1,500 mA bench, 4,500 mA finishedCART.md / PRD
Supply5 V 6 A, 5.5 x 2.1 mm, centre +CART.md row 4
Screws16 x M3x10 (rear covers + base), 2 x M3x12 (shell joint)cad/ticker.py
Inserts18 ruthex M3 (12 rear, 2 joint, 4 base)cad/ticker.py
Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate
Diagram · Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate
  • WLED: free open-source LED firmware for the ESP32 (kno.wled.ge). Web page, phone app, JSON API, Alexa.
  • ABL: WLED's Automatic Brightness Limiter: caps brightness so the estimated current stays under your number.
  • Level shifter (74AHCT125): turns the ESP32's 3.3 V data signal into a clean 5 V signal for the LEDs.
  • Serpentine (zig-zag): the LED chain runs down one column and back up the next.
  • Heat-set insert: a brass thread pressed into plastic with a hot iron, so screws can go in and out many times.

Goal: Find every part, check nothing is damaged, and have every tool on the table. No soldering yet.

3D view Stage 0 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Tick Found when you have the part, or Missing if you can't find it. Missing only blocks the stage that needs it (the card says which).

Note: Prices and links are from CART.md (read off the live pages 2026-10-29, Orrin). Nothing has been bought yet: Anthony approves the purchase. Packs give spares (1 extra ESP32, 11 chips, 5 jacks, 4 caps).

Parts to buy (CART.md)

Cart line 1 · WS2812B 8x32 LED matrix (256 px, flexible) qty 1

Thin flexible black circuit board, 320 x 80 mm, 256 square LEDs in a 32 x 8 grid. Wire leads with 3-pin connectors at both short ends; an arrow on the board shows the data direction.

BTF-LIGHTING ECO 8X32 · B088BTXHRG · $17.99 · Needed in stage 2

FoundMissing

Cart line 2 · ESP32 Wi-Fi board (runs WLED) qty 1 (2-pack)

Small board about 52 x 28 mm (size assumed), silver metal can (the WROOM-32 module) at one end, USB-C at the other, two rows of pins underneath. Two in the pack: one is a spare.

AITRIP 2PCS ESP32-WROOM-32 USB-C, CP2102 · B0HD9VJG9V · $14.99 · Needed in stage 2

FoundMissing

Cart line 3 · Level shifter chip SN74AHCT125N qty 1 (12-pack)

Black 14-pin chip (DIP-14), about 19 x 6.6 mm body, printed 'AHCT125'. A notch or dot marks pin 1.

VANXY 12pcs SN74AHCT125N DIP-14 · B0GHN5GY56 · $7.59 · Needed in stage 3

FoundMissing

Cart line 4 · 5V 6A power supply (5.5 mm barrel) qty 1

Black power brick with a wall cord and a 5.5 x 2.1 mm barrel plug. Label: 5V 6A, centre positive.

ALITOVE Upgrade 5V 6A 30W · B0GX5N2DKV · $17.99 · Needed in stage 2

FoundMissing

Cart line 5 · Panel-mount DC jack 5.5x2.1, pre-wired qty 1 (6-pack)

Metal threaded barrel socket with a nut, red and black 18 AWG wires already soldered on (15 cm).

DaierTek 6pcs METAL, 18 AWG 15 cm · B0BD46CP5Y · $9.99 · Needed in stage 2

FoundMissing

Cart line 6 · 1000 uF 16V capacitor (optional, recommended) qty 1 (5-pack)

Can about 10 x 20 mm (est.), two legs. A light stripe with minus signs marks the NEGATIVE leg; the longer leg is positive.

E-Projects 5-pack · B07YN6DS58 · $6.63 · Needed in stage 4

CART.md: the buy box said 'add to cart to see price'; $6.63 is the same item in 'Frequently bought together'. Confirm at checkout.

FoundMissing

Cart line 7 · Smoked acrylic front, 1/8 in qty 1

Dark grey see-through sheet 12 x 24 in, 1/8 in (3.0-3.2 mm) thick, protective film both sides.

Sibe-R-Plastics 12 x 24 in dark gray transparent #2074 · B0859KVQTT · $14.15 + $11.30 delivery · Needed in stage 5

FoundMissing

Printed parts (out/*.stl)

Printed · Front shell, left half (shell_L.stl) qty 1

Matte black, 169 x 92 x 37 mm: the left half of the bezel with the window, acrylic rebate and panel pocket. Joint block with a screw pocket at the cut end.

out/shell_L.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Front shell, right half (shell_R.stl) qty 1

Matte black, the right half: same, plus the USB-C slot in its end wall and an insert hole in each joint block.

out/shell_R.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Louvre grid, left half (grid_L.stl) qty 1

Matte black 6 mm deep grid of 10 mm square cells, 160.6 x 80 mm. Owns the centre divider.

out/grid_L.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Louvre grid, right half (grid_R.stl) qty 1

Matte black grid, 159.4 x 80 mm (no divider on its cut edge).

out/grid_R.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Rear cover, left half (rear_L.stl) qty 1

Matte black 3 mm plate with vent slots, 3 pressure ribs and 6 screw holes.

out/rear_L.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Rear cover, right half (rear_R.stl) qty 1

Matte black plate with the jack hole, ESP32 cradle, perfboard rails, cap cradle, 2 wire clips, 2 pressure ribs and zip-tie slots.

out/rear_R.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Base, left half (base_L.stl) qty 1

Walnut-look wood-fill PLA, 179 x 84 x 24 mm, tilted slot on top, 2 screw holes underneath.

out/base_L.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Printed · Base, right half (base_R.stl) qty 1

Wood-fill PLA, the right half of the base.

out/base_R.stl (+ .3mf) · Picture = CAD render · Needed in stage 1

FoundMissing

Spares from the skimmer (REUSE.md)

Spare · ruthex M3 heat-set inserts (18 used) qty -

Small knurled brass cylinders, M3 x 5.7 mm. ~86 left after the skimmer.

From the skimmer spares (REUSE.md), $0 · Needed in stage 1

FoundMissing

Spare · HVAZI M3 socket-cap screws: 16 x M3x10, 2 x M3x12 qty -

Stainless socket-head screws from the M3 kit; 2.5 mm hex key. M3x12 assumed in the kit: check.

From the skimmer spares (REUSE.md), $0 · Needed in stage 1

FoundMissing

Spare · 2 mm stainless rod (4 pins x 11 mm) qty -

uxcell 304 rod, 2 x 100 mm (11 left). Cut 4 pieces 11 mm long.

From the skimmer spares (REUSE.md), $0 · Needed in stage 1

FoundMissing

Spare · 26 AWG silicone wire, blue + black qty -

Thin soft wire: data and the small 5V/GND taps only. Power runs on the jack's 18 AWG and the panel's own leads.

From the skimmer spares (REUSE.md), $0 · Needed in stage 3

FoundMissing

Spare · Heat-shrink kit + zip ties qty -

Sopoby heat-shrink assortment, GTSE 4 in zip ties.

From the skimmer spares (REUSE.md), $0 · Needed in stage 3

FoundMissing

Spare · 3M VHB tape qty -

Grey double-sided foam tape, 12 mm wide. 4 small pads hold the panel to the grid.

From the skimmer spares (REUSE.md), $0 · Needed in stage 5

FoundMissing

Spare · Perfboard ~30 x 40 mm qty -

Plain 2.54 mm-pitch prototype board, cut to 30 x 40 mm. Not in REUSE.md: any scrap perfboard (check you have one).

From the skimmer spares (REUSE.md), $0 · Needed in stage 3

FoundMissing

Steps

0.1 Check the LED panel and find its input end

⏱ 5 min (est.) · Parts: LED panel (row 1) · Tools: eyes

Finding the panel's input end
Diagram · Finding the panel's input end
3D stand-in: panel
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Lay the panel LEDs-up on a clean table. Look for kinked corners or LEDs knocked off.

Turn it over. Find the small arrow printed along the board and the pads/wires labelled DIN (data in), 5V and GND at one short end. That is the input end. The other end says DOUT.

Stick a bit of masking tape on the input end and write IN.

Pass: No damage; input end found and labelled.

Don't do yet: Don't bend the panel sharply or fold it: the flex board cracks.

0.2 Check the ESP32 boards

⏱ 3 min (est.) · Parts: ESP32 (row 2) · Tools: eyes

3D stand-in: esp32
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Find the labels next to the pins: GPIO16 (may say 16 or RX2), 5V (or VIN) and GND. Find the two small buttons (EN and BOOT) and the USB-C socket.

Put the second board back in its bag: it's the spare.

Pass: Both boards undamaged; you know where 16, 5V and GND are.

0.3 Check the level-shifter chips

⏱ 2 min (est.) · Parts: SN74AHCT125N (row 3) · Tools: eyes

SN74AHCT125N pin map with what each pin connects to
Diagram · SN74AHCT125N pin map with what each pin connects to

Read the print on one chip: it must say AHCT125 (not HC125 or HCT125 from another drawer). Find the notch or dot: that end is pin 1.

Pass: Chip reads AHCT125, legs straight.

0.4 Check the power supply label

⏱ 2 min (est.) · Parts: power supply (row 4) · Tools: eyes

3D stand-in: psu plug
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Read the label: 5V 6A output, barrel plug, the polarity symbol shows centre positive (the dot in the middle connects to +).

Pass: 5 V, 6 A, centre positive.

Don't do yet: Don't plug it in yet.

0.5 Check which jack wire is + with the meter

⏱ 5 min (est.) · Parts: DC jack (row 5) · Tools: multimeter

Meter: jack centre pin to the red wire
Diagram · Meter: jack centre pin to the red wire

Meter on beep. One probe on the jack's centre pin, the other on the red wire's bare end.

Then the outer metal sleeve to the black wire.

Pass: Centre pin beeps to red, sleeve beeps to black. If yours is the other way round, swap the colours in every later step and mark the wires with tape.

0.6 Check the capacitor marking

⏱ 1 min · Parts: capacitor (row 6) · Tools: eyes

Capacitor polarity: stripe to GND
Diagram · Capacitor polarity: stripe to GND

Find 1000 uF and 16V (or higher) on the can. Find the light stripe with minus signs: that leg is negative (GND). The longer leg is positive.

Pass: 1000 uF, >= 16 V, stripe found.

0.7 Check the acrylic, keep the film on

⏱ 2 min · Parts: acrylic sheet (row 7) · Tools: eyes

3D stand-in: acrylic
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Peel back a tiny corner of the film to see the smoked colour, then press it back. The film stays on until Stage 5.

Pass: Sheet uncracked, 1/8 in thick (3.0-3.2 mm on calipers).

0.8 Lay out the spares and tools

⏱ 10 min (est.) · Parts: inserts, screws, rod, wire, heat shrink, VHB, perfboard · Tools: every tool in the Tools list

3D stand-in: inserts
3D stand-in at true size (not a photo; sizes from CART.md / assumed)
3D stand-in: joint pins
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Count out 18 inserts, 16 x M3x10 and 2 x M3x12 screws, and cut 4 pins of 2 mm rod, 11 mm long (saw, then file the ends smooth).

Put every tool from the Tools list (Stage 1 cards) on the table.

Pass: All counted; tools laid out.

STOP 0: checkpoint

  • Every cart line, printed part and spare is ticked Found or Missing.
  • Panel input end labelled IN; jack red = centre (+) confirmed with the meter.
  • The missing list (shown here) is written down.

Troubleshooting, Stage 0

SymptomLikely causeFix
Chip says HC125 or HCT125Wrong chip from another drawerUse only AHCT125 (the VANXY pack). HCT may work; HC won't
Can't find GPIO16 labelSome boards print 'RX2' or just '16'Use the pinout on the seller's listing; on 38-pin boards it's next to 17 (TX2)
Jack red goes to the sleeveWired the other way at the factorySwap the meaning of the colours; label the wires + and -
No M3x12 in the kitKit sizes varyM3x10 works in the joint too (5 mm of thread engagement)

🔒 Locked: finish Stage 0 first (every tick, its STOP box). You can read ahead.

Goal: Get the 8 printed parts, check they fit, press in 18 heat-set inserts and dry-fit every half.

3D view Stage 1 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Note: Printing is ordered by Anthony (Craftcloud quote from the STL/3MF files in out/; out/print_sheet.md lists them). Print cost is ~$30-60 (est.) until a real quote. Nobody orders from this guide.

Tools (pictures are illustrations: any similar tool is fine)

Temperature-controlled soldering iron + stand

Used in steps: 1.4, 3.3, 3.4, 3.5, 3.6, 4.3, 4.4, 4.5

Thin rosin-core solder (0.5-0.8 mm)

Used in steps: 3.3, 3.4, 3.5, 3.6, 4.3, 4.4, 4.5

Multimeter (DC volts, beep)

Used in steps: 0.5, 3.7, 4.2, 4.7, 4.8, 4.10

Wire strippers (18 + 26 AWG)

Used in steps: 3.3, 4.3

Flush cutters

Used in steps: 4.6

Heat gun (heat shrink)

Used in steps: 4.3

2.5 mm hex key (M3 screws)

Used in steps: 1.5, 5.2, 6.1, 6.2, 6.4

Digital calipers

Used in steps: 1.2

Hobby knife + plastic scoring knife

Used in steps: 1.3, 3.1, 5.1

Metal straightedge / ruler

Used in steps: 3.1, 5.1

240 grit sandpaper + small file

Used in steps: 1.3, 3.1, 5.1

Alligator-clip test leads (about 6)

Used in steps: 2.4, 3.8

Helping hands or masking tape

Used in steps: general

USB-C DATA cable (not charge-only)

Used in steps: 2.1, 2.2, 6.2

Computer with Chrome or Edge

Used in steps: 1.1, 2.1, 2.2, 2.3, 2.5, 2.6, 2.9, 8.1, 8.2, 8.3, 8.4

Phone (WLED app, Alexa app)

Used in steps: 2.3, 2.5, 2.6, 2.7, 2.8, 2.9, 4.9, 4.10, 4.11, 5.6, 7.1, 7.2 ...

Safety glasses

Used in steps: 1.4, 5.1

Small saw or rotary tool (2 mm rod)

Used in steps: general

Steps

1.1 Get a print quote with the right settings

⏱ 15 min (est.) · Parts: out/*.stl or out/*.3mf (8 files) · Tools: computer

Print settings for the quote
Diagram · Print settings for the quote
CAD render: assembly front
CAD render · assembly front (from cad/ticker.py)

Upload the 8 files. Settings: PLA, matte black for shell, grid and rear cover halves; wood-fill PLA (walnut) for the two base halves. 0.2 mm layers, 3-4 walls, 15-20 % infill, no supports.

Orientation is already set in the files: shells and grids front face down, rear covers outer face down, base flat bottom down.

PartQtyMaterialEst. weight
shell_L, shell_R1 + 1matte black PLA~70 g each (est.)
rear_L, rear_R1 + 1matte black PLA~58 / ~62 g (est.)
grid_L, grid_R1 + 1matte black PLA~25 g each (est.)
base_L, base_R1 + 1wood-fill PLA~71 g each (est.)

Pass: Quote shows all 8 parts in the right material; no supports added.

Don't do yet: Don't let the print service rotate the shells: front face down gives the clean bezel.

1.2 Measure the prints

⏱ 10 min (est.) · Parts: all 8 printed parts · Tools: digital calipers

CAD render: shell L
CAD render · shell L (from cad/ticker.py)
CAD render: shell R
CAD render · shell R (from cad/ticker.py)

Join each shell half's pocket edges in your head: measure the panel pocket (should be 160.5 mm per half along, 81 mm tall) and the acrylic rebate (86.6 mm tall, 3.4 mm deep).

Lay each long part on a flat table: no rocking (warp).

Pass: Within about 0.3 mm of the numbers; nothing warped more than about 0.5 mm (est.).

1.3 Clean up holes and edges

⏱ 10 min (est.) · Parts: shells, rear covers, base · Tools: hobby knife, sandpaper

CAD render: rear R
CAD render · rear R (from cad/ticker.py)

Trim any strings in the window, the USB-C slot and the vents. Lightly sand the cut faces at the split so the halves meet flat.

Pass: Halves meet with no gap you can see light through.

1.4 Press the 18 heat-set inserts

⏱ 30 min (est.) · Parts: 18 ruthex M3 inserts, shell halves · Tools: soldering iron, glasses

Pressing a heat-set insert
Diagram · Pressing a heat-set insert

Iron about 220 C for PLA (est.; check the insert pack). Set an insert on its hole, press straight down slowly with the iron tip until it's flush, lift straight off.

WhereHow manyHole faces
Rear-cover bosses (top + bottom walls, back edge)12 (6 per half)the back
Joint blocks, RIGHT half only (cut face)2the split, toward the left half
Base bosses (bottom wall)4 (2 per half)down, through the bottom

Pass: All 18 flush and straight: an M3 screw goes in by hand without forcing.

Don't do yet: Don't push sideways or the insert tilts. Don't overheat: the boss melts out.

1.5 Dry-fit the two shell halves

⏱ 10 min (est.) · Parts: shell_L, shell_R, 2 pins, 2 x M3x12 · Tools: 2.5 mm hex key

Shell joint: pins, M3x12 screw and insert
Diagram · Shell joint: pins, M3x12 screw and insert

Push the two 2 mm pins into the joint blocks of the left half (top and bottom). Bring the halves together. From inside the left half, put an M3x12 through each screw pocket into the right half's insert and snug it.

Run a finger over the front seam.

Pass: Front seam flush (no step you can feel), window straight.

Don't do yet: Don't overtighten: snug only. They come apart again for Stage 5.

1.6 Dry-fit the grid, rear covers and base

⏱ 10 min (est.) · Parts: grid_L/R, rear_L/R, base_L/R, 2 pins · Tools: -

CAD render: grid L
CAD render · grid L (from cad/ticker.py)
CAD render: base L
CAD render · base L (from cad/ticker.py)

Grid halves: they just sit side by side (the left one owns the centre divider).

Rear covers: lay them on the back of the shell; the 12 holes line up with the inserts.

Base: push 2 pins into one half, join the halves; the slot is one continuous groove.

Pass: Everything lines up; the shell's bottom drops into the base slot leaning back about 10 deg.

STOP 1: checkpoint

  • 8 prints checked, sized and cleaned.
  • 18 inserts in, straight.
  • Shell halves join flush; base halves join; rear covers line up.

Troubleshooting, Stage 1

SymptomLikely causeFix
Insert went in crookedPressed at an angleReheat and pull it out with the iron + pliers; fill and redo, or skip that one (11 others hold)
Halves don't meetElephant foot or a blob at the cut faceSand the cut face flat on sandpaper on a table
Shell warpedLong thin print cooled unevenlyAsk for a brim / enclosure reprint; the acrylic and screws pull small warps flat
Wood-fill base is roughWood-fill textureSand 240 grit; wipe on a little furniture oil or wax for a walnut look

🔒 Locked: finish Stage 1 first (every tick, its STOP box). You can read ahead.

Goal: WLED on the ESP32, on your Wi-Fi, and the panel lighting every pixel the right way round, on the bench.

3D view Stage 2 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Warning: Bench setup: the panel runs from the 5V supply, the ESP32 runs from the computer's USB. Only the GND wires are joined between them. Never join the USB 5V and the supply's 5V.

2.1 Install the USB driver if the board doesn't show up

⏱ 5 min (est.) · Parts: ESP32 · Tools: computer, USB-C cable

3D stand-in: esp32
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Plug the ESP32 into the computer with a data USB-C cable. On a Mac, recent macOS usually sees the CP2102 on its own. If no port appears in the next step, install the Silicon Labs CP210x VCP driver from silabs.com and allow it in System Settings > Privacy & Security.

Pass: The board's red power LED is on.

2.2 Flash WLED from install.wled.me

⏱ 5 min (est.) · Parts: ESP32 · Tools: computer (Chrome or Edge), USB-C cable

Flash WLED from install.wled.me
Diagram · Flash WLED from install.wled.me

Open install.wled.me in Chrome or Edge (Safari can't do Web Serial). Pick the latest stable release, click Install, choose the port that says CP2102 / usbserial, and wait for 'Installation complete'.

If it can't connect: hold the BOOT button, click Install, let go when it starts writing.

Pass: Installer says done; the board restarts.

Don't do yet: Don't plug the panel or the 5V supply into the ESP32 yet.

2.3 Join WLED to your Wi-Fi

⏱ 5 min (est.) · Parts: ESP32 · Tools: phone or computer

Flash WLED from install.wled.me
Diagram · Flash WLED from install.wled.me

The installer can send your Wi-Fi details directly. If not: join the Wi-Fi network WLED-AP (password wled1234), a page opens; WiFi Settings: enter your home network.

Same page: set mDNS address to ticker (so it's http://ticker.local) and note the IP address it shows.

Pass: You can open http://ticker.local (or the IP) from your phone on home Wi-Fi.

2.4 Wire the bench test

⏱ 10 min (est.) · Parts: panel, DC jack, PSU, ESP32 · Tools: clip leads

Bench test wiring with clip leads
Diagram · Bench test wiring with clip leads

PSU unplugged. Clip: jack red to panel 5V, jack black to panel GND.

Clip: ESP32 GPIO16 to panel DIN (directly for now; the level shifter comes in Stage 3).

Clip: ESP32 GND to panel GND (the common ground).

ESP32 stays on the computer's USB.

Wiring:

FromToWire
Jack red (+)Panel 5Vclip lead
Jack black (-)Panel GNDclip lead
ESP32 GPIO16Panel DINclip lead
ESP32 GNDPanel GNDclip lead (common ground)

Pass: 4 clips on, nothing touching anything else.

Don't do yet: Don't connect ESP32 5V/VIN to anything in this stage.

2.5 Set LED Preferences (and a 1,500 mA bench limit)

⏱ 5 min (est.) · Parts: ESP32 · Tools: phone or computer

WLED LED Preferences
Diagram · WLED LED Preferences

WLED > Config > LED Preferences:

SettingValue
LED typeWS281x
Colour orderGRB
Length256
Data GPIO16
Automatic Brightness LimiterON, max current 1500 mA (bench)
LED voltage / current per LED5 V, 55 mA (WLED default)

Save. Now plug the PSU into the wall and into the jack.

Pass: WLED reboots; the panel may light the default orange.

Don't do yet: Don't set the limit higher on clip leads.

2.6 Set up the 2D matrix

⏱ 5 min (est.) · Parts: ESP32 · Tools: phone or computer

2D matrix wiring order: vertical serpentine
Diagram · 2D matrix wiring order: vertical serpentine

Config > 2D Configuration: Strip or panel = 2D Matrix, panel 32 wide x 8 high, one panel. Start with: first LED top left, vertical, serpentine ON (what BTF 8x32 owners report; your panel may differ, so the test below decides).

Pass: Saved.

2.7 All-pixels and colour test

⏱ 5 min (est.) · Parts: panel · Tools: phone

All-pixels and colour test
Diagram · All-pixels and colour test

Main page: effect Solid, colour white, brightness about 10 %. Count: every LED lit, no dark ones.

Then Solid red, green, blue: each must show its own colour.

Pass: 256 lit; red shows red (write the numbers in the PASS CHECK below).

2.8 Orientation test with scrolling text

⏱ 10 min (est.) · Parts: panel · Tools: phone

Orientation test results and fixes
Diagram · Orientation test results and fixes

Effect Scrolling Text. Segment name (pencil icon on the segment) = TICKER 123. Hold the panel with the input end on the RIGHT as seen from the front (that's how it sits in the case).

What you seeFix in 2D Configuration
Reads correctly, moves right to leftNothing: done
Mirrored left-rightChange first LED left <-> right
Upside downChange first LED top <-> bottom
Jumbled / zig-zag stripesToggle serpentine; if still wrong toggle vertical

Pass: TICKER 123 reads correctly from the front.

2.9 Back up the WLED settings

⏱ 2 min · Parts: ESP32 · Tools: phone or computer

WLED LED Preferences
Diagram · WLED LED Preferences

Config > Security & Updates > Backup configuration. Keep the file: a reflash then takes a minute.

Pass: cfg.json saved.

✅ PASS CHECK (required): bench LED test

Answer with what you actually saw or measured. The STOP box unlocks when every answer is in range.

STOP 2: checkpoint

  • WLED reachable at ticker.local (or its IP).
  • PASS CHECK above answered correctly: 256 LEDs, colours right, text reads right.
  • Settings backed up. PSU unplugged again.

Troubleshooting, Stage 2

SymptomLikely causeFix
Only the first LED lights or random flickerNo common GND, or 3.3 V data too weakCheck the GND clip; if still flaky it's what the level shifter (Stage 3) fixes
Nothing lightsWrong GPIO, PSU off, panel output end usedGPIO 16 in LED Prefs; clip to the DIN end (arrow points away from it)
Installer can't find a portCharge-only cable or no driverTry another USB-C cable; install the CP210x driver
Red shows greenColour orderSet GRB (or try RGB) in LED Preferences
ticker.local doesn't openmDNS blocked on some networks/AndroidUse the IP address shown in WLED or your router

🔒 Locked: finish Stage 2 first (every tick, its STOP box and its PASS CHECK). You can read ahead.

Goal: A 30 x 40 mm perfboard with the SN74AHCT125N wired so the ESP32's 3.3 V data comes out as clean 5 V.

3D view Stage 3 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Note: Why: the ESP32 outputs 3.3 V and WS2812B wants about 3.5 V+ for a clean 'high'. It often works without, but the chip removes the flicker risk (CART.md).

3.1 Cut and fit the perfboard

⏱ 10 min (est.) · Parts: perfboard · Tools: knife, straightedge, sandpaper

Perfboard layout
Diagram · Perfboard layout
CAD render: rear R electronics
CAD render · rear R electronics (from cad/ticker.py)

Score along a row of holes on both sides, snap, sand the edges. Target 40 x 30 mm.

Slide it into the rails on rear_R from the open end: it should slide with light friction.

Pass: Slides in and stops at the end stop; doesn't fall out when tipped.

3.2 Place the chip, notch to the left

⏱ 5 min (est.) · Parts: SN74AHCT125N, perfboard · Tools: -

SN74AHCT125N pin map with what each pin connects to
Diagram · SN74AHCT125N pin map with what each pin connects to

Push the chip through the middle of the board, notch toward the left (pin 1 bottom-left, looking at the chip side). Bend two corner legs on the back so it stays put.

Note: A DIP-14 socket is nicer but isn't in the cart; solder the chip directly (11 spares in the pack).

Pass: Chip centred, all 14 legs through.

3.3 Power the chip: pin 14 to 5V, pin 7 to GND

⏱ 10 min (est.) · Parts: 26 AWG wire · Tools: iron, solder ( ), strippers

SN74AHCT125N pin map with what each pin connects to
Diagram · SN74AHCT125N pin map with what each pin connects to

Solder a blue 26 AWG pigtail (~150 mm) to pin 14 (VCC) and a black one to pin 7 (GND). Label them 5V and GND with tape.

Wiring:

PinNameGoes to
14VCC5V rail (pigtail)
7GNDGND rail (pigtail)

Pass: Shiny cone joints, no bridges.

3.4 Enable channel 1: pin 1 to GND

⏱ 5 min (est.) · Parts: wire offcut · Tools: iron, solder ( )

SN74AHCT125N pin map with what each pin connects to
Diagram · SN74AHCT125N pin map with what each pin connects to

Link pin 1 (1OE) to pin 7 (GND) on the back with a short wire offcut. 'OE' low = output on.

Pass: Beep between pin 1 and pin 7.

3.5 Tie off the 3 unused channels

⏱ 10 min (est.) · Parts: wire offcuts · Tools: iron, solder ( )

SN74AHCT125N pin map with what each pin connects to
Diagram · SN74AHCT125N pin map with what each pin connects to

Pins 4, 10, 13 (2OE, 3OE, 4OE) to pin 14 (5V): those channels off.

Pins 5, 9, 12 (2A, 3A, 4A) to pin 7 (GND): no floating inputs.

Wiring:

PinsNameTie to
4, 10, 132OE, 3OE, 4OEpin 14 (5V)
5, 9, 122A, 3A, 4Apin 7 (GND)
6, 8, 112Y, 3Y, 4Ynothing (leave open)

Pass: Beep checks match the table; no pin bridged to its neighbour.

3.6 Data in and data out

⏱ 10 min (est.) · Parts: 26 AWG blue wire · Tools: iron, solder ( )

Data path: GPIO16 > 74AHCT125 > panel DIN
Diagram · Data path: GPIO16 > 74AHCT125 > panel DIN

Pin 2 (1A): blue pigtail ~150 mm labelled DATA IN (it goes to ESP32 GPIO16).

Pin 3 (1Y): blue pigtail ~200 mm labelled DATA OUT (it goes to the panel DIN).

Note: A 330 ohm resistor in series with DATA OUT is good practice, but it's not in spares. With the chip this close to the panel it's skippable. If you get one later, put it at pin 3.

Wiring:

PinNameGoes to
21AESP32 GPIO16
31Ypanel DIN (optional 330 ohm)

Pass: Two labelled data pigtails.

3.7 Meter checks (nothing powered)

⏱ 5 min (est.) · Parts: perfboard · Tools: multimeter

Meter: shifter checks
Diagram · Meter: shifter checks

Beep: 5V pigtail to GND pigtail must not beep. Pin 1 to GND pigtail beeps. Pin 14 to 5V pigtail beeps. Pin 2 to pin 3 must not beep.

Pass: All four as stated.

3.8 Bench test through the shifter

⏱ 10 min (est.) · Parts: perfboard, panel, ESP32, PSU · Tools: clip leads

Data path: GPIO16 > 74AHCT125 > panel DIN
Diagram · Data path: GPIO16 > 74AHCT125 > panel DIN

Same bench setup as Stage 2, but: GPIO16 > DATA IN, DATA OUT > panel DIN, perfboard 5V > jack red, perfboard GND > jack black + ESP32 GND. ESP32 still on USB. Plug in the PSU; run Scrolling Text.

Pass: Same picture as Stage 2, no flicker.

STOP 3: checkpoint

  • Meter checks passed.
  • Panel works through the shifter on the bench.
  • PSU unplugged.

Troubleshooting, Stage 3

SymptomLikely causeFix
Panel dark through the shifterPin 1 not to GND, or 5V missing on pin 14Measure pin 14 to pin 7 with the PSU on: about 5 V
Chip gets warmOutput shorted or reversed chipUnplug. Check notch direction and pin 3 isn't touching 5V/GND
Works, then flickersLong ground pathShorten the GND between ESP32, chip and panel; all grounds meet at one splice

🔒 Locked: finish Stage 3 first (every tick, its STOP box). You can read ahead.

Goal: Permanent wiring on rear_R: jack, splice, 1000 uF cap, ESP32 on the 5V rail, shifter, panel. Then a measured power-on and full-brightness test before anything is closed up.

3D view Stage 4 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Warning: This stage is the one that matters for safety. The PASS CHECK must be answered with real meter and WLED readings before Stage 5 unlocks.
Whole ticker wiring: supply, jack, splices, cap, ESP32, level shifter, panel
Diagram · Whole ticker wiring: supply, jack, splices, cap, ESP32, level shifter, panel

4.1 Fit the DC jack in rear_R

⏱ 5 min (est.) · Parts: DC jack, rear_R · Tools: pliers or spanner

DC jack through the rear cover
Diagram · DC jack through the rear cover

Push the jack through the hole from the inside (wires inside), nut on the outside. Tighten firmly.

Note: Hole is 11.2 mm for an M11 thread (assumed). If your jack is the 12 mm kind, drill/ream the hole to 12 mm or set JACK_HOLE in cad/ticker.py before printing.

Pass: Jack doesn't spin when you twist the barrel.

4.2 Identify the panel's input power leads

⏱ 5 min (est.) · Parts: LED panel · Tools: eyes, multimeter

Finding the panel's input end
Diagram · Finding the panel's input end

At the IN end: the 3-pin connector carries 5V, GND, DIN. Many BTF panels also have a separate red/white power pair at that end. Read the labels at the pads where each wire is soldered: trust the pad labels, not the wire colours.

Use the separate power pair if there is one (thicker); otherwise the connector's 5V and GND.

Pass: 5V, GND and DIN wires identified and taped.

4.3 Make the 5V and GND splices

⏱ 20 min (est.) · Parts: jack leads (18 AWG), panel leads, 26 AWG wire, heat shrink · Tools: iron, solder ( ), strippers, heat gun

Power path from the supply to the panel
Diagram · Power path from the supply to the panel
ESP32 powered from the 5V rail
Diagram · ESP32 powered from the 5V rail

5V splice: jack red + panel 5V + perfboard 5V pigtail + a new blue 26 AWG wire to the ESP32 5V/VIN pin (~150 mm).

GND splice: jack black + panel GND + perfboard GND pigtail + a new black 26 AWG wire to an ESP32 GND pin.

Heat shrink over the wires before soldering; twist, solder, slide over, shrink.

Wiring:

SpliceJoins
5Vjack red, panel 5V, shifter 5V (pin 14), ESP32 5V/VIN
GNDjack black, panel GND, shifter GND (pin 7), ESP32 GND

Pass: Firm pull doesn't break either splice; no bare copper.

Don't do yet: Don't use the 26 AWG wire for the panel's power: only the jack's 18 AWG and the panel's leads carry the amps.

4.4 Solder the 1000 uF cap across the splices (polarity!)

⏱ 10 min (est.) · Parts: 1000 uF cap · Tools: iron, solder ( ), heat shrink

Capacitor polarity: stripe to GND
Diagram · Capacitor polarity: stripe to GND

At the panel input: the cap's long (+) leg to the 5V splice, the stripe (-) leg to the GND splice. Sleeve both legs in heat shrink. It sits in the cap cradle on rear_R.

Why: it soaks up the inrush when you plug in and smooths the LED current (BTF/Adafruit practice).

Pass: Stripe leg on GND. Legs sleeved.

Don't do yet: Don't reverse it.

4.5 Wire the data path

⏱ 10 min (est.) · Parts: ESP32, perfboard pigtails, panel DIN · Tools: iron, solder ( ), heat shrink

Data path: GPIO16 > 74AHCT125 > panel DIN
Diagram · Data path: GPIO16 > 74AHCT125 > panel DIN

ESP32 GPIO16 to perfboard DATA IN (solder to the header pin, sleeve it).

Perfboard DATA OUT to panel DIN (through the mating 3-pin connector, or solder + sleeve).

Wiring:

FromTo
ESP32 GPIO1674AHCT125 pin 2 (1A)
74AHCT125 pin 3 (1Y)panel DIN
ESP32 5V/VIN5V splice
ESP32 GNDGND splice (common ground)

Pass: Every wire labelled; nothing on the panel's DOUT end.

4.6 Mount the ESP32, perfboard and cap on rear_R

⏱ 10 min (est.) · Parts: ESP32, perfboard, cap, 2 zip ties, rear_R · Tools: cutters

Inside the right rear cover: ESP32, shifter, cap, jack
Diagram · Inside the right rear cover: ESP32, shifter, cap, jack
CAD render: rear R electronics
CAD render · rear R electronics (from cad/ticker.py)

ESP32: pins down onto the two ledges, USB-C toward the right end (the end with the jack), between the posts. One zip tie through the two slots over the module.

Perfboard: slide into the rails. Cap: into its cradle, one zip tie round it.

Route the 26 AWG wires under clip 1 and the jack leads under clip 2.

Pass: Nothing loose when you shake rear_R gently.

4.7 Meter check before power

⏱ 5 min (est.) · Parts: the wired rear_R · Tools: multimeter

Meter: no short between 5V and GND
Diagram · Meter: no short between 5V and GND

PSU unplugged, USB unplugged. Beep between the 5V and GND splices: a short chirp (cap charging) is fine, a continuous beep is a short.

Pass: No continuous beep (PASS CHECK).

4.8 First power-on (glasses on)

⏱ 5 min (est.) · Parts: PSU · Tools: multimeter

Meter: volts at the panel input
Diagram · Meter: volts at the panel input

Plug the PSU into the wall, then into the jack. No USB. The ESP32's LED comes on, WLED appears at ticker.local within ~20 s.

Meter on DC volts at the panel 5V/GND input: write it in the PASS CHECK.

Pass: 4.85-5.3 V; WLED reachable; nothing smells or smokes.

4.9 Set the ABL to 4,500 mA

⏱ 2 min · Parts: ESP32 · Tools: phone

WLED LED Preferences
Diagram · WLED LED Preferences

LED Preferences: Automatic Brightness Limiter max current 4500 mA. Save.

Pass: Saved; WLED reboots.

4.10 Full-brightness current test (2 minutes)

⏱ 5 min (est.) · Parts: whole wiring · Tools: multimeter, phone

Full-white current test with ABL 4500 mA
Diagram · Full-white current test with ABL 4500 mA

Solid white, brightness 100 %. Open Info: read the estimated current. Meter at the panel input while it's on. After 2 minutes, unplug and touch the jack, splice and leads.

Note: 4.5 A is near the limit of many 5.5 x 2.1 mm jacks (their rating wasn't on the DaierTek listing we read). If the jack gets more than warm, use ABL 3500 mA: text scrolling uses far less anyway.

Pass: <= 4500 mA, >= 4.6 V under load, nothing too hot (PASS CHECK).

4.11 Normal text test

⏱ 2 min · Parts: panel · Tools: phone

All-pixels and colour test
Diagram · All-pixels and colour test

Brightness ~40 %, Scrolling Text HELLO PIN. Typical text lights 10-25 % of pixels: Info should show well under 2 A (est.).

Pass: Clean scrolling, no flicker.

✅ PASS CHECK (required before final assembly): power-on and current test

Answer with what you actually saw or measured. The STOP box unlocks when every answer is in range.

STOP 4: checkpoint

  • PASS CHECK answered with real readings and in range.
  • Cap polarity confirmed (stripe on GND).
  • PSU unplugged again before Stage 5.

Troubleshooting, Stage 4

SymptomLikely causeFix
ESP32 resets when LEDs go brightVoltage dip on the railCheck the cap is in; shorten the 5V/GND to the ESP32; lower ABL
Voltage under load < 4.6 VThin or long power path, weak spliceRedo the splice, use the panel's thicker power pair, keep leads short
WLED estimated current > 4500ABL off or not savedLED Preferences: enable ABL, 4500, Save; reboot
Jack hotJack rating below ~4.5 AABL 3500 mA; or a higher-rated jack (ask before buying)
Nothing lights after wiringData from the shifter to DOUT end, or DIN wire brokenRe-check the IN end; beep pin 3 to DIN

🔒 Locked: finish Stage 4 first (every tick, its STOP box and its PASS CHECK). You can read ahead.

Goal: Acrylic cut and seated in the joined shell, grid behind it, panel behind the grid, lit and crisp.

3D view Stage 5 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate
Diagram · Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate

5.1 Cut the acrylic to 326 x 86 mm

⏱ 20 min (est.) · Parts: acrylic sheet · Tools: plastic scoring knife, straightedge, sandpaper, glasses

Score and snap the acrylic
Diagram · Score and snap the acrylic

Film ON. Mark 326 x 86 mm along the 24 in side. Clamp the straightedge, score 8-10 passes along the line, turn over and score once more over the same line, then snap it over a table edge.

Sand the edges flat with 240 grit on a flat surface. Test-fit in the rebate; take a little more off until it drops in.

Pass: Drops into the rebate without forcing, no cracks.

Don't do yet: Don't saw or drill it without backing: acrylic chips and cracks.

5.2 Join the shell halves for good

⏱ 5 min (est.) · Parts: shell_L, shell_R, 2 pins, 2 x M3x12 · Tools: 2.5 mm hex key

Shell joint: pins, M3x12 screw and insert
Diagram · Shell joint: pins, M3x12 screw and insert

Same as the Stage 1 dry fit, screws now firm (not crushing).

Pass: Front seam flush.

5.3 Peel and seat the acrylic

⏱ 5 min (est.) · Parts: acrylic · Tools: -

Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate
Diagram · Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate

Peel the inside film, clean with a soft cloth (mild soapy water if needed; no alcohol on extruded acrylic). Lay the shell face down on a towel. Drop the acrylic into the rebate. Leave the front film on until the end.

Pass: Acrylic flat in the rebate, no dust trapped (look through the front).

5.4 Drop in the louvre grid

⏱ 2 min · Parts: grid_L, grid_R · Tools: -

CAD render: grid L
CAD render · grid L (from cad/ticker.py)

Left half first (it has the centre divider), then the right half, both behind the acrylic.

Pass: Grid sits flat, square to the window.

5.5 Fit the panel, input end on the right

⏱ 10 min (est.) · Parts: LED panel, 4 VHB pads · Tools: scissors

Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate
Diagram · Cross-section: bezel, acrylic, grid, LEDs, panel, electronics gap, rear plate
3D stand-in: panel
3D stand-in at true size (not a photo; sizes from CART.md / assumed)

Stick 4 small VHB pads on the grid's outer frame (corners). Lower the panel LEDs facing the grid, with the IN end on the right as seen from the front (on your left now, with the shell face down).

Press it gently onto the pads. The panel's leads fold back toward rear_R's electronics.

Pass: Panel flat on the grid, leads at the electronics end.

Don't do yet: Don't press on single LEDs; press on the panel edges.

5.6 Light test before closing

⏱ 5 min (est.) · Parts: everything · Tools: phone

Orientation test results and fixes
Diagram · Orientation test results and fixes

Rest rear_R behind the shell (don't screw it). Plug in the PSU. Scrolling Text, then Solid white 10 %.

Pass: Square, crisp pixels; no cell bleeding into its neighbour much; text reads correctly from the front.

STOP 5: checkpoint

  • Acrylic seated, grid in, panel taped, light test good.
  • PSU unplugged.

Troubleshooting, Stage 5

SymptomLikely causeFix
Acrylic cracked while snappingNot scored deep enoughScore more passes; you have 12 x 24 in of sheet (4+ strips)
Text mirrored nowPanel turned round vs the bench testFlip it, or change first-LED left/right in 2D Configuration
Light bleeds between cellsGrid not tight to the panelThicker VHB pads; ribs on the rear cover press it forward
Dust behind the acrylicStaticLift out, blow off, refit

🔒 Locked: finish Stage 5 first (every tick, its STOP box). You can read ahead.

Goal: Both rear covers screwed on, the USB-C reachable, the ticker screwed into its walnut-look base.

3D view Stage 6 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

6.1 Screw on rear_L

⏱ 5 min (est.) · Parts: rear_L, 6 x M3x10 · Tools: 2.5 mm hex key

CAD render: rear L
CAD render · rear L (from cad/ticker.py)

Ribs toward the panel. 6 screws into the inserts, snug in a cross pattern.

Pass: Plate flat, no rattle.

6.2 Check the USB-C lines up, then screw on rear_R

⏱ 10 min (est.) · Parts: rear_R (wired), 6 x M3x10 · Tools: 2.5 mm hex key, USB-C cable

USB-C through the end-wall slot
Diagram · USB-C through the end-wall slot

Lower rear_R in, tucking the panel leads into the free space by the cap. Push a USB-C cable through the end-wall slot into the ESP32: it should go straight in.

Unplug the cable, then 6 screws.

Pass: USB-C plugs in through the slot; no wire pinched under the plate.

6.3 Join the base halves

⏱ 3 min · Parts: base_L, base_R, 2 pins · Tools: -

CAD render: base L
CAD render · base L (from cad/ticker.py)

Pins into one half, push the halves together on a flat table.

Pass: Seam tight, slot continuous.

6.4 Set the ticker in the base and screw it

⏱ 10 min (est.) · Parts: ticker, base, 4 x M3x10 · Tools: 2.5 mm hex key

Ticker into the base, side view
Diagram · Ticker into the base, side view

Drop the ticker into the slot (it leans back ~10 deg). Lift the pair, tilt it, and drive the 4 screws up through the base into the case-bottom inserts.

Pass: Ticker firm in the base; no wobble.

6.5 Plug in and route the cable

⏱ 2 min · Parts: PSU · Tools: -

CAD render: assembly rear
CAD render · assembly rear (from cad/ticker.py)

PSU into the jack on the back; run the cable down behind the base.

Pass: WLED back on; text scrolling.

6.6 Peel the front film

⏱ 1 min · Parts: acrylic · Tools: -

CAD render: assembly front
CAD render · assembly front (from cad/ticker.py)

Peel the outside film. Done.

Pass: Clean smoked front.

STOP 6: checkpoint

  • Case closed, USB-C reachable through the slot.
  • Ticker screwed into the base and running.

Troubleshooting, Stage 6

SymptomLikely causeFix
Rear cover won't sit flatWire or zip tie under itRe-route under the clips; trim zip-tie tails
Ticker rocks in the baseSlot clearanceA strip of felt or VHB in the slot front
USB-C won't reachBoard not pushed to the right endLoosen the zip tie, slide the board toward the slot

🔒 Locked: finish Stage 6 first (every tick, its STOP box). You can read ahead.

Goal: WLED app on the phone, up/down/alert presets, Alexa on/off/brightness/presets by voice.

3D view Stage 7 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

7.1 Add the ticker in the WLED app

⏱ 5 min (est.) · Parts: ticker · Tools: phone

Up / down / alert presets
Diagram · Up / down / alert presets

Install the free WLED app (iOS / Android). It finds the ticker on your Wi-Fi; or add it by IP. A browser bookmark to http://ticker.local works too.

Pass: Ticker in the app; you can change colour and brightness.

7.2 Make 4 presets

⏱ 15 min (est.) · Parts: ticker · Tools: phone

Up / down / alert presets
Diagram · Up / down / alert presets

Effect Scrolling Text each time; set the text with the segment name; Save as preset:

#Preset nameText colourSpeedExample text
1Ticker UpgreennormalBTC UP
2Ticker DownrednormalBTC DOWN
3Ticker AlertamberfasterALERT
4Ticker HellowhiteslowHELLO PIN

Set a default: Config > LED Preferences > apply preset 4 at boot, default brightness ~40 % (est.).

Pass: Tapping each preset changes text and colour.

7.3 Turn on Alexa in WLED

⏱ 3 min · Parts: ticker · Tools: phone

Alexa through WLED's Hue emulation
Diagram · Alexa through WLED's Hue emulation

Config > Sync Interfaces > Alexa Voice Assistant: Emulate Alexa device ON, invocation name Ticker. Also emulate devices for the first 3 presets (the setting's wording varies by WLED version: check your page). Save.

Pass: Saved.

7.4 Discover in the Alexa app

⏱ 5 min (est.) · Parts: Echo/Alexa · Tools: phone

Alexa through WLED's Hue emulation
Diagram · Alexa through WLED's Hue emulation

Alexa app > Devices > + > Add device > Other > Discover (or say "Alexa, discover devices"). The ticker appears as a light (Philips Hue emulation; the Echo must be on the same Wi-Fi).

Pass: "Ticker" (and the preset devices) appear.

7.5 Voice test

⏱ 3 min · Parts: ticker · Tools: Echo

Alexa through WLED's Hue emulation
Diagram · Alexa through WLED's Hue emulation

"Alexa, turn off Ticker." "Alexa, turn on Ticker." "Alexa, set Ticker to 30 percent." "Alexa, turn on Ticker Alert."

Note: Custom spoken text ("Ticker, show Bitcoin") needs a custom Alexa skill: out of scope for v0 (PRD).

Pass: All four work.

STOP 7: checkpoint

  • Presets saved.
  • Alexa on/off/brightness and one preset work by voice.

Troubleshooting, Stage 7

SymptomLikely causeFix
Alexa finds nothingEcho on another network / 5 GHz guest Wi-FiSame network as the ticker; retry discovery; reboot WLED
Preset devices missingOption not enabled or older WLEDUpdate WLED (OTA) and enable the preset devices
Text resets after power cutNo boot presetSet 'apply preset at boot'

🔒 Locked: finish Stage 7 first (every tick, its STOP box). You can read ahead.

Goal: BTC, SPY, weather and a custom line scrolling in green/red/amber, pushed by tools/ticker_feed.py on the Mac.

3D view Stage 8 overview

Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

8.1 Copy and edit the config

⏱ 5 min (est.) · Parts: tools/ticker_feed.example.json · Tools: computer

Live data feed into the WLED JSON API
Diagram · Live data feed into the WLED JSON API

Copy tools/ticker_feed.example.json to tools/ticker_feed.json. Set wled_host (ticker.local or the IP), latitude/longitude/place for your weather, your custom line, and which sources are on.

Pass: Config saved.

8.2 Dry run (pushes nothing)

⏱ 2 min · Parts: the script · Tools: computer

Live data feed into the WLED JSON API
Diagram · Live data feed into the WLED JSON API

In Terminal, in the ticker folder: /usr/bin/python3 tools/ticker_feed.py --dry-run

It prints each line and the JSON it would send.

Note: Use Apple's /usr/bin/python3. The python.org installer's python3 can fail with CERTIFICATE_VERIFY_FAILED until you run its 'Install Certificates.command'.

Pass: BTC, SPY, weather and your custom line print with colours.

8.3 Push for real

⏱ 2 min · Parts: ticker · Tools: computer

Live data feed into the WLED JSON API
Diagram · Live data feed into the WLED JSON API

/usr/bin/python3 tools/ticker_feed.py --once pushes the next line. Run it 4 times: the lines rotate.

Or --loop to keep going every 60 s while the Terminal is open.

Pass: The ticker shows the price in green (up) or red (down).

8.4 Optional: run it every minute (launchd)

⏱ 5 min (est.) · Parts: tools/com.pin.ticker-feed.plist · Tools: computer

Live data feed into the WLED JSON API
Diagram · Live data feed into the WLED JSON API

The sample plist is not installed. If you want it: fix the two paths inside, copy it to ~/Library/LaunchAgents, launchctl load it (instructions at the top of the file). It runs only while the Mac is awake.

Pass: A new line every minute; the log is /tmp/ticker-feed.log.

8.5 Know what each source is

⏱ 2 min · Parts: - · Tools: -

Live data feed into the WLED JSON API
Diagram · Live data feed into the WLED JSON API
LineSourceKey?Notes
BTCCoinGecko public APInorate-limited; 24 h change
SPYYahoo Finance chart JSONnounofficial, may be delayed or change; vs previous close (TODO in the script)
WeatherOpen-Meteonoset your lat/lon
Customyour config-ASCII only

Pass: You know SPY is the fragile one.

STOP 8: checkpoint

  • Dry run prints every line.
  • The ticker shows live prices in colour.

Troubleshooting, Stage 8

SymptomLikely causeFix
CERTIFICATE_VERIFY_FAILEDpython.org Python without certificatesUse /usr/bin/python3, or run 'Install Certificates.command'
WLED not reachableWrong host or Mac on another networkUse the IP from WLED instead of ticker.local
SPY skippedYahoo blocked or changed the endpointSet "spy": false, or swap fetch_spy for a keyed API
Text shows but no scrollingEffect not Scrolling TextThe script looks it up by name; check the WLED version has it

Generated by tools/guide_v2.py from tools/guide_content.py. Nothing on this page loads from the internet (links open only when you tap them) and no photo is uploaded anywhere: Check my part only shares a photo when you tap Send.