
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.
Progress is saved on this phone.

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

| # | Part | Qty | Price | Link |
|---|---|---|---|---|
| 1 | WS2812B 8x32 LED matrix (256 px, flexible) BTF-LIGHTING ECO 8X32 | 1 | $17.99 | B088BTXHRG |
| 2 | ESP32 Wi-Fi board (runs WLED) AITRIP 2PCS ESP32-WROOM-32 USB-C, CP2102 | 1 (2-pack) | $14.99 | B0HD9VJG9V |
| 3 | Level shifter chip SN74AHCT125N VANXY 12pcs SN74AHCT125N DIP-14 | 1 (12-pack) | $7.59 | B0GHN5GY56 |
| 4 | 5V 6A power supply (5.5 mm barrel) ALITOVE Upgrade 5V 6A 30W | 1 | $17.99 | B0GX5N2DKV |
| 5 | Panel-mount DC jack 5.5x2.1, pre-wired DaierTek 6pcs METAL, 18 AWG 15 cm | 1 (6-pack) | $9.99 | B0BD46CP5Y |
| 6 | 1000 uF 16V capacitor (optional, recommended) E-Projects 5-pack | 1 (5-pack) | $6.63 | B07YN6DS58 |
| 7 | Smoked 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.)
(est.) means estimate. Where a part's size or thread wasn't confirmed it says assumed: measure yours.| What | Value | Where it comes from |
|---|---|---|
| Finished front | 338 x 92 mm (13.3 x 3.6 in) | cad/ticker.py, PRD |
| Case depth | 40.4 mm | cad/ticker.py |
| On the desk | 358 x 84 x ~102 mm with the base | cad/export.py |
| Panel | 320 x 80 mm, 32 x 8 px, 10 mm pitch | CART.md / BTF listing |
| Acrylic cut size | 326 x 86 mm (from the 12 x 24 in sheet) | cad/ticker.py |
| LED data pin | GPIO16 (WLED's default on ESP32) | this guide |
| Brightness limit (ABL) | 1,500 mA bench, 4,500 mA finished | CART.md / PRD |
| Supply | 5 V 6 A, 5.5 x 2.1 mm, centre + | CART.md row 4 |
| Screws | 16 x M3x10 (rear covers + base), 2 x M3x12 (shell joint) | cad/ticker.py |
| Inserts | 18 ruthex M3 (12 rear, 2 joint, 4 base) | cad/ticker.py |
Goal: Find every part, check nothing is damaged, and have every tool on the table. No soldering yet.
The 3D model loads when you scroll here.
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).

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.

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.

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

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

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

Can about 10 x 20 mm (est.), two legs. A light stripe with minus signs marks the NEGATIVE leg; the longer leg is positive.
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.

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

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.

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

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

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

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

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

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

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

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

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

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

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.

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

Grey double-sided foam tape, 12 mm wide. 4 small pads hold the panel to the grid.
Plain 2.54 mm-pitch prototype board, cut to 30 x 40 mm. Not in REUSE.md: any scrap perfboard (check you have one).

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.

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.
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.

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.
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.
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.

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).


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.
| Symptom | Likely cause | Fix |
|---|---|---|
| Chip says HC125 or HCT125 | Wrong chip from another drawer | Use only AHCT125 (the VANXY pack). HCT may work; HC won't |
| Can't find GPIO16 label | Some 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 sleeve | Wired the other way at the factory | Swap the meaning of the colours; label the wires + and - |
| No M3x12 in the kit | Kit sizes vary | M3x10 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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

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.
| Part | Qty | Material | Est. weight |
|---|---|---|---|
| shell_L, shell_R | 1 + 1 | matte black PLA | ~70 g each (est.) |
| rear_L, rear_R | 1 + 1 | matte black PLA | ~58 / ~62 g (est.) |
| grid_L, grid_R | 1 + 1 | matte black PLA | ~25 g each (est.) |
| base_L, base_R | 1 + 1 | wood-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.


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.).

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.
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.
| Where | How many | Hole faces |
|---|---|---|
| Rear-cover bosses (top + bottom walls, back edge) | 12 (6 per half) | the back |
| Joint blocks, RIGHT half only (cut face) | 2 | the 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.
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.


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.
| Symptom | Likely cause | Fix |
|---|---|---|
| Insert went in crooked | Pressed at an angle | Reheat and pull it out with the iron + pliers; fill and redo, or skip that one (11 others hold) |
| Halves don't meet | Elephant foot or a blob at the cut face | Sand the cut face flat on sandpaper on a table |
| Shell warped | Long thin print cooled unevenly | Ask for a brim / enclosure reprint; the acrylic and screws pull small warps flat |
| Wood-fill base is rough | Wood-fill texture | Sand 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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

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.
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.
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.
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:
| From | To | Wire |
|---|---|---|
| Jack red (+) | Panel 5V | clip lead |
| Jack black (-) | Panel GND | clip lead |
| ESP32 GPIO16 | Panel DIN | clip lead |
| ESP32 GND | Panel GND | clip 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.
WLED > Config > LED Preferences:
| Setting | Value |
|---|---|
| LED type | WS281x |
| Colour order | GRB |
| Length | 256 |
| Data GPIO | 16 |
| Automatic Brightness Limiter | ON, max current 1500 mA (bench) |
| LED voltage / current per LED | 5 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.
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.
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).
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 see | Fix in 2D Configuration |
|---|---|
| Reads correctly, moves right to left | Nothing: done |
| Mirrored left-right | Change first LED left <-> right |
| Upside down | Change first LED top <-> bottom |
| Jumbled / zig-zag stripes | Toggle serpentine; if still wrong toggle vertical |
Pass: TICKER 123 reads correctly from the front.
Config > Security & Updates > Backup configuration. Keep the file: a reflash then takes a minute.
Pass: cfg.json saved.
Answer with what you actually saw or measured. The STOP box unlocks when every answer is in range.
All 256 must light. Fewer: check the dead one isn't the first (data) LED, check GND is joined.
Wrong colour = wrong colour order: set GRB in LED Preferences and test again.
Use the orientation table in step 2.8 to fix it, then test again.
| Symptom | Likely cause | Fix |
|---|---|---|
| Only the first LED lights or random flicker | No common GND, or 3.3 V data too weak | Check the GND clip; if still flaky it's what the level shifter (Stage 3) fixes |
| Nothing lights | Wrong GPIO, PSU off, panel output end used | GPIO 16 in LED Prefs; clip to the DIN end (arrow points away from it) |
| Installer can't find a port | Charge-only cable or no driver | Try another USB-C cable; install the CP210x driver |
| Red shows green | Colour order | Set GRB (or try RGB) in LED Preferences |
| ticker.local doesn't open | mDNS blocked on some networks/Android | Use 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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

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.
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.
Pass: Chip centred, all 14 legs through.
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:
| Pin | Name | Goes to |
|---|---|---|
| 14 | VCC | 5V rail (pigtail) |
| 7 | GND | GND rail (pigtail) |
Pass: Shiny cone joints, no bridges.
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.
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:
| Pins | Name | Tie to |
|---|---|---|
| 4, 10, 13 | 2OE, 3OE, 4OE | pin 14 (5V) |
| 5, 9, 12 | 2A, 3A, 4A | pin 7 (GND) |
| 6, 8, 11 | 2Y, 3Y, 4Y | nothing (leave open) |
Pass: Beep checks match the table; no pin bridged to its neighbour.
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).
Wiring:
| Pin | Name | Goes to |
|---|---|---|
| 2 | 1A | ESP32 GPIO16 |
| 3 | 1Y | panel DIN (optional 330 ohm) |
Pass: Two labelled data pigtails.
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.
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.
| Symptom | Likely cause | Fix |
|---|---|---|
| Panel dark through the shifter | Pin 1 not to GND, or 5V missing on pin 14 | Measure pin 14 to pin 7 with the PSU on: about 5 V |
| Chip gets warm | Output shorted or reversed chip | Unplug. Check notch direction and pin 3 isn't touching 5V/GND |
| Works, then flickers | Long ground path | Shorten 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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.
Push the jack through the hole from the inside (wires inside), nut on the outside. Tighten firmly.
Pass: Jack doesn't spin when you twist the barrel.
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.
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:
| Splice | Joins |
|---|---|
| 5V | jack red, panel 5V, shifter 5V (pin 14), ESP32 5V/VIN |
| GND | jack 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.
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.
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:
| From | To |
|---|---|
| ESP32 GPIO16 | 74AHCT125 pin 2 (1A) |
| 74AHCT125 pin 3 (1Y) | panel DIN |
| ESP32 5V/VIN | 5V splice |
| ESP32 GND | GND splice (common ground) |
Pass: Every wire labelled; nothing on the panel's DOUT end.

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.
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).
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.
LED Preferences: Automatic Brightness Limiter max current 4500 mA. Save.
Pass: Saved; WLED reboots.
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.
Pass: <= 4500 mA, >= 4.6 V under load, nothing too hot (PASS CHECK).
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.
Answer with what you actually saw or measured. The STOP box unlocks when every answer is in range.
A continuous beep is a short circuit. Find it before plugging in (a brief chirp is the cap charging).
Stripe = minus = GND. Fix it now: a reversed cap can burst.
Should be 4.85-5.3 V. Way off: wrong supply or a bad splice.
Must be 4,500 mA or less. Higher means ABL is off or set wrong.
Below 4.6 V the wires/jack are dropping too much: shorten or thicken them, or lower ABL.
Too hot: unplug. Lower ABL to 3500 mA and redo the splice; tell Claude/Orrin.
| Symptom | Likely cause | Fix |
|---|---|---|
| ESP32 resets when LEDs go bright | Voltage dip on the rail | Check the cap is in; shorten the 5V/GND to the ESP32; lower ABL |
| Voltage under load < 4.6 V | Thin or long power path, weak splice | Redo the splice, use the panel's thicker power pair, keep leads short |
| WLED estimated current > 4500 | ABL off or not saved | LED Preferences: enable ABL, 4500, Save; reboot |
| Jack hot | Jack rating below ~4.5 A | ABL 3500 mA; or a higher-rated jack (ask before buying) |
| Nothing lights after wiring | Data from the shifter to DOUT end, or DIN wire broken | Re-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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.
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.
Same as the Stage 1 dry fit, screws now firm (not crushing).
Pass: Front seam flush.
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).

Left half first (it has the centre divider), then the right half, both behind the acrylic.
Pass: Grid sits flat, square to the window.

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.
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.
| Symptom | Likely cause | Fix |
|---|---|---|
| Acrylic cracked while snapping | Not scored deep enough | Score more passes; you have 12 x 24 in of sheet (4+ strips) |
| Text mirrored now | Panel turned round vs the bench test | Flip it, or change first-LED left/right in 2D Configuration |
| Light bleeds between cells | Grid not tight to the panel | Thicker VHB pads; ribs on the rear cover press it forward |
| Dust behind the acrylic | Static | Lift 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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.

Ribs toward the panel. 6 screws into the inserts, snug in a cross pattern.
Pass: Plate flat, no rattle.
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.

Pins into one half, push the halves together on a flat table.
Pass: Seam tight, slot continuous.
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.

PSU into the jack on the back; run the cable down behind the base.
Pass: WLED back on; text scrolling.

Peel the outside film. Done.
Pass: Clean smoked front.
| Symptom | Likely cause | Fix |
|---|---|---|
| Rear cover won't sit flat | Wire or zip tie under it | Re-route under the clips; trim zip-tie tails |
| Ticker rocks in the base | Slot clearance | A strip of felt or VHB in the slot front |
| USB-C won't reach | Board not pushed to the right end | Loosen 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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.
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.
Effect Scrolling Text each time; set the text with the segment name; Save as preset:
| # | Preset name | Text colour | Speed | Example text |
|---|---|---|---|---|
| 1 | Ticker Up | green | normal | BTC UP |
| 2 | Ticker Down | red | normal | BTC DOWN |
| 3 | Ticker Alert | amber | faster | ALERT |
| 4 | Ticker Hello | white | slow | HELLO PIN |
Set a default: Config > LED Preferences > apply preset 4 at boot, default brightness ~40 % (est.).
Pass: Tapping each preset changes text and colour.
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.
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.
"Alexa, turn off Ticker." "Alexa, turn on Ticker." "Alexa, set Ticker to 30 percent." "Alexa, turn on Ticker Alert."
Pass: All four work.
| Symptom | Likely cause | Fix |
|---|---|---|
| Alexa finds nothing | Echo on another network / 5 GHz guest Wi-Fi | Same network as the ticker; retry discovery; reboot WLED |
| Preset devices missing | Option not enabled or older WLED | Update WLED (OTA) and enable the preset devices |
| Text resets after power cut | No boot preset | Set '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.
The 3D model loads when you scroll here.
Drag to turn · pinch to zoom · two fingers to pan · tap a part for its name.
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.
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.
Pass: BTC, SPY, weather and your custom line print with colours.
/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).
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.
| Line | Source | Key? | Notes |
|---|---|---|---|
| BTC | CoinGecko public API | no | rate-limited; 24 h change |
| SPY | Yahoo Finance chart JSON | no | unofficial, may be delayed or change; vs previous close (TODO in the script) |
| Weather | Open-Meteo | no | set your lat/lon |
| Custom | your config | - | ASCII only |
Pass: You know SPY is the fragile one.
| Symptom | Likely cause | Fix |
|---|---|---|
| CERTIFICATE_VERIFY_FAILED | python.org Python without certificates | Use /usr/bin/python3, or run 'Install Certificates.command' |
| WLED not reachable | Wrong host or Mac on another network | Use the IP from WLED instead of ticker.local |
| SPY skipped | Yahoo blocked or changed the endpoint | Set "spy": false, or swap fetch_spy for a keyed API |
| Text shows but no scrolling | Effect not Scrolling Text | The 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.