[{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/731/original/MediaHub2p0-ConnectedHub.png?1743210309","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch1\u003eOverview\u003c/h1\u003e\n\u003cp\u003ePhysical controls for a more enjoyable media playback experience.\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eResponsive volume knob \u0026amp; mute button.\u003c/li\u003e\n\u003cli\u003eTransport controls (play/pause, stop, FF/REW, skip tracks).\u003c/li\u003e\n\u003cli\u003ePair up with your favourite Bluetooth® speakers.\u003c/li\u003e\n\u003cli\u003eQuick, physical connection (don't have to go through menu system to pair with keypad \u0026amp; speakers).\u003c/li\u003e\n\u003cli\u003eCustomizable controls/scheme.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis project tries to improve over the \u003ca href=\"https://adafruit-playground.com/u/Alain_ManHW/pages/media-hub-media-control-w-opt-bluetooth\" target=\"_blank\"\u003eoriginal \"Media hub\" presented here\u003c/a\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore compact design\u003c/li\u003e\n\u003cli\u003eBigger volume knob - not interfering with macropad keys.\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch1\u003e🛒️List of main material/hardware\u003c/h1\u003e\n\u003cp\u003e(See section \"More tools/materials/hardware\" near the end of this note for extras)\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/5100","metadata":{"name":"RP2040 macropad","url":"https://www.adafruit.com/product/5100","description":"Fairly complete control inteface (some assembly required)","quantity":"1","featured":false}},{"element_type":"product","content":"https://www.adafruit.com/product/5103","metadata":{"name":"Macropad add-on hardware","url":"https://www.adafruit.com/product/5103","description":"Nice extras","quantity":"1","featured":false}},{"element_type":"product","content":"https://www.adafruit.com/product/3692","metadata":{"name":"TRS Jack","url":"https://www.adafruit.com/product/3692","description":"Connection to (optional) IR reciever","quantity":"1","featured":false}},{"element_type":"product","content":"https://www.adafruit.com/product/5302","metadata":{"name":"Adafruit KB2040 microcontroller","url":"https://www.adafruit.com/product/5302","description":"Optional: Process incomming IR reciever messages","quantity":"1","featured":false}},{"element_type":"product","content":"https://www.adafruit.com/product/5880","metadata":{"name":"Volume knob encoder","url":"https://www.adafruit.com/product/5880","description":"Optional: Can position far enough away from macropad to accomodate larger knob","quantity":"1","featured":false}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://sabrent.com/collections/hubs/products/hb-c4wp\" class=\"parts-name\" target=\"_blank\"\u003eSabrent USB-C hub\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eWith 100W power delivery\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://sabrent.com/collections/hubs/products/hb-c4wp\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"Sabrent USB-C hub","url":"https://sabrent.com/collections/hubs/products/hb-c4wp","description":"With 100W power delivery","quantity":"1"}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://www.smallrig.com/Easy-Loading-Fast-Switch-Smartphone-Holder-4366.html\" class=\"parts-name\" target=\"_blank\"\u003eSmallRig phone holder\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eSqueeze pins to open jaws (*very* convenient).\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://www.smallrig.com/Easy-Loading-Fast-Switch-Smartphone-Holder-4366.html\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"SmallRig phone holder","url":"https://www.smallrig.com/Easy-Loading-Fast-Switch-Smartphone-Holder-4366.html","description":"Squeeze pins to open jaws (*very* convenient).","quantity":"1"}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://www.smallrig.com/smallrig-1-4-camera-hot-shoe-mount-with-additional-1-4-screw-2pcs-pack-2059.html\" class=\"parts-name\" target=\"_blank\"\u003eSmallRig (\"hot shoe mount\") ball head (or similar alternative)\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eAllows for adjustment of phone position. Need to remove bottom shoe mount screw (might be holding tight with thread locker).\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://www.smallrig.com/smallrig-1-4-camera-hot-shoe-mount-with-additional-1-4-screw-2pcs-pack-2059.html\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"SmallRig (\"hot shoe mount\") ball head (or similar alternative)","url":"https://www.smallrig.com/smallrig-1-4-camera-hot-shoe-mount-with-additional-1-4-screw-2pcs-pack-2059.html","description":"Allows for adjustment of phone position. Need to remove bottom shoe mount screw (might be holding tight with thread locker).","quantity":"1"}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://neewer.com/products/neewer-camera-screw-kit-16-pieces-tripod-screw-adapter-converter-spigot-screw-mount-pack-66600783\" class=\"parts-name\" target=\"_blank\"\u003eNeewer screw adapters (or similar alternative)\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eAttach ball head to enclosure base (1/4\" threaded insert nut).\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://neewer.com/products/neewer-camera-screw-kit-16-pieces-tripod-screw-adapter-converter-spigot-screw-mount-pack-66600783\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"Neewer screw adapters (or similar alternative)","url":"https://neewer.com/products/neewer-camera-screw-kit-16-pieces-tripod-screw-adapter-converter-spigot-screw-mount-pack-66600783","description":"Attach ball head to enclosure base (1/4\" threaded insert nut).","quantity":"1"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eMore material/hardware:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSmall boards (pine works well).\u003c/li\u003e\n\u003cli\u003e1/4\" plywood (furniture grade). 6mm Baltic birch is particularly nice/straight.\n\u003cul\u003e\n\u003cli\u003e1/8\" (3mm Baltic) might be rigid enough as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCarpenter's glue (\"PVA\" ex:\u0026nbsp;\u003ca href=\"https://www.titebond.com/product/glues/e8d40b45-0ab3-49f7-8a9c-b53970f736af\" target=\"_blank\"\u003eTitebond III\u003c/a\u003e, \u003ca href=\"https://www.lepage.ca/en/products/central-pdp.html/lepage-pro-carpenters-wood-glue/SAP_0201FTL019Y3.html\" target=\"_blank\"\u003eLePage\u003c/a\u003e, etc).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e🏗️The build\u003c/h1\u003e\n\u003ch2\u003eBase enclosure\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/717/original/MediaHub2p0-Inside.png?1742744377","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eStarting 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.\u003c/p\u003e\n\u003ch4\u003eComments/observations:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eA recessed channel was cut on the box/enclosure's edge to lock the tiny USB hub into place.\u003c/li\u003e\n\u003cli\u003eCarefully trimmed (hand plane) wood strips are PVA-glued to inside of the main surface.\n\u003cul\u003e\n\u003cli\u003eStrips control the height of the macropad, and provide \"biting\" material for screws.\u003c/li\u003e\n\u003cli\u003eCarpenter's (PVA) glue is surprisingly\u0026nbsp;\u003cstrong\u003e*very*\u003c/strong\u003e 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.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eRecessed/counterbored holes are required because 1/4\" ply is thicker than the TRS jack and rotary encoder shaft thread heights.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eIssues with this build:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eMostly constructed with hand tools (not popular/common outside the woodworking community).\u003c/li\u003e\n\u003cli\u003eA proper introduction to sharpening by itself would take up longer than this note.\u003c/li\u003e\n\u003cli\u003eLarge number of steps involved would make this document unpleasant to read if presented.\u003c/li\u003e\n\u003cli\u003eToo time consuming to for me to build friends their own \"media hubs\".\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHopefully, someone will read the \"A challenge\" section (near the end of the note) and propose better alternative build.\u003c/p\u003e\n\u003ch2\u003eAdding \"the extras\"\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/716/original/MediaHub2p0-InsideAddExtras.png?1742689328","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch4\u003eThe optional IR receiver module is built mostly from Adafruit components:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/1214\" target=\"_blank\"\u003eAdafruit Perma-Proto Small Mint Tin Size (#1214)\u003c/a\u003e: Small + 4 screw-attachment points.\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/5302\" target=\"_blank\"\u003eAdafruit KB2040 microcontroller (#5302)\u003c/a\u003e + \u003ca href=\"https://www.adafruit.com/product/2886\" target=\"_blank\"\u003efemale headers (16-pin)\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eFemale headers were selected so nothing shorts out if disconnected.\u003c/li\u003e\n\u003cli\u003eKept extra 3 pins to avoid trimming the headers.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/4423\" target=\"_blank\"\u003eJST-XH connectors\u003c/a\u003e make it easier to disconnect.\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/3692\"\u003e1/8\" TRS panel mount\u003c/a\u003e connects to IR receiver module (described later).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eNext, the \"extra\" sensors are added to the enclosure.\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eThe volume encoder is clamped into position using the integrated shaft/nut.\u003c/li\u003e\n\u003cli\u003eThe TRS jack is also clamped into position with its integrated shaft/nut.\u003c/li\u003e\n\u003cli\u003eThe PCB (with KB2040 IR signal decoder) screws into the enclosure side.\n\u003cul\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/4685\" target=\"_blank\"\u003eShort nylon screws and nuts\u003c/a\u003e act as feet on the bottom side (screwdriver won't fit).\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.adafruit.com/product/4685\" target=\"_blank\"\u003eM3 nylon nuts\u003c/a\u003e act as spacers (underside of PCB) and reduce the effective screw length.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eIR receiver module\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/718/original/MediaHub2p0-IRreceiver.png?1742746576","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eA \u003ca href=\"https://www.adafruit.com/product/157\" target=\"_blank\"\u003eTSOP32328 IR receiver module (#157)\u003c/a\u003e can be soldered onto/inside a modified 1/8\" TRS connector fairly easily.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIdeally, the receiver circuit should be protected against electrical overstress (EOS) as described in the \"Application circuit\" in the \u003ca href=\"https://cdn-shop.adafruit.com/datasheets/tsop382.pdf\" target=\"_blank\"\u003eVishay datasheet\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThat said, the circuit seems fine (for the time being) without adding these elements to the modified connector.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOne advantage of having added a TRS jack for connecting the IR module is make it possible to use ready-built \u003ca href=\"https://www.amazon.ca/dp/B07FKPHD2L?th=1\" target=\"_blank\"\u003e\"extender cable\" solutions like this one\u003c/a\u003e. Just make sure the pin order matches your TRS jack wiring.\u003c/p\u003e\n\u003ch4\u003eSourcing a TRS connector\u003c/h4\u003e\n\u003cp\u003eI won't link to a suggested TRS connector given that the product I purchased was of low quality.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany of the connectors were noticeably/\u003cem\u003evisually\u003c/em\u003e manufactured with poor tolerances.\u003c/li\u003e\n\u003cli\u003ePlastic spacers bleed over the metal barrels, and the metal column itself is visibly bent from base to tip.\u003c/li\u003e\n\u003cli\u003eWorse yet: connectors seat loosely inside the jack.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThat said: the connection appears electrically adequate despite having a loose mechanical feel.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eWiring up \u0026amp; packing in\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/732/original/MediaHub2p0-ConnectAndPack.png?1743210624","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eBoth the \u003ca href=\"https://www.adafruit.com/product/5302\" target=\"_blank\"\u003eAdafruit KB2040\u003c/a\u003e (IR signal decoding) and \u003ca href=\"https://www.adafruit.com/product/5100\" target=\"_blank\"\u003eRP2040 macropad\u003c/a\u003e must connect to the USB hub:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNeed 2 USB-C to A cables \u003ca href=\"https://www.adafruit.com/product/4473\" target=\"_blank\"\u003elike this one (#4473)\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eSeems like 6\" creates too much connector strain (too short). 12\" works out better.\u003c/li\u003e\n\u003cli\u003eThough a silicone cable would be even better (less rigid = less strain).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eAttaching the macropad\u003c/h4\u003e\n\u003cp\u003eA \u003ca href=\"https://www.amazon.ca/dp/B08RQQ9GYR\" target=\"_blank\"\u003erectangular ABS sheet\u003c/a\u003e works great to attach the macropad to the spacer strips.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eABS is easily cut to shape by\u0026nbsp;\u003ca href=\"https://www.youtube.com/shorts/J-3VJT54oSE\" target=\"_blank\"\u003escoring with a knife, then snapping off excess\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eBest to use table edge to snap off excess (less likely to get injured).\u003c/li\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.youtube.com/watch?v=_H6Bbg2bINk\" target=\"_blank\"\u003eMore advanced techniques here\u003c/a\u003e. Pretty cool!\u003c/li\u003e\n\u003cli\u003eProbably best not to sand/heat up ABS though (likely bad for you).\u003c/li\u003e\n\u003cli\u003eNote: ABS edges can also readily trimmed down with a hand plane (though friction heat releases somewhat of an unpleasant smell).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePlace \u003ca href=\"https://www.adafruit.com/product/5103\" target=\"_blank\"\u003ebottom plate from add-on pack (#5103)\u003c/a\u003e in macropad opening to mark holes on ABS plate\n\u003cul\u003e\n\u003cli\u003eShould line up perfectly with mounting holes on bottom of macropad.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFlip macropad + ABS sheet into macropad opening, and add short #4 screws (best to pre-drill first).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDon't forget to attach the rotary encoder to the macropad SEMMA QT port!\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA \u003ca href=\"https://www.adafruit.com/product/4210\" target=\"_blank\"\u003e100mm STEMMA QT cable\u003c/a\u003e seems about right.\u003c/li\u003e\n\u003cli\u003eCould use \u003ca href=\"https://www.adafruit.com/product/377\" target=\"_blank\"\u003enormal rotary encoder\u003c/a\u003e (instead of an \u003ca href=\"https://www.adafruit.com/product/5880\" target=\"_blank\"\u003eI2C variant\u003c/a\u003e) by cutting a longer STEMMA QT cable in half, and soldering on the leads.\u003c/li\u003e\n\u003cli\u003eThe STEMMA QT/I2C solution seemed better for this example. Your CircuitPython code would need to change if using the normal rotary encoder instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eAttaching the USB hub\u003c/h4\u003e\n\u003cp\u003eNext, the USB hub is attached to the bottom plate (see image below).\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/736/original/MediaHub2p0-HubSecure.png?1743353250","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eStop blocs are first glued to the bottom plate to keep the hub in place.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis was actually done\u0026nbsp;\u003cem\u003ebefore\u003c/em\u003e the plate was screwed and trimmed to its final dimensions.\u003c/li\u003e\n\u003cli\u003eSomewhat of a tricky process.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNext, another piece of ABS is scored \u0026amp; snapped to size to cover/hold down the hub.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePart of the hub was left exposed because it is embedded in a recess within the enclosure walls.\u003c/li\u003e\n\u003cli\u003eFoam tape is applied to the underside of the ABS plate to provide extra friction/holding power.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eThe final assembly\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/733/original/MediaHub2p0-FinalAssembly.png?1743210657","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eThe enclosure was originally built assuming the phone would sit on some external stand.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEventually realized it was preferable for the stand to be attached to the main enclosure.\u003c/li\u003e\n\u003cli\u003eAttaching the two means the media hub 2.0 can be moved to new locations/surfaces with more ease.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e...and so the ABS mending plate came to be.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe mending plate makes it possible to try out multiple solutions without completely re-building the base enclosure.\u003c/li\u003e\n\u003cli\u003eDo not want to start from scratch while figuring out the optimal (or even just adequate) solution.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePhone holder assembly\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/730/original/Z-MediaHub2p0_Holder.JPG?1743208815","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n        \u003cul\u003e\n\u003cli\u003eAffix double-ended 1/4\" stud to bottom of ball head and the phone holder at the top.\u003c/li\u003e\n\u003cli\u003eInstall the entire assembly to the 1/4\" insert nut on the back of the \"Media hub 2.0\".\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNote:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMight need to remove the ball head tightening screw to quickly spin 360°.\u003c/li\u003e\n\u003cli\u003eNear completion: the screw can be re-inserted and used to apply the final twists.\n\u003cul\u003e\n\u003cli\u003eTighten thumbscrew to further screw down ball head.\u003c/li\u003e\n\u003cli\u003eRelease thumbscrew to back off 1/4-1/2 turn.\u003c/li\u003e\n\u003cli\u003eTighten thumbscrew again \u0026amp; repeat unit secure.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n","metadata":{}},{"element_type":"alert","content":"\u003cp\u003eNote the choice of SmallRig's \"easy loading\" phone holder with 2 squeeze pins (pictured above). If attaching your phone to the holder is too much of a struggle, you are likely to avoid the entire solution (or possibly settle on leaving the phone beside your \"media hub\" instead).\u003c/p\u003e","metadata":{"class":"element alert-element build-alert alert-info","markdown":"Note the choice of SmallRig's \"easy loading\" phone holder with 2 squeeze pins (pictured above). If attaching your phone to the holder is too much of a struggle, you are likely to avoid the entire solution (or possibly settle on leaving the phone beside your \"media hub\" instead).","alert_type":"info"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n        \u003ch1\u003eHub add-ons\u003c/h1\u003e\n      \n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/735/original/MediaHub-ExtExtras.png?1743211129","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eThe outside-facing USB port can be used for add-on accessories. Some suggestions include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ea keyboard for entering search text / writing long emails.\u003c/li\u003e\n\u003cli\u003ea Bluetooth® audio transmitter like\u0026nbsp;\u003ca href=\"https://us.creative.com/p/accessories/creative-bt-w3x\" target=\"_blank\"\u003ethis one from Creative labs\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003ealready \"pre-paired\" with to your favourite room speaker.\u003c/li\u003e\n\u003cli\u003eautomatically switching over after any (compatible) phone plugs into the media hub 2.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e🛠️Sample tools (for the curious)\u003c/h1\u003e\n      \n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/724/original/Z-MediaHub2p0_tools-small.JPG?1742782848","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eAbove is a sampling of tools used to realize this build (including the large shooting board where everything sits).\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAgain: The intent is not to bore people with details of the build - so they were omitted.\u003c/li\u003e\n\u003cli\u003eHoping others will take on \"[the] challenge\" (a few sections below) and propose simpler builds.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor those interested in developing woodworking skills or sourcing tools/hardware:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eI suggest looking into \u003ca href=\"https://www.leevalley.com\" target=\"_blank\"\u003eLeeValley (Canada)\u003c/a\u003e. They have a good, expansive catalogue.\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n        \u003ch1\u003e💾Program your devices\u003c/h1\u003e\n\u003cp\u003eTo get your RP2040 macropad to act as a media controller, it needs to:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003edetect keypresses and changes in the knob position.\u003c/li\u003e\n\u003cli\u003esend out corresponding keyboard messages to the attached USB host device (ex: a phone).\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSimilarly, to get your KB2040 to act as a IR-based media controller, it needs to:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003edetect consumer IR remote control signals.\u003c/li\u003e\n\u003cli\u003esend out corresponding keyboard messages to the attached USB host device (ex: a phone).\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eMy own implementation for \"Media hub 2.0\" is written for Adafruit's CircuitPython, and can be found here:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e💾\u0026nbsp;\u003ca href=\"https://github.com/alainman-krh/Projects_Circuits/blob/main/projects/MediaController/README.md\" target=\"_blank\"\u003eMediaController project README\u003c/a\u003e (see MediaHub2p0_AFMacropad \u0026amp; MediaHub2p0_KB2040).\u003c/li\u003e\n\u003cli\u003e🚀\u0026nbsp;\u003ca href=\"https://github.com/alainman-krh/Projects_Circuits/blob/main/projects/MediaController/1-INSTALL.md\" target=\"_blank\"\u003eInstallation instructions\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📦️ Download tested version of \u003ca href=\"https://github.com/alainman-krh/Projects_Circuits/releases/tag/MediaController-v0.1\" target=\"_blank\"\u003eMediaController (v0.1)\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n      ","metadata":{}},{"element_type":"alert","content":"\u003cp\u003eOther makers have microcontroller projects that likely achieve something very similar. Feel free to start from one of those - or even write your own from scratch.\u003c/p\u003e","metadata":{"class":"element alert-element build-alert alert-info","markdown":"Other makers have microcontroller projects that likely achieve something very similar. Feel free to start from one of those - or even write your own from scratch.","alert_type":"info"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch1\u003e⚙️Adapting to your hardware\u003c/h1\u003e\n\u003cp\u003eIt is very likely the software won't work optimally for your particular configuration. For example:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupplied CircuitPython code decodes IR volume key being held down as a media volume key being held down.\n\u003cul\u003e\n\u003cli\u003eAndroid phones and Linux/Windows PCs seem to operate well this way.\u003c/li\u003e\n\u003cli\u003eiOS/iPhones volumes shoot up/down too fast with this solution. Code might need to be adapted to send individual key presses.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eVolume knob does not react the same way on Windows/Linux/MacOS/iOS/Android.\n\u003cul\u003e\n\u003cli\u003eDespite this all this variation: the supplied CircuitPython volume knob code still seems to work reasonably well on all tested platforms.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eJog (FF/REW) doesn't seem to be supported by many media apps.\n\u003cul\u003e\n\u003cli\u003eMapping the macropad's on-board rotary encoder to some other keys is strongly advised (haven't found a good alternative yet).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAbsolute volume control (supported by some Bluetooth® speakers) is supposed to keep your phone volume in sync when you change the speaker volume controls directly.\n\u003cul\u003e\n\u003cli\u003eTesting shows that Bluetooth® modules integrated in (new-ish) iOS/iPhones and Android devices behave as expected with respect to absolute volume control.\u003c/li\u003e\n\u003cli\u003eOn the other hand, iOS/iPhone volume sync via Bluetooth® audio transmitters like \u003ca href=\"https://us.creative.com/p/accessories/creative-bt-w3x\" target=\"_blank\"\u003ethis one from Creative labs\u003c/a\u003e responded very erratically at the time of writing.\u003c/li\u003e\n\u003cli\u003eThat 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).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"alert","content":"\u003cp\u003eNote that USB-C is not \u003cem\u003eelectrically\u003c/em\u003e symmetrical (even if mechanically symmetrical). This is can lead to much confusion! Some USB-C cables don't negotiate properly when connected backwards. Depending on the cables you use: Media hub 2.0 might not talk to your phone correctly until the cable orientation is flipped over. 😵️\u003c/p\u003e","metadata":{"class":"element alert-element build-alert alert-warning","markdown":"Note that USB-C is not *electrically* symmetrical (even if mechanically symmetrical). This is can lead to much confusion! Some USB-C cables don't negotiate properly when connected backwards. Depending on the cables you use: Media hub 2.0 might not talk to your phone correctly until the cable orientation is flipped over. 😵️","alert_type":"warning"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch1\u003e⁉️🚀️A challenge\u003c/h1\u003e\n\u003cp\u003eThe 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.\u003c/p\u003e\n\u003cp\u003eAssuming 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.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA 3D-printed enclosure perhaps?\u003c/li\u003e\n\u003cli\u003eMaybe someone knows of plastic enclosures that would \"just work out\".\u003c/li\u003e\n\u003cli\u003eThe obvious path would, of course, be a simpler (still wooden) construction with fewer cuts/steps.\u003c/li\u003e\n\u003cli\u003eI personally like the idea of having a build made mostly of Lego. Seems like the ideal prototyping solution.\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch1\u003e📚️Additional resources\u003c/h1\u003e\n\u003ch2\u003e🛒️More tools/materials/hardware suggestions\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ca href=\"https://www.leevalley.com/en-ca/shop/hardware/fasteners/screws/wood-screws/48656-finished-steel-screws?item=01Z1053\" target=\"_blank\"\u003e#4 screws (5/8\")\u003c/a\u003e: Smaller screws are not always easy to find.\n\u003cul\u003e\n\u003cli\u003eLeeValley is a good place to look for quality \u0026amp; selection.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eHandplanes: I really like the quality from\u0026nbsp;\u003ca href=\"https://www.leevalley.com/en-ca/shop/tools/hand-tools/planes\" target=\"_blank\"\u003eLeeValley (Canada)\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eI have also heard good things about \u003ca href=\"https://www.lie-nielsen.com/nodes/4063/handplanes\" target=\"_blank\"\u003eLie-Nielson (US)\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://www.amazon.ca/dp/B0CP9WH1BV\" class=\"parts-name\" target=\"_blank\"\u003e18\" USB4 extension cable (or something similar)\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eConnect to phone by extending short cable on hub. Thunderbolt cables are typically the most flexible. This one is ok (would ideally be a bit less rigid).\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://www.amazon.ca/dp/B0CP9WH1BV\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"18\" USB4 extension cable (or something similar)","url":"https://www.amazon.ca/dp/B0CP9WH1BV","description":"Connect to phone by extending short cable on hub. Thunderbolt cables are typically the most flexible. This one is ok (would ideally be a bit less rigid).","quantity":"1"}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://us.creative.com/p/accessories/creative-bt-w3x\" class=\"parts-name\" target=\"_blank\"\u003eCreative BT-W3X (optional)\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eIf \"direct pairing\" to a speaker is preferred when using the \"Media hub 2.0\"\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://us.creative.com/p/accessories/creative-bt-w3x\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"Creative BT-W3X (optional)","url":"https://us.creative.com/p/accessories/creative-bt-w3x","description":"If \"direct pairing\" to a speaker is preferred when using the \"Media hub 2.0\"","quantity":"1"}},{"element_type":"parts","content":"\n  \u003cdiv class=\"parts-details\"\u003e\n    \u003cdiv\u003e\n      \u003cspan class=\"parts-quantity\"\u003e1\u003c/span\u003e\u003cspan\u003e x \u003c/span\u003e\n        \u003ca href=\"https://www.amazon.ca/dp/B0CT3285LL\" class=\"parts-name\" target=\"_blank\"\u003eA large knob for main volume encoder\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eThis one is nice (large/solid feel)\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"parts-action\"\u003e\n  \u003cdiv\u003e\n      \u003ca href=\"https://www.amazon.ca/dp/B0CT3285LL\" class=\"parts-url btn-primary\" target=\"_blank\"\u003eBuy Now\u003c/a\u003e\n\n  \u003c/div\u003e\n\u003c/div\u003e\n\n  \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n","metadata":{"name":"A large knob for main volume encoder","url":"https://www.amazon.ca/dp/B0CT3285LL","description":"This one is nice (large/solid feel)","quantity":"1"}},{"element_type":"product","content":"https://www.adafruit.com/product/5530","metadata":{"name":"Aluminum Knob (20mm) for macropad encoder","url":"https://www.adafruit.com/product/5530","description":"Nice add on. 20mm seems to still fit comfortably.","quantity":"1","featured":false}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eLearn guides\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"guide","content":"https://learn.adafruit.com/adafruit-macropad-rp2040/macropad-assembly","metadata":{"guide_id":"3366","page_id":"22673"}},{"element_type":"guide","content":"https://learn.adafruit.com/customizing-usb-devices-in-circuitpython/circuitpy-midi-serial","metadata":{"guide_id":"3334","page_id":"22294"}}]