I wanted to upgrade a few of the things I use in my daily life. I decided that my 10 year old full size corded Apple Mac keyboard and my 15 year old corded Logitech G3 gaming mouse needed to be retired. While they have performed greatly in their years of faithful service I think it is time to move on.
I started looking around. I wanted a keyboard with RGB LEDs, that was one of my requirements and what I landed on was mechanical keyboards. There are a ton of mechanical keyboards out there. I’ve been reading on them for a few days now and I still know nothing about them. It is a huge rabbit hole of tech. There are a ton of brands and manufacturers as well as DIY kits so you can build your own from scratch. I don’t know much so I decided to go with a premade keyboard versus building my own. Out of all the brands out there I landed with Keychron, and for one major reason alone – they are the only RGB mechanical keyboard that I could find that was Mac friendly. As far as I can tell Corsair and Logitech are the only two brands with software for their mice and keyboards that support Apple Macs. That is quite limiting for one using said machines, like me. The common answer I found regarding Macs and keyboards was “plug it into a PC to change the settings then move it back”…yeah a big fuck no to that. The Keychron keyboards not only have Mac keys installed out of the box they also do not have any software. While this means I don’t get to map the RGBs and keys and make fancy color combos, which kinda sucks, I do get a mechanical keyboard that supports my OS and has RGB modes. Thats good enough for me.
Let me start off by saying by no means am I an expert with Klipper, or 3D printing. I don’t really know wtf I am doing half the time, I just manage to get it working – hah! I few days ago I decided to take the plunge into Klipper with my printer, a Monoprice Maker Select v2.1 with an SKR 1.3. I had been running Marlin 2.x on my printer and it was all setup and configured and working perfectly. I decided apparently that “working perfectly” wasn’t good enough, and I needed to break it. Enter Klipper. From what I gather now that that I have a 32 bit board I wont really gain much in the way of performance with Klipper vs if I still had the 8 bit Melzi. What you do gain is a much easier way to configure the firmware over compiling and flashing the board after every change. You just save a file and reboot.
Now I wanted to document the process for others in case it helps, and I figured this would be a quick build process and a quick write up. Heheh, I was wrong. I has now been a solid week of tweaking and configuring Klipper as well as a few days of writing this post and attempting to get it finished. Every time I do something else comes along that I feel I need to add to the process. Well, I finally got it all done – I think. Now what started off as a nice clean post turned into a ton of sections that didn’t jive. I’ve done my best to make it all flow and make sense, if I missed something let me know.
If you’ve been here before then you know I use Node-Red, if not and you don’t know what Node-Red is, you should check it out. To get a frontend UI out of Node-Red there has always been the Dashboard node for us to use and a set of Dashboard nodes to go with it. I have never been a huge fan of the Dashboard, but it was what we had and it did the job. The Dashboard nodes allowed you place UI nodes and connect them to your data and it would do the rest, no HTML code required on your behalf. But that was one of the limitations, was that you did not have control over the code. Enter UIBuilder.
The UIBuilder Wiki and the Github for the author have a ton of information and examples of how to get a few basic things done. Just expect most of them to be done with VueJS. It appears (at least to me, I could be wrong) that UIBuilder was originally VueJS heavy/dependent and as it matures it is more open to other frameworks. As of v3.1.3 it no longer installs Bootstrap-Vue and VueJS by default, as it had done it all prior versions. So just be aware that you can use any framework you want, but all of the examples (so far) are all written in VueJS. There is also the Node-Red forums if you get stuck, the author also happens to frequent the group.
The Monoprice Maker Select v2.1 comes with cable chains on the X and Z-axis, but not the Y-axis. I have no idea why. It has been on my list of to-do items to add a cable chain to the Y-axis, but I have just never gotten around to do it. About a year ago or so I managed to get around to printing the cable chain links and mounts but I never installed any of it. Fast forward to present day and I find myself wanting to tinker with the printer and have been thinking of new upgrades for it. Thats when I spotted the chain that I had printed in a box. I originally printed the chain to mount to the printer and to the stock carriage, but I no longer have that carriage. Now I have a carriage from Gulfcoast Robotics, so what I already printed doesn’t fit.
Off to Tinkercad!
I have previously designed a handle for the new Gulfcoast carriage that just slips on, I added a zip-tie to keep it from accidentally falling off and it works great! So I figured I could take that designed and remix it to work for me as a contact point for the heatbed cable chain. A day or two and 6 prints later and I have a slip-on cable chain for the Maker Select. I remixed a rear frame mount so that no screws are needed, just slide the piece over the bracket. The same goes for the bed carriage, just slide it on. I did add a zip-tie to make sure it doesn’t pop off, because it is a pain to put on. I used the existing chain links that I had already printed and it all came together.
The one thing I did not think about was the offset that the chain would have. The original mount that uses screws mounts to the same place as the Y-axis stepper motor and this is centered with the bed and the wiring. Adding a cable chain here you are going to get a nice straight line. I am using a slip-on rear mount so I cannot center it due to the stepper being in the way. Luckily I had two offset links printed from back then. Like it was meant to be. I still need to print one more but it works fine it just looks a little odd because of the way the chain is offset.
Maker Select Gulfcoast Robotics Heatbed Cable Chain (my cable chain mounts) https://www.thingiverse.com/thing:4644050
The cable chain links to make the chain https://www.thingiverse.com/thing:1060522
Y-axis cable chain mount for MP Maker Select (the thing I based my remix off of) https://www.thingiverse.com/thing:2221459
For the past few weeks (months?) whenever I was flashing an SD card with Balena Etcher I would see an ad for creating a Spotify Connect server out of a Raspberry Pi. I never really thought about it until I was cleaning the garage (not for fun, I’m moving to Texas) and I wanted to play some music. I have had a standard stereo receiver with some stand up cabinet speakers for a while it just hasn’t gotten much use this year. When I had used it I would just plug my phone into a cable I had directly plugged into the receiver and I would play songs that way. Well now I have an iPhone, no more Androids, and now I don’t have a headphone jack. Great. Fuck the dongles. I now had a need for a Spotify Connect server, which honestly is what I should have done a while back. Balena has their own special way of doing things, which I kinda don’t like so I searched out a different solution.
The software I used is called Raspotify and it is really simple to get up and running. All you need is a (any) Raspberry Pi, the SD card for it, power, and a way to plug it into your stereo. Almost any Pi except a Zero are basically plug-n-play as they have a 3.5mm audio jack. Super simple. After flashing Raspbian Lite to the SD card, boot the Pi and then run one command: curl -sL https://dtcooper.github.io/raspotify/install.sh | sh
That will get you going, after the Pi is finished you should now see a Spotify Connect server named “raspotify” on your Spotify app. You can edit /etc/default/raspotify to change the defaults if you want. Like stream quality and the server name etc. I highly recommend doing this. I noticed the volume was super low by default, well the Pi had its volume set to 40%, dang. Use the command alsamixer that will let you up the volume. I tend not to use things at 100% of the volume available, most times devices start to distort at max levels. I usually stick to 90% for my volume level.
I initially got it setup and running on a Pi 3B+ and it worked just fine, except it didn’t sit well with me using a full blown Pi for such a simple task as streaming music. It just isn’t right. You could use one single Pi as a Spofity connect server as well as host many other things (Pihole etc) but I like to keep things separate. Less chance of failure for me, since I tend to not leave shit alone. Enter the Raspberry Pi Zero W. But the RPi Zero doesn’t have an audio output, ha-hah! There are a few audio DAC hats out there for the Zero that add outputs, but I don’t have one and I didn’t want to buy one or wait for it to get delivered. So we have to make one! It is actually very simple, as long as you have the parts around that is. We are going to create a pair of basic line-out outputs. Good for receivers not so good for things like headphones. Its also just a basic output no extra DAC here. If you find the audio quality isn’t up to snuff (I have not noticed a difference but I have not also tested it thoroughly or compared it to other sources, yet) then a DAC hat is for you.