Overview
Physical controls for a more enjoyable media playback experience.
Features
- Responsive volume knob & mute button.
- Transport controls (play/pause, stop, FF/REW, skip tracks).
- Pair up with your favourite Bluetooth® speakers.
- Quick, physical connection (don't have to go through menu system to pair with keypad & speakers).
- Customizable controls/scheme.
This project tries to improve over the original "Media hub" presented here.
- More compact design
- Bigger volume knob - not interfering with macropad keys.
🛒️List of main material/hardware
(See section "More tools/materials/hardware" near the end of this note for extras)
More material/hardware:
- Small boards (pine works well).
- 1/4" plywood (furniture grade). 6mm Baltic birch is particularly nice/straight.
- 1/8" (3mm Baltic) might be rigid enough as well.
- Carpenter's glue ("PVA" ex: Titebond III, LePage, etc).
🏗️The build
Base enclosure
Starting with the "base enclosure" is not an attempt at trivializing the build. Quite a few hours of planning, building, and frustration went into making this enclosure.
Comments/observations:
- A recessed channel was cut on the box/enclosure's edge to lock the tiny USB hub into place.
- Carefully trimmed (hand plane) wood strips are PVA-glued to inside of the main surface.
- Strips control the height of the macropad, and provide "biting" material for screws.
- Carpenter's (PVA) glue is surprisingly *very* strong for gluing wood-to-wood (as long as not trying to bond end-grain). PVA glue joints are typically stronger than the wood itself, once dry.
- Recessed/counterbored holes are required because 1/4" ply is thicker than the TRS jack and rotary encoder shaft thread heights.
Issues with this build:
- Mostly constructed with hand tools (not popular/common outside the woodworking community).
- A proper introduction to sharpening by itself would take up longer than this note.
- Large number of steps involved would make this document unpleasant to read if presented.
- Too time consuming to for me to build friends their own "media hubs".
Hopefully, someone will read the "A challenge" section (near the end of the note) and propose better alternative build.
Adding "the extras"
The optional IR receiver module is built mostly from Adafruit components:
- Adafruit Perma-Proto Small Mint Tin Size (#1214): Small + 4 screw-attachment points.
-
Adafruit KB2040 microcontroller (#5302) + female headers (16-pin).
- Female headers were selected so nothing shorts out if disconnected.
- Kept extra 3 pins to avoid trimming the headers.
- JST-XH connectors make it easier to disconnect.
- 1/8" TRS panel mount connects to IR receiver module (described later).
Next, the "extra" sensors are added to the enclosure.
- The volume encoder is clamped into position using the integrated shaft/nut.
- The TRS jack is also clamped into position with its integrated shaft/nut.
- The PCB (with KB2040 IR signal decoder) screws into the enclosure side.
- Short nylon screws and nuts act as feet on the bottom side (screwdriver won't fit).
- M3 nylon nuts act as spacers (underside of PCB) and reduce the effective screw length.
IR receiver module
A TSOP32328 IR receiver module (#157) can be soldered onto/inside a modified 1/8" TRS connector fairly easily.
- Ideally, the receiver circuit should be protected against electrical overstress (EOS) as described in the "Application circuit" in the Vishay datasheet.
- That said, the circuit seems fine (for the time being) without adding these elements to the modified connector.
One advantage of having added a TRS jack for connecting the IR module is make it possible to use ready-built "extender cable" solutions like this one. Just make sure the pin order matches your TRS jack wiring.
Sourcing a TRS connector
I won't link to a suggested TRS connector given that the product I purchased was of low quality.
- Many of the connectors were noticeably/visually manufactured with poor tolerances.
- Plastic spacers bleed over the metal barrels, and the metal column itself is visibly bent from base to tip.
- Worse yet: connectors seat loosely inside the jack.
That said: the connection appears electrically adequate despite having a loose mechanical feel.
Both the Adafruit KB2040 (IR signal decoding) and RP2040 macropad must connect to the USB hub:
- Need 2 USB-C to A cables like this one (#4473).
- Seems like 6" creates too much connector strain (too short). 12" works out better.
- Though a silicone cable would be even better (less rigid = less strain).
Attaching the macropad
A rectangular ABS sheet works great to attach the macropad to the spacer strips.
- ABS is easily cut to shape by scoring with a knife, then snapping off excess.
- Best to use table edge to snap off excess (less likely to get injured).
- More advanced techniques here. Pretty cool!
- Probably best not to sand/heat up ABS though (likely bad for you).
- Note: ABS edges can also readily trimmed down with a hand plane (though friction heat releases somewhat of an unpleasant smell).
- Place bottom plate from add-on pack (#5103) in macropad opening to mark holes on ABS plate
- Should line up perfectly with mounting holes on bottom of macropad.
- Flip macropad + ABS sheet into macropad opening, and add short #4 screws (best to pre-drill first).
Don't forget to attach the rotary encoder to the macropad SEMMA QT port!
- A 100mm STEMMA QT cable seems about right.
- Could use normal rotary encoder (instead of an I2C variant) by cutting a longer STEMMA QT cable in half, and soldering on the leads.
- The STEMMA QT/I2C solution seemed better for this example. Your CircuitPython code would need to change if using the normal rotary encoder instead.
Attaching the USB hub
Next, the USB hub is attached to the bottom plate (see image below).
Stop blocs are first glued to the bottom plate to keep the hub in place.
- This was actually done before the plate was screwed and trimmed to its final dimensions.
- Somewhat of a tricky process.
Next, another piece of ABS is scored & snapped to size to cover/hold down the hub.
- Part of the hub was left exposed because it is embedded in a recess within the enclosure walls.
- Foam tape is applied to the underside of the ABS plate to provide extra friction/holding power.
The final assembly
The enclosure was originally built assuming the phone would sit on some external stand.
- Eventually realized it was preferable for the stand to be attached to the main enclosure.
- Attaching the two means the media hub 2.0 can be moved to new locations/surfaces with more ease.
...and so the ABS mending plate came to be.
- The mending plate makes it possible to try out multiple solutions without completely re-building the base enclosure.
- Do not want to start from scratch while figuring out the optimal (or even just adequate) solution.
Phone holder assembly
- Affix double-ended 1/4" stud to bottom of ball head and the phone holder at the top.
- Install the entire assembly to the 1/4" insert nut on the back of the "Media hub 2.0".
Note:
- Might need to remove the ball head tightening screw to quickly spin 360°.
- Near completion: the screw can be re-inserted and used to apply the final twists.
- Tighten thumbscrew to further screw down ball head.
- Release thumbscrew to back off 1/4-1/2 turn.
- Tighten thumbscrew again & repeat unit secure.
The outside-facing USB port can be used for add-on accessories. Some suggestions include:
- a keyboard for entering search text / writing long emails.
- a Bluetooth® audio transmitter like this one from Creative labs.
- already "pre-paired" with to your favourite room speaker.
- automatically switching over after any (compatible) phone plugs into the media hub 2.0.
🛠️Sample tools (for the curious)
Above is a sampling of tools used to realize this build (including the large shooting board where everything sits).
- Again: The intent is not to bore people with details of the build - so they were omitted.
- Hoping others will take on "[the] challenge" (a few sections below) and propose simpler builds.
For those interested in developing woodworking skills or sourcing tools/hardware:
- I suggest looking into LeeValley (Canada). They have a good, expansive catalogue.
💾Program your devices
To get your RP2040 macropad to act as a media controller, it needs to:
- detect keypresses and changes in the knob position.
- send out corresponding keyboard messages to the attached USB host device (ex: a phone).
Similarly, to get your KB2040 to act as a IR-based media controller, it needs to:
- detect consumer IR remote control signals.
- send out corresponding keyboard messages to the attached USB host device (ex: a phone).
My own implementation for "Media hub 2.0" is written for Adafruit's CircuitPython, and can be found here:
- 💾 MediaController project README (see MediaHub2p0_AFMacropad & MediaHub2p0_KB2040).
- 🚀 Installation instructions.
- 📦️ Download tested version of MediaController (v0.1).
⚙️Adapting to your hardware
It is very likely the software won't work optimally for your particular configuration. For example:
- Supplied CircuitPython code decodes IR volume key being held down as a media volume key being held down.
- Android phones and Linux/Windows PCs seem to operate well this way.
- iOS/iPhones volumes shoot up/down too fast with this solution. Code might need to be adapted to send individual key presses.
- Volume knob does not react the same way on Windows/Linux/MacOS/iOS/Android.
- Despite this all this variation: the supplied CircuitPython volume knob code still seems to work reasonably well on all tested platforms.
- Jog (FF/REW) doesn't seem to be supported by many media apps.
- Mapping the macropad's on-board rotary encoder to some other keys is strongly advised (haven't found a good alternative yet).
- Absolute volume control (supported by some Bluetooth® speakers) is supposed to keep your phone volume in sync when you change the speaker volume controls directly.
- Testing shows that Bluetooth® modules integrated in (new-ish) iOS/iPhones and Android devices behave as expected with respect to absolute volume control.
- On the other hand, iOS/iPhone volume sync via Bluetooth® audio transmitters like this one from Creative labs responded very erratically at the time of writing.
- That said: the same audio transmitter worked quite well with the tested Android devices (once the speaker and transmitter were paired with the bundled Mac/Windows PC software).
⁉️🚀️A challenge
The build presented here should be achievable for many comfortable around woodworking hand tools. That said, a build better suited for an electronics hobbyist would be way better.
Assuming people besides myself would enjoy a tactile "hub" to access their media apps, the hope is that others will present their own ideas/variants, more approachable for the average hobbyist.
- A 3D-printed enclosure perhaps?
- Maybe someone knows of plastic enclosures that would "just work out".
- The obvious path would, of course, be a simpler (still wooden) construction with fewer cuts/steps.
- I personally like the idea of having a build made mostly of Lego. Seems like the ideal prototyping solution.
📚️Additional resources
🛒️More tools/materials/hardware suggestions
-
#4 screws (5/8"): Smaller screws are not always easy to find.
- LeeValley is a good place to look for quality & selection.
- Handplanes: I really like the quality from LeeValley (Canada).
- I have also heard good things about Lie-Nielson (US).
This page (🎵️ Media hub 2.0: Media control w/opt Bluetooth) was last updated on September 07, 2025.
Text editor powered by tinymce.