[{"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        \u003ch2\u003eOverview\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","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/078/original/irc-display-bot-enclosure-overhead-right.jpeg?1764567881","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        \u003cp\u003eThis is an enclosure I designed for an angled desktop notification display with a Metro ESP32-S3 and a 2.8\" TFT display shield. I'm using this as an IRC client to run my \u003ca href=\"https://github.com/samblenny/irc-display-bot\" target=\"_blank\"\u003eirc-display-bot \u003c/a\u003ecode for LoRa temperature monitoring, but the same hardware build would easily work for other CircuitPython IoT projects where you want a little desktop status display.\u003c/p\u003e\n\u003cp\u003eI designed this in Blender using geometry nodes to build up a model of the negative space for the Metro, display shield, and cutouts for the viewable screen area and cable ports. The only mildly tricky thing about it was that it's important to use the \"Mesh Boolean\" node with the \"Exact\" algorithm to join objects. If you use the Geometry Join node, or a different algorithm, the resulting geometry will be messed up and not usable as a cutting tool with the boolean difference modifier.\u003c/p\u003e\n\u003cp\u003eTo learn about the code I'm running for the IRC display bot, check out my \u003ca href=\"https://adafruit-playground.com/u/SamBlenny/pages/irc-display-bot\" target=\"_blank\"\u003eIRC Display Bot\u003c/a\u003e Playground guide.\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","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        \u003ch2\u003eParts\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","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/5500","metadata":{}},{"element_type":"product","content":"https://www.adafruit.com/product/1651","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.com/dp/B00GDXU4WM\" class=\"parts-name\" target=\"_blank\"\u003e2-28x5/16\" Thread Rolling Screws\u003c/a\u003e\n      \u003cdiv class=\"parts-description\"\u003eSmall Parts 0205LPP Thread Rolling Screw for Plastic, #2-28 Thread Size, 5/16\" Length (Pack of 100)\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.com/dp/B00GDXU4WM\" 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":"2-28x5/16\" Thread Rolling Screws","url":"https://www.amazon.com/dp/B00GDXU4WM","description":"Small Parts 0205LPP Thread Rolling Screw for Plastic, #2-28 Thread Size, 5/16\" Length (Pack of 100)","quantity":"1"}},{"element_type":"text","content":"\n        \u003ch2\u003e3D Printing \u0026amp; Assembly\u003c/h2\u003e\n\u003cp\u003eI printed this in Bambu Lab PLA Basic on a Bambu Lab P1S with a slightly modified 0.2mm layer height standard preset (I turned the maximum acceleration down to 5000 mm/s^2, set the infill to lines, and \u003ca href=\"https://adafruit-playground.com/u/SamBlenny/pages/calibrate-your-3d-printer-for-dimensional-accuracy\" target=\"_blank\"\u003ecalibrated\u003c/a\u003e the X-Y hole compensation).\u003c/p\u003e\n\u003cp\u003eBefore slicing the STL files:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eOrient the bezel so its top face is against the build plate (2mm screw holes pointing up)\u003c/li\u003e\n\u003cli\u003eOrient the base so its 2mm holes are against the build plate (4.5mm countersink holes pointing up)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAssembly Notes:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eThe enclosure clearance is meant to work with adhesive rubber bumpers attached to the bottom of the Metro ESP32-S3. Your Metro board should come with a set of rubber bumpers.\u003c/li\u003e\n\u003cli\u003eUpdate CircuitPython to the latest release version BEFORE attaching the display shield. It's very difficult to access the Boot button once the display is attached.\u003c/li\u003e\n\u003cli\u003eWhen screwing the base onto the bezel, first thread the screws into the base's 2mm holes so just a little bit of the screws stick out. Use the screw tips to align the base with the bezel. If the screws cause a gap between the base and the bezel, back the screws out slightly until the gap closes. To prevent new gaps, pinch the base and bezel together as you tighten the screws.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThese are my Blender design file, STL files, Blender screenshots and build photos:\u003c/p\u003e\n      ","metadata":{}},{"element_type":"button","content":"https://github.com/samblenny/irc-display-bot/releases/download/v0.2.2/irc-display-bot.blend","metadata":{"class":"btn btn-large btn-block btn-primary","button_type":"primary","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/samblenny/irc-display-bot/releases/download/v0.2.2/irc-display-bot-bezel.stl","metadata":{"class":"btn btn-large btn-block btn-primary","button_type":"primary","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/samblenny/irc-display-bot/releases/download/v0.2.2/irc-display-bot-base.stl","metadata":{"class":"btn btn-large btn-block btn-primary","button_type":"primary","target":"_blank","zip_folder":"false"}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/079/original/blender-screenshot-bezel-wireframe.jpeg?1764569078","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/080/original/blender-screenshot-cutout-geometry-nodes.jpeg?1764569102","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/081/original/irc-display-bot-enclosure-overhead-left.jpeg?1764569131","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/082/original/irc-display-bot-enclosure-ports.jpeg?1764569157","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/083/original/irc-display-bot-enclosure-base.jpeg?1764569191","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/084/original/irc-display-bot-enclosure-screws.jpeg?1764569250","metadata":{}}]