Thunderbird Labs
← Lemnos

Building Lemnos

Everything you need for the small Lemnos board (144 LEDs/m strip), its controllers and displays, and the optional radio, and how to put it all together.

Prices checked October 26, 2026, and they will probably have changed by the time you read this. These are not affiliate links or endorsements, just the parts I used or the closest things I could find. Generic parts from any seller will do.

The small board, with a Standard Controller docked on the left and the Radio Case on the right.

Six slots

The board has six slots around its edge, and each one holds a Standard Controller, a Basic Display, or the Radio Case. Decide what goes in them before you buy anything, because most of the parts list is per slot.

Every controller and display is tethered to its own slot. It pulls out to wherever its player sits and pushes back in until the magnets catch, so the whole thing packs away as one piece with no loose parts. You only fill the slots you’ll use, and you can add more later.

What it costs

Pretty much everything comes in packs much bigger than one board needs. If you buy every pack for the board plus a Standard Controller and a Basic Display, it comes to about $103, plus shipping on the SCORPIO, and the radio is another $16. The parts that actually end up in the board come to about $26.90, plus about $4.40 for each Standard Controller and $1.30 for each Basic Display, so a board with two of each is about $38, and the rest goes in your parts bin. The same packs cover up to five Standard Controllers (the buttons come in fives), and the two LED rolls cover the island and 13 bars.

Parts

The board

PartListingUsePackPack priceEachPer unit
MicrocontrollerPlus shippingAdafruit Feather RP2040 SCORPIO11$14.50$14.50$14.50
WS2812B LED strip, 144 LEDs/m, 5 VTwo rolls: the island alone is 155 LEDs; what's left covers 13 barsSEZO WS2812B ECO, two 1 m rolls1552 m$21.98$10.99/m$11.83
Heat-set inserts, M3 × 4 and M2 × 26 M3 x 4 for the risers and 2 M2 x 2 for the SCORPIO, whose holes are only 3 mm deepPofsnnx M2-M6 assortment, 350 pcs8350$9.99$0.03$0.23
Screw kit, M2-M5 socket heads6 M3 x 8 for the Cover and 2 M2 x 4 for the SCORPIOBESARME 2024-piece, 12.9 alloy steel8460$12.99$0.03$0.23
325 paracordThe island's tether, 3 conductors; the displays and radio use the same spool2.7 mm, 100 ft~30 cm100 ft$9.99$0.33/m$0.10
8 × 3 mm magnetsCounted with each controller, display and the radio100-packpack100$9.99$0.10–
Total$79.44$26.88

Each Standard Controller

PartListingUsePackPack priceEachPer unit
EC11 rotary encoder with push switchWWZMDiB 6-pack16$8.88$1.48$1.48
12 mm momentary push buttonGebildet prewired, 5-pack15$7.99$1.60$1.60
550 paracordFits the 7 conductorsAmazon Basics Type III, 100 ft~15 cm100 ft$6.29$0.21/m$0.03
LED strip, 10 LEDsAlready boughtFrom the board's rolls10–––$0.76
8 × 3 mm magnetsAlready bought; 2 in the unit, 2 in its slotFrom the magnet pack4–––$0.40
M3 inserts and M3 × 8 screwsAlready bought; 2 of eachFrom the board's packs2–––$0.11
Total$23.16$4.39

Each Basic Display

PartListingUsePackPack priceEachPer unit
325 paracordHolds up to 4 conductorsFrom the board's spool~15 cm–––$0.05
LED strip, 10 LEDsAlready boughtFrom the board's rolls10–––$0.76
8 × 3 mm magnetsAlready bought; 2 in the unit, 2 in its slotFrom the magnet pack4–––$0.40
M3 inserts and M3 × 8 screwsAlready bought; 2 of eachFrom the board's packs2–––$0.11
Total–$1.33

Radio (optional)

PartListingUsePackPack priceEachPer unit
ESP32 radioNot the T-Display-S3LILYGO T-Display (ESP32)11$16.00$16.00$16.00
325 paracord4 conductorsFrom the board's spool~15 cm–––$0.05
8 × 3 mm magnetsAlready bought; 1 in the case, 1 in its slotFrom the magnet pack2–––$0.20
M3 insert and M3 × 8 screwAlready boughtFrom the board's packs1–––$0.06
Total$16.00$16.31

Optional

PartListingUsePackPack priceEachPer unit
Pairing button, for an ESP32 inside the boardAny momentary button works: adapt the hole in the CAD to whatever you have, or drill it after you printA spare from the 12 mm button pack1–––$1.60
Barrel jack, M11 × 1 threaded panel mountOnly if you'd rather not power it through the SCORPIO's USB-C5.5 x 2.1 mm, 6 sets16$9.97$1.66$1.66
Total$9.97$3.26

Hardware

PartQtyWhere
8 × 3 mm disc magnetsGeneric, like these4 per unit2 in each controller or display and 2 in its slot on the board; 1 and 1 for the Radio Case
M3 brass heat-set inserts6 + 2 per unit6 in the Base’s risers, 2 in each controller or display Body, 1 in the Radio Case
M3 × 8 (or longer) socket head screws6 + 2 per unitCover to Base (6), each controller or display (2), Radio Case (1)
M2 × 2 brass heat-set inserts2SCORPIO mount
M2 × 4 socket head screws2SCORPIO to its mount
550 paracordper Standard ControllerTether jacket; it’s the size that fits 7 conductors
325 paracordper display or radio, and the islandTether jacket; holds up to 4 conductors

From your shop

Build guide

The photos are from my own build. The other pictures are made from the CAD model: a render on the left and an exploded drawing with a parts list on the right (click either one to see it bigger). The parts you’re adding in that step are gray, and the ones you’ve already put together are in color. There’s also a printable PDF of this page, with just the drawings and photos.

Like Clotho, most of this should make sense once the parts are in your hands. The wrong parts won’t fit, and the board’s test pattern tells you right away if the wiring is off. The wiring reference on GitHub has the full pin tables.

Tools

Printing

Inserts

Inserts are optional. The hole sizes are parameters in the CAD (cover_hole_diameter for the M3s and feather_hole_diameter for the M2s), so you can size them down to slightly under the screw’s major diameter, a little under 3 mm for M3 or 2 mm for M2, and thread the screws straight into the plastic.

  1. Heat-set the 6 M3 inserts into the risers in the Base, and the 2 M2 inserts for the SCORPIO.
    Render of the Base with six M3 heat-set inserts lifted above the six risers around its edge and two smaller M2 inserts above the SCORPIO mount at the back Exploded drawing of the Base and its inserts with their parts list

    The six M3 inserts go in the risers around the edge; the two M2 inserts go in the SCORPIO mount at the back.

Island LEDs

  1. Cut the strip into 7 rows of 17, 21, 25, 29, 25, 21, and 17 LEDs. Each row has 3 LEDs per hex and one between hexes. You can lay the strip in the Strip Carrier to measure each row instead of counting.
  2. Stick the rows into the Strip Carrier with the strip’s own adhesive. The carrier doubles as the assembly jig.
    Render of the seven LED strip rows lifted above the Strip Carrier, each over its own channel Exploded drawing of the Strip Carrier and the seven LED strip rows with their parts list

    Seven rows, one per channel. The wiring between the rows isn’t in the model.

  3. Join the rows end to end in a serpentine: the end of each row loops back to the same end of the next, so the data runs along one row, back along the next, and so on. Watch the arrows on the strip; data only flows one way.
  4. Data can go in at any corner. Note which one; you’ll set it as ISLAND_START in config.py.
  5. The top is tethered to the Base like the controllers are, so the board can come apart and go back together without touching its wiring. Make a 325 tether with 3 conductors (5 V, ground, and data; see How to make a paracord tether) and solder it to the input end of the first row. The Strip Carrier has no clamp or tie-off point, so it can print flat with no supports; hot-glue the tether and its wires to the underside of the carrier instead.
    The island tether hot-glued to the underside of the Strip Carrier, its wires running to the LED strip at the edge The underside of the Strip Carrier in the Cover, with the island tether glued down and running off to the Base

    The island tether, hot-glued to the underside of the Strip Carrier. Its wires run around the edge to the first row.

Controllers and displays

The Standard Controller and the Basic Display go together the same way. The Basic Display just has its own Slider and Left Endcap, and no encoder or button. Where the two differ, the Basic Display’s picture is right under the controller’s.

  1. Heat-set the 2 M3 inserts into the ends of the Body.
    Render of the controller Body with an M3 heat-set insert lifted off each end Exploded drawing of the Body and its inserts with their parts list

    One insert in each end of the Body.

  2. Press the 2 magnets into the back of the Body, with a drop of super glue under each.
    Render of the back of the controller Body with two magnets lifted out of their pockets Exploded drawing of the Body and its two magnets with their parts list

    The back of the Body, the side that docks against the board.

  3. Stick the 10-LED strip into the Body with LED 1 at the player’s left as they face the board.
    Render of the 10-LED strip lifted straight off the angled face inside the controller Body Exploded drawing of the LED strip and the Body with its parts list
  4. Fit the Window and the encoder into the Slider from its back, and fasten the encoder with its matching nut (not shown).
    Render from behind the Slider, with the Window and the EC11 encoder lifted off its back, each lined up with its opening Exploded drawing of the Slider, Window and encoder with their parts list

    Standard Controller: the Window and the encoder both go in from the back of the Slider.

    Render from behind the Basic Display Slider, with the Window lifted off its back Exploded drawing of the Basic Display Slider and Window with their parts list

    Basic Display: just the Window.

  5. Push the button into the Left Endcap and fasten it with its matching nut (not shown). The Basic Display skips this step.
    Render of the 12 mm button lifted out of its hole in the Left Endcap Exploded drawing of the button and the Left Endcap with their parts list

    The button goes in from the outside of the Left Endcap.

  6. Wire the left end. Trim the tether’s 5 V, ground, and LED data wires and solder them to the left end of the LED strip. In a Standard Controller, also trim the button wire and solder it to one of the button’s leads. Then solder about 25 cm (10″) of spare black wire to the button’s other lead and run it straight out the right side of the Body; it’s a ground for the encoder. My colors are red for 5 V, black for ground, blue for LED data, and white for the button. A Basic Display only connects the three LED strip wires.
  7. Screw the Left Endcap onto the Body with an M3 × 8.
    Render of the Left Endcap, with its button, and an M3 screw lined up with the left end of the Body Exploded drawing of the Left Endcap and screw going onto the Body with their parts list

    Standard Controller.

    Render of the Basic Display Left Endcap and an M3 screw lined up with the left end of the Body Exploded drawing of the Basic Display Left Endcap and screw with their parts list

    Basic Display: its own Left Endcap, with no button.

  8. Ground at the right end. In a Standard Controller, solder a short ground lead to the right end of the LED strip and leave it sticking out to the right.
  9. Slide the Slider, with its Window (and encoder, in a Standard Controller), into the Body from the right end. In a Standard Controller, don’t seat it all the way yet.
    Render of the finished Slider, with its Window and encoder, lined up with the open right end of the Body Exploded drawing of the Slider going into the Body with its parts list

    Standard Controller.

    Render of the Basic Display Slider lined up with the open right end of the Body Exploded drawing of the Basic Display Slider going into the Body with its parts list

    Basic Display.

  10. Wire the encoder. With the Slider partway in and the encoder close to the Body, trim the remaining leads: the tether’s two encoder wires and its encoder switch wire, and the two ground leads (the spare black from the button and the short one from the strip). Solder the encoder wires to the encoder’s two outer pins (mine are yellow and brown), the switch wire (orange) to one of its switch pins, and the two grounds to its two ground pins (the middle pin and the other switch pin). Solder a short jumper across the two grounds. Then guide the wires into place as you slide the Slider the rest of the way in. The Basic Display skips this step.
  11. Put the Right Endcap on and screw it down with the other M3 × 8.
    Render of the Right Endcap and an M3 screw lined up with the right end of the finished controller Exploded drawing of the Right Endcap and screw with their parts list

    Standard Controller.

    Render of the Right Endcap and an M3 screw lined up with the right end of the finished Basic Display Exploded drawing of the Right Endcap and screw on the Basic Display with their parts list

    Basic Display.

Tethers and magnets

  1. Cut the 22 AWG conductors to the tether length you want (mine are about 15 cm, or 6″; make them as long as you like, as long as the extra still fits inside the board with everything docked) and run them through the paracord (see How to make a paracord tether), or use 22 AWG multi-conductor cable instead. A Standard Controller needs 7: 5 V, ground, LED data, encoder A and B, encoder push, and the button. That takes 550 cord. A Basic Display needs 3 (5 V, ground, and LED data) and the radio 4 (5 V, ground, TX, and RX), so 325 is fine for those. So is the island’s tether (see Island LEDs), with 3.
  2. The controllers, displays, and Radio Case only have a plain hole for the tether. Before you wire the unit end, tie a whipping around the tether (see How to tie off the tethers) where it will sit just inside the hole. It’s too fat to pull back through, so it’s the strain relief at that end.
  3. The Base has three built-in tie-off points. Tie each tether to one (see How to tie off the tethers), so a pull on the cord never reaches the solder joints, and use them to tidy the internal wiring too. The tethers stay fixed to the board: controllers and displays extend for play but don’t come off.
    Three tethers in the Base, each being lashed to a tie-off point with white lacing cord, the ends still long The three tethers lashed to the Base’s tie-off points, with the lacing cord trimmed

    Three tethers lashed to the Base’s three tie-off points: wrapped (left) and trimmed (right).

  4. Press the slot magnets in: 2 in each slot you’ll use, 1 for the Radio Case’s slot. The back slot’s pair goes into the Base, and the rest go into the Skirt’s outer faces. They’re a press fit, but put a drop of super glue under each one so it can’t come loose. Every unit is tethered to its own slot, so polarity only has to match between a unit and its slot. (The controllers’ and displays’ own magnets are in their steps.)
    Render of the Base with two magnets lifted out of the back slot Exploded drawing of the back slot magnets and the Base with their parts list

    The back slot’s pair goes into the Base.

    Render of the Skirt with ten magnets lifted straight out of its outer faces, two per face Exploded drawing of the Skirt and its ten magnets with their parts list

    The other five slots’ magnets go into the Skirt.

How to make a paracord tether

The tethers are ordinary 22 AWG wires inside a paracord jacket. The paracord makes them tough, flexible, and nice to handle, and it looks a lot better than a bundle of wire. 550 cord takes the Standard Controller’s 7 conductors (snugly), and 325 takes up to 4, which covers a Basic Display or the radio. You don’t need paracord if you have multi-conductor cable: 22 AWG 4- or 8-conductor cable is fine. I used paracord because I had it. For the controllers and the radio, which get pulled out and pushed back in, it adds a bit of wear resistance.

  1. Cut the cord. Cut the paracord a little longer than you want the tether, and the conductors a good bit longer than that, so you have tails to work with at both ends.
    A spool of paracord, three conductors, a piece of heat-shrink, two pairs of scissors, and a lighter on a blue mat

    Paracord, the conductors, heat-shrink, scissors, and a lighter for the heat-shrink.

  2. Gut it. Paracord is a woven sheath around a core of thin strands. Hold the sheath at one end and pull the core strands out of the other. They’ll bunch the sheath up as they go, so work it along a bit at a time.
    A length of paracord sheath with its white core strands pulled out of one end

    The core strands coming out of the sheath.

  3. Inchworm it through. The fit is tight, especially 325 with 4 conductors, so don’t try to push or pull the wires through in one go. Push the ends of the conductors a little way into the sheath, bunch the sheath up over them, then hold the wires and smooth the sheath out along them. Repeat, a few centimeters at a time, until the wires come out the other end.
    The paracord sheath with red, black, and blue conductors sticking out of both ends

    The conductors through the sheath.

  4. Finish the ends. Paracord frays the moment you cut it. Trim the sheath where you want the tether to end, slide a piece of heat-shrink over the end so it covers the last bit of sheath and the first bit of the wires, and shrink it down. That holds the sheath in place and keeps it from fraying. Do both ends, then strip and terminate the conductors.
    A piece of heat-shrink slid over the end of the paracord, not yet shrunk A finished tether with heat-shrink on both ends and the conductors sticking out

    Heat-shrink slid over the end (left), and a finished tether with both ends done (right).

How to tie off the tethers

The tethers are tied down at the Base’s three tie-off points, and each one has a whipping at its unit end that keeps it from pulling out through the case, so a pull on the cord never reaches the solder joints. I used Bell System-style waxed lacing cord, the stuff phone techs have been lacing cable with for a hundred years. It grips, it doesn’t slip, and it never has to come off. A zip tie works too, but lacing is tidier and doesn’t leave a sharp tail.

There are two ties. At the unit end, a common whipping around the tether by itself makes a stop that can’t pull back through the hole. At the Base, a lash binds the tether to a tie-off point.

The whipping (strain relief at the unit end)

  1. Lay a loop. Lay a loop of lacing cord along the tether, with the loop pointing the way you’ll be wrapping and a short tail sticking out the other end.
    Spools of black and white waxed lacing cord beside a tether, with scissors White lacing cord laid along the tether, with the first turn on and the working end hanging down

    Waxed lacing cord (left), and the loop laid along the tether with the first turn on (right).

  2. Wrap. Starting at the tail end, wrap the cord around everything, loop included, in tight turns laid side by side. A handful of turns is plenty here; the runs are short and the load is small.
    Several tight turns of lacing cord around the tether, with the working end hanging down

    A handful of tight turns.

  3. Through the loop. Leave the end of the loop sticking out past the last turn, and put the working end through it.
    The working end of the lacing cord passed through the loop beside the turns

    The working end through the loop.

  4. Pull it under. Pull the tail at the start until the loop, and the working end with it, disappears under the turns. Stop about halfway, so both ends are buried and locked.
    The turns of lacing cord with both ends coming out from under them, one at each side

    Both ends buried under the turns.

  5. Trim. Cut both ends off close to the turns.
    A finished whipping on the tether with both ends trimmed short

    Trimmed. This one is around the tether by itself: the stop that keeps it from pulling out of the case.

The lash (to a tie-off point in the Base; the photos are under Tethers and magnets)

  1. Clove hitch. Tie a clove hitch around the tether and the tie-off point together.
  2. Two turns. Wrap two more tight turns around both.
  3. Lay the loop. Cross the lines and lay a loop along the lash, pointing the way you’ll be wrapping.
  4. Eight turns. Wrap eight more tight turns over everything, loop included.
  5. Through the loop. Pass the working end through the loop.
  6. Pull it all the way through. Pull the far tail until the loop, and the working end with it, comes completely back through the turns.
  7. Square knot. Cross the ends over again and tie a square knot underneath the lash. Trim the ends.

Wiring

The SCORPIO has 8 LED outputs on the inner pins of the 2 × 8 header on its short end; the outer pins are all ground. All 8 update together, so the whole board refreshes in about 5 ms. Seats are numbered clockwise from the bottom.

Except for 5 V and ground, every pair of wires can go on backwards without hurting anything: the two switches (the button and the encoder’s push switch), the encoder’s two pins, and TX and RX. Swapped switches or encoder pins just work backwards. Swapped TX and RX just won’t talk, so swap them back.

Wiring diagram: the SCORPIO feeds the 5 V and ground joiners from its USB pin; the island, the Standard Controller at seat 1, a Basic Display at seat 2, and the Radio Case each take 5 V and ground from the joiners; LED data runs from NEO0, NEO1 and NEO2; the controller’s encoder goes to D24 and D25, its push switch to D9 and its button to D10; the radio’s TX and RX cross over to the SCORPIO’s RX and TX

How it all connects. Click it to see it full size.

ChannelSCORPIO pinRuns toLEDs
0NEOPIXEL0 (GPIO16)Island155
1NEOPIXEL1 (GPIO17)Seat 1 bar (bottom)10
2NEOPIXEL2 (GPIO18)Seat 2 bar (lower left)10
3NEOPIXEL3 (GPIO19)Seat 3 bar (upper left)10
4NEOPIXEL4 (GPIO20)Seat 4 bar (top)10
5NEOPIXEL5 (GPIO21)Seat 5 bar (upper right)10
6NEOPIXEL6 (GPIO22)Seat 6 bar (lower right)10
  1. The SCORPIO mounts on its two M2 inserts with two M2 × 4 screws.
    Render of the SCORPIO board lifted above its mount at the back of the Base, with two M2 screws above it Exploded drawing of the SCORPIO and its screws over the Base with their parts list

    The SCORPIO sits in its mount at the back of the Base, USB-C toward the back wall. The wiring isn’t in the model.

  2. DuPonts. Crimp a DuPont terminal onto each wire that plugs into the SCORPIO or a joiner. The front pair of wings grips the bare wire and the back pair grips the insulation, so strip only enough for the front pair. Then click the terminal into its housing.
    A DuPont crimper and scissors beside a finished tether with its conductors stripped and a loose terminal A DuPont terminal sitting in the crimper’s die A crimped DuPont terminal on a blue wire, with the front wings on the bare wire and the back wings on the insulation

    The crimper, a terminal in its die, and a finished crimp.

  3. LEDs. Island data to channel 0, and each controller or display’s bar to the channel for its seat.
  4. Controls. The first Standard Controller’s encoder goes to D24 and D25, its push switch to D9, and its button to D10. Further controllers go on free pins; the free inputs table lists them, and config.py says which pin does what. Every switch just shorts its pin to ground. An encoder’s two pins have to be consecutive GPIOs.
  5. Power. 5 V and ground to every strip, controller, and display through your power distribution, with all the grounds tied together.
    The Base from above with all the wiring done: the SCORPIO on the left, DuPont housings on its headers, the 5 V joiner in red heat-shrink, and three tethers lashed to the tie-off points A closer view of the wiring in the Base, with the wires plugged into the SCORPIO on DuPont housings

    Everything plugged in. Each wire goes to the SCORPIO or a joiner on a DuPont, and the 5 V joiner is the one in red heat-shrink.

Radio (optional)

  1. Heat-set the M3 insert into the right side of the Radio Case Body.
    Render of the Radio Case Body with an M3 heat-set insert lifted straight out of its right side Exploded drawing of the Radio Case Body and its insert with their parts list

    The insert goes into the right side of the Body.

  2. The tether’s four wires go to the radio’s 5 V, ground, TX, and RX (mine are red, black, green for TX, and white for RX). TX and RX cross over: the radio’s TX goes to the SCORPIO’s RX, and its RX to the SCORPIO’s TX. On the T-Display that’s G25 (TX) and G26 (RX); on a DevKit or NodeMCU-32S it’s GPIO17 and GPIO16.
  3. 5 V from the board’s supply to its 5V pin (VIN on most other ESP32 boards). The radio firmware and its setup are in the radio README.
  4. The T-Display goes in the Radio Case, then the Endcap goes on the right side with an M3 × 8.
    Render of the Radio Case Endcap and an M3 screw lined up with the right side of the Body Exploded drawing of the Radio Case Endcap and screw with their parts list

    The Endcap and its screw both come straight in from the right. The T-Display isn’t in the model.

  5. Or mount any other ESP32 inside the board. If yours needs a pairing button, run it to the power jack hole in the back or to the Skirt.

Closing it up

  1. Put the Skirt on first. It doesn’t touch the Base, the carrier, or the wiring, and most of the slot magnets are in it.
    The Base with the blue Skirt around it and the wiring and tethers inside, before the Strip Carrier goes in

    The Skirt on, before the Strip Carrier goes in.

  2. Seat the controllers and the Radio Case in their slots for the first time now, before the top goes on, so you can see where their cables end up inside and guide them so nothing gets pinched.
  3. Set the Strip Carrier with its LEDs in the Base. It stays on its tether, so it can come back out without unplugging anything.
    Render of the Strip Carrier with its LED rows lifted above the Base Exploded drawing of the Strip Carrier going into the Base with its parts list

    The carrier sits on top of the Base, over the SCORPIO and the wiring.

  4. Set the 37 Tiles in the carrier. They just sit in place.
    Render of the 37 hexagonal Tiles lifted above the Strip Carrier in the Base Exploded drawing of the Tiles over the Strip Carrier with their parts list

    One Tile per hex. Clear PETG, so they mostly disappear in the render.

  5. The Cover holds the Tiles and the Skirt in place. Set it on, and before you put all the screws in and button it up, power the board and run the test pattern (set GAME = "testpattern" in config.py; see Software). Red, green, and blue fill every LED in order, so a wiring problem shows up while the top is still easy to take off.
    The board with the Cover on and its island lit in rows of red and green on the test pattern

    The test pattern partway through, with the Cover on and the screws not in yet.

  6. Once it all lights, screw the Cover down with the 6 M3 screws into the Base’s risers.
    Render of the Skirt lifted around the Base, the Cover above it, and six M3 screws above the Cover Exploded drawing of the Skirt, Cover, and screws with their parts list

    The Skirt goes around the edge, the Cover goes over everything, and the six screws go down into the risers.

Software

  1. Install CircuitPython 10 on the SCORPIO and the three libraries, then copy the board files over, as described in the CircuitPython README.
  2. In config.py, set ISLAND_START to the corner where your island’s data goes in, and list your controllers.
  3. Set GAME = "testpattern" and power up. It lights every LED in order, so a row that’s backwards or a bar on the wrong channel shows up right away. Then set it back.

Playing

Files

The STEP model, the Fusion archive, the print files, and the print profile are on MakerWorld; the board software, radio firmware, and docs are on GitHub. Hardware and docs are CC BY-SA and software is MIT, so remix away, and tell me what you build, break, or improve.

Get the files on MakerWorld → View on GitHub