Advertise toolboard board capabilities/custom CAN UUID's

I’m building a Klipper printer with replaceable/ interchangeable tool heads, leveraging the flexibility of the CAN bus.

I wanted to know if there was a way differentiate different types of boards, either through a addendum to the CAN UUID, or a way for a can bus board to advertise it’s features.

I plan to create a python script that check which tool boards are connected, and load /remove appropriate CFG files.

What would be the differences between toolheads? I’ve done some custom toolheads - it’s fairly easy to do one that works well with PLA, ABS is a bit more difficult and requires some tricks. Going to higher temperature filaments with different mechanical capabilities is even more difficult. Right now, I’m looking at basing my toolheads on the Micro-Swiss NG as it’s all metal, has a fairly decent cooling shroud and can run up to 300C and not worrying about having multiples toolheads with different capabilities.

The short answer to your question is no. The issues involved with hot plugging CAN devices are fairly significant (it is possible but requires low level support to detect changes in the network and ensure none of the devices on the CAN network need to be reset) followed by automatically identifying the new toolhead on the CAN network along with its parameters (which I would guess be stored in the toolhead’s controller and readable like attached device parameters) and then specifying what sections of the printer.cfg are to change before restarting Klipper would involve a large amount of work across various software packages.

The question came up recently about automatically changing the printer.cfg set up when a different diamber nozzle was installed and the work required for that was prohibitive as well as being against the Klipper operating paradigm.

Thankyou for your detailed reply.

Your last paragraph is one of the main use cases of using different toolheads. I’m not a fan of removing the nozzle tip to change between sizes and nozzle types, and it destroys the M6 threads on the heat block.

Also using a PTFE lined hotend has its advantages vs full metal while printing some materials like metal-fils and PLA. Hardened nozzle tip + full metal for CF Nylon etc…

I understand that hot swaping may not be an option, what about something like the following:

Turn Machine OFF > Swap Tools > Turn Machine ON > automatically configure tools/trigger a script to detect tools on startup> load changes to CFG > Reset klipper

Since the script to get UUIDs of CAN tools exists, if there was a pay to append a unique code to it on the toolhead itself, like 04HT_xxxxxxxxx, where the starting characters describes the tool I could figure out the rest with scripts outside of klipper without disturbing any other core functionality. Is the UUID created by klipper on Linux or the low level firmware on the toolboards?

The klipper mcu code generates a canbus UUID by calculating the 64bit hash of the unique device ID stored during the chip’s production process.
So it’s unique, stable, and not modifiable.

1 Like

I just changed a worn out nozzle on a printer and it reminded me what a pain in the bum the whole process is and got me thinking about this thread. The result of this was coming to the opinion that it shouldn’t be easier or more automated to replace nozzles and toolheads.

The reason I came to that conclusion is because you need to do a PROBE_CALIBRATE in both cases. I know you might argue that you don’t need to do it in the toolhead change case if the Z axis sensor is part of the toolhead but when something is moved around things on the toolhead get bumped or not get put back exactly the way it was (maybe a bit tilted or maybe no longer exactly over the same point of the bed - which is an issue for something like a rough PEI sheet and a BL Touch).

Remember that when checking the Z axis, an accuracy of 20-30 microns is required and that’s easy to lose when moving things around.

I would agree with a process like that if at the end it included:

  • Heat up nozzle
  • Heat up toolhead
  • Perform a PROBE_CALIBRATE

Personally, I think the best approach is to have multiple printers, each configured to work with different materials. I’m looking over the four printers I have running right now (with a new one being put together) and listen to what even moderate “power users” have in their homes (and businesses) I don’t think I’m unique.

Now, some people might say “but what about the new Ender 3 user?” and I would reply that the overwhelming majority of them are just using PLA, maybe have tried ABS with it coming out very badly and then going back to PLA so their needs for multiple toolheads/changing nozzles is pretty minor.

Having said all this, I don’t think you have a bad idea but before looking seriously at the work involved, I think there needs to be a survey done of users finding out how many printers they have and what they are doing with them. My opinion, stated above, is based on my observations without any kind of defendable data to back it up.